Newsgroup: it.comp.java
Titolo: Gruppi di thread e checkAccess

Ciao a tutti.
Stavo cercando di capire come funzionano i permessi su thread
appartenenti a threadgroup differenti.
Così ho scritto il seguente codice:
FILE ProgMain.java
-------------------------------------------------------------------------------
package prove;
import java.lang.Thread;
public class ProgMain extends Thread{
    private static MyThread myThread;
    public ProgMain(MyThread t){
        myThread = t;
    }
    public static void main(String args[]){
        myThread = new MyThread(); // il nome del thread
        myThread.start();
        ProgMain principale = new ProgMain(myThread);
        principale.start();
    }
    public void run(){
        System.out.println("Sono il thread creato da ProgMain il mio
gruppo é: " + this.getThreadGroup().getName());
        try{
            myThread.setName("pippo");
        }catch (SecurityException e){
            System.out.println("Accesso negato");
        }
    }
FILE MyThread.java
----------------------------------------------------------------------
package prove;
public class MyThread extends Thread{
    public MyThread(){
        super(new ThreadGroup("Gruppo 1"),"a thread"); // la chiamata
a "super" deve essere la prima istruzione del costruttore
                                                       // "gruppo 1" é
il nome del gruppo del thread corrente
                                                       // "a thread" é
il nome del thread corrente
    }
    public void run(){
        System.out.println("Sono il thread creato da MyThread il mio
gruppo é: " + this.getThreadGroup().getName());
        try {
            sleep(20000);
        } catch (InterruptedException ex) {
            System.out.println("Sono MyThread é stata generata una
InterruptedException");
        }
    }
}
}
-------------------------------------------------------------------------------------------
Il thread generato dalla classe ProgMain ha come gruppo "main" mentre
quello generato da MyThread ha come gruppo "Gruppo 1" quindi se il
primo cerca di modificarne il nome dovrebbe essere generata una
"InterruptedException" (che ho catturato) ma...non viene sollevata
alcuna eccezione :-(
L'eccezione dovrebbe essere generata perchè setName() richiama
checkAccess() del SecurityManager ma...non succede nulla.
Dove sto sbagliando?
Grazie a tutte le persone che mi risponderanno.

 
1) se non c'� un security manager instanziano la quasi totalit� dei 
controlli di sicurezza non � effettuata, tant� che � possibile invocare 
metodi privati tramite reflection.
2) ThreadGroup ha dei seri problemi di sicurezza e scarso impiego pratico.
sv.

 sv.
Come posso fare per far girare il mio esempio? come dovrei istanziare
il security manager affinchè venga sollevata l'eccezione?

 il security manager affinch� venga sollevata l'eccezione?
http://java.sun.com/docs/books/tutorial/essential/environment/security.html
mi sembra che sei agli inizi con Java, io ti consiglierei di partire con 
qualcosa di piu semplice.
sv.

 sv.
Dipende da cosa intendi per gli inizi...
In passato ho programmato in java per sostenere alcuni esami e per la
tesi in università ma, sicuramente, non ho "anni di programmazione"
alle spalle ;-)
In particolare il security manager non l'ho mai visto :-(
Mi guarderò il link che mi hai girato.
Per ora grazie 1000 ;-)

 Per ora grazie 1000 ;-)
non era per tirarsela o altro, solo che avendo notato il commento su 
"super" m'ha fatto pensare ad uno agli inizi di Java, tutto qui.
Solitamente il SecuriryManager lo si usa in con RMI per lo scaricamento 
dinamico delle classi o con JNDI.
Personalmente, se hai tempo e voglia, ti consiglierei di leggere 
Effective Java di Bloch.
sv.

 sv.
No lo sò non me la sono presa e mi rendo conto che nonostante sappia
qualcosa ho ancora molto da imparare quindi seguirò i tuoi
consigli ;-)
Era solo che mi serviva un esempio banale da fare "al volo".
Grazie ancora per i consigli.