View Full Version : [Java] RMI
DarkSiDE
06-07-2006, 18:19
Salve,
sto sviluppando una piccola applicazione java per giocare alla battaglia navale. Sto avendo problemi con l'rmi:
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: navale.Gui_Stub
Il problema è che l'errore lo dà saltuariamente (riavvio e mi funziona solo una volta, la seconda lancia quell'errore), inoltre lo stub è presente nel package navale. Soluzioni?
Un altro problemino, ho visto un'applicazione molto simile alla mia che non fa uso del policy file, l'autore mi ha spiegato che ha dato tutti i permessi all'applet da codice..vi sembra possibile? effettivamente girava senza policy file
grazie,
Francesco
sottovento
07-07-2006, 03:35
Ciao,
effettivamente l'eccezione e' dovuta al fatto che non trova lo stub. Veramente strano... inoltre dici che al riavvio le cose funzionano correttamente.
Una domanda: questo stub e' messo staticamente nella directory adeguata oppure lo scarichi dinamicamente, per esempio attraverso un server web?
Se fai delle modifiche che non comportano la generazione di un nuovo stub, funziona ancora? Funziona solo la prima volta che riavvi? Funziona ancora una volta che lo generi nuovamente?
Per quanto riguarda il file di policy... me lo sono sempre generato e non mi sono mai chiesto se era possibile fare le stesse cose programmaticamente. La cosa e' interessante, se hai qualche info in piu', per favore, pubblicala
High Flying
Sottovento
In effetti servirebbe qualche informazione in piu',
tipo tutto lo stack trace dell'eccezione.
Immagino userai un registro rmi, come lo avvii?
Inoltre usi java5 o precedenti?
DarkSiDE
07-07-2006, 11:22
sono un cretino, davvero.
Era solo una questione di classpath :-)
l'rmi registry lo lancio da "esegui", esistono modi "migliori" o semplicemente più veloci? è possibile lanciarlo dall'applicazione stessa?
mi chiedevo una cosa: quando andrò a creare un pacchetto di installazione della mia applicazione come farò a far settare il classpath della mia applicazione?
esiste una maniera più elegante per far sì che, cliccando su gioco.exe faccia il tutto? (lanciare l'rmi registry, settare la path, lanciare il gioco (applet))
in ultimo: ho visto un'applicazione molto simile alla mia che non fa uso del policy file, l'autore mi ha spiegato che ha dato tutti i permessi all'applet da codice e non ha importato le classi per la sicurezza..vi sembra possibile? effettivamente girava senza policy file
utilizzo J2SE 1.5.0_06 e su html.it ho letto:
Note
Nell'esempio precedente si è utilizzato il J2SE 1.5.0_06 che solleva il programmatore dal compito di creare lo skeleton e lo stub necessari alla tecnologia RMI. Qualora si utilizzasse una versione più vecchia di JRE, bisognerà, invece, avvalersi del comando rmic per produrre queste due classi.
Nel caso si utilizzino due macchine distinte per l'applicazione server e per quella client, sarà necessario copiare l'interfaccia remota ISquareRoot anche sul client.
vi risulta? se non registro con rmic a me dà errore
grazie mille
l'rmi registry lo lancio da "esegui", esistono modi "migliori" o semplicemente più veloci?
lanciarlo da uno script ant, per esempio.
è possibile lanciarlo dall'applicazione stessa?
certo:
Registry reg = LocateRegistry.createRegistry(port);
Il classpath penso lo puoi specificare anche nel manifest file del
pacchetto jar.
In genere puoi fare tutto (lanciare registri, fare rmic, ecc) con un buildfile di ant.
Per il fatto del policy specificato da programma sono curioso anche io...
DarkSiDE
07-07-2006, 11:42
lanciarlo da uno script ant, per esempio.
certo:
Registry reg = LocateRegistry.createRegistry(port);
Il classpath penso lo puoi specificare anche nel manifest file del
pacchetto jar.
In genere puoi fare tutto (lanciare registri, fare rmic, ecc) con un buildfile di ant.
Per il fatto del policy specificato da programma sono curioso anche io...
all'interno dell'applicazione, quando dovrei lanciarlo?
mi spieghi la storia del file ant? grazie
... vi risulta? se non registro con rmic a me dà errore
grazie mille
E' vero, con la versione 5 gli stub, se non trovati, vengono generati automaticamente,
E' comunque necessario generarli se si intendono supportare client pre-1.5.
Non ho capito perche' ti da errore, spiegati meglio.
Tieni conto che se rmiregistry prima di java5 non doveva vedere
gli stub nel classpath, ora sono le classi di implementazione delle
interfacce remote che non devono essere viste dal registro
(una volta che il registro vede le classi di implementazione gli
stub possono essere automaticamente generate da esse).
all'interno dell'applicazione, quando dovrei lanciarlo?
Prima della (re)bind. Non so come sia il tuo codice, ti mostro un esempio:
// creo il server unicast, esporto su porta 1200
MiaInterfaccia srv = new MioServer(1200);
Registry reg = LocateRegistry.createRegistry();
reg.rebind("MioServer", srv);
mi spieghi la storia del file ant? grazie
Ant e' simile a make, e' un po' uno standard per java, lo trovi qui:
http://ant.apache.org/
Nella mia guida (vedi sito in firma) trovi un capitoletto dedicato ad Ant ;)
DarkSiDE
10-07-2006, 15:05
nessuno?
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.