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.....
grant {
permission java.net.SocketPermission "*:1024-65535", "accept, connect,
listen";
};
poi esegui il programma usanda l'opzione
-Djava.security.policy=policy.txt
ciao!
"paolog" <paol...@libero.it> ha scritto nel messaggio
news:dpK8a.173467$ZE.51...@twister2.libero.it...
> 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.....
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