Newsgroup: it.comp.java
Titolo: rmi ClassLoader 2

Ciao a tutti,
sono costretto a riprendere in mano il post di qualche giorno fa: credevo di aver 
risolto invece....
Avevo scritto:
Ho trovato un' interessante funzione in java che sto cercando di  approfondire: 
il caricamento dinamico delle classi.
Ho trovato del codice d'esempio però non riesco a farlo girare sulla mia  macchina.
Quello che interessa a me è creare un piccolo caricatore da mettere sul 
client (rete locale) e tenere il resto dell' applicativo sul server.
Questo è parte dell' esempio che sto studiando:
public class BootstrapClient {
  public static void main(String args[]) {
    System.setSecurityManager(new RMISecurityManager());
    Frame cf = new CloseableFrame("NetworkApp");
    cf.show();
    try {
      URL url = new
---->       URL("
http://200.200.15.2//home/paolos/eclipse/workspace/rmiserver/
");
      Class cl = RMIClassLoader.loadClass(url,"serverapp.NetworkApp");
      Class argTypes[] = {Class.forName("java.awt.Frame")};
      Object argArray[] = {cf};
      Constructor cntr = cl.getConstructor(argTypes);
      Runnable client = (Runnable)cntr.newInstance(argArray);
      client.run();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
La riga in cui mi 'impantano' è quella in cui si da l'Url del applicazione 
server. E' giusto quello che ho scritto? nel senso che il computer dove si 
trova l'applicazione si chiama lserver ed il percorso è :
/home/paolos/eclipse/workspace/rmiserver/
l' applicazione è: serverapp.NetworkApp
 L' errore di ritorno è:
java.lang.ClassNotFoundException: access to class loader denied
	at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:421)
	at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:159)
	at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:631)
	at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:169)
	at BootstrapClient.main(BootstrapClient.java:21)
Caused by: java.security.AccessControlException: access denied (java.net.SocketPermission 
200.200.15.2:80
 connect,resolve)
	at java.security.AccessControlContext.checkPermission(AccessControlContext.java:270)
	at java.security.AccessController.checkPermission(AccessController.java:401)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java:542)
	at sun.rmi.server.LoaderHandler$Loader.checkPermissions(LoaderHandler.java:1128)
	at sun.rmi.server.LoaderHandler$Loader.access$000(LoaderHandler.java:1082)
	at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:385)
	... 4 more
Praticamente se la classe 'server' è sulla stessa cartella o al massimo 
sottocartella di quella 'client' (BootstrapClient.java),
riesco ad usarla altrimenti mi ritorna l' errore di cui sopra.
Ho pensato che fosse un probliema di sicurezza; ma se così fosse come ne esco?
Se qualcuno può aiutarmi.....

 Se qualcuno puň aiutarmi.....

 
Ciao,
ti ringrazio per la risposta, ho provato a fare come dicevi, ho cercato di 
eseguire alla lettera
però ancora non mi funziona. Ha cercato di documentarmi in merito alla sicurezza 
però non ho trovato molto di più di
quello che tu mi hai consigliato.
Questa è la riga per il lancio del prg
[paolos@lserver rmi]$ java -Djava.security.policy=policy.txt BootstrapClient
Questo è il nuovo output:
java.security.policy: errore nellanalisi di {0}:
        {1}
java.lang.ClassNotFoundException: access to class loader denied
        at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:421)
        at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:159)
        at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:631)
        at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:169)
        at BootstrapClient.main(BootstrapClient.java:26)
Caused by: java.security.AccessControlException: access denied (java.net.SocketPermission 
200.200.15.2:80
 connect,resolve)
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:270)
        at java.security.AccessController.checkPermission(AccessController.java:401)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:542)
        at sun.rmi.server.LoaderHandler$Loader.checkPermissions(LoaderHandler.java:1128)
        at sun.rmi.server.LoaderHandler$Loader.access$000(LoaderHandler.java:1082)
        at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:385)
        ... 4 more
il file policy.txt è nella stessa cartella di BootstrapClient.
Se hai qualche altro suggerimento non può che farmi piacere.
Ti ringrazio