Newsgroup: it.comp.java
Titolo: RMI: UnmarshaException

Che errore č???
Ho lanciato rmiregistry. Quindi ho lanciato la classe che implementa il mio
server...ma ottengo questo errore:
Exception in thread "main" java.rmi.ServerException : RemoteException
occurred in server thread ; nested exception is:
    java.rmi.UnmarshalException: error unmarshaling arguments; nested
exception is:
    java.lang.ClassNotFoundException: EsasyServerImpl_Stub
    at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
    at sun.rmi.server.UnicastRef.invoke(Unknown Source)
    at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
    at sun.rmi.Naming.rebind(Unknown Source)
at EasyServerImpl.main(EasyServerImpl.java:122)
Faccio presente che nel server ho questa chiamata:
String serverObjectName = "file://
127.0.0.1/EasyServer
";
Naming.rebind( serverObjectName, temp );
Non riesco a venire a capo dell'errore.Qualcuno puň aiutarmi?Qualche dritta?
Grazie
Davide

 ha scritto nel messaggio
news:itKq7.15153$Lp6.5...@news.infostrada.it...

Allora, per quanto mi ricordo di RMI devi togliere tutte quelle cose nella
String e lasciare solo il nome EasyServer (e spero di non averti detto una
cazzata!), ma a giudicare dall'errore, mi sa che non hai lanciato rmic per
creare gli stub, o se l'hai fatto, allora vuol dire che non li trova e
allora prova a inserire o easyserver e basta o anche localhost/easyserver e
basta!

Credo di avere risolto. Metto tutte le classi che utilizza il server nella
dir da cui lancio rmiregistry!!!
Detto fra noi mi sembra decisamente un comportamento "cazzuto", ma se non
faccio cosě rmiregistry non vede le classi ed inizia a darmi errori di
Unknownsource.
Ulteriori suggerimenti?
grazie, davide

 grazie, davide
Setta bene il classpath

 Ulteriori suggerimenti?
Ciao! Premetto di non essere un grande esperto di programmazione, ma ho
incontrato anch'io un problema del genere.
Nel metodo di binding utilizzo la forma "file://host:porta/NomeServizio".
Credo che perň manchi un parametro indispensabile nella chiamata
dell'interprete Java.
Prova a lanciare l'ipotetica classe principale in questo modo:
java -Djava.rmi.server.codebase=file:///PercorsoClassiServer/
NomeClassePrincipale
Il parametro dovrebbe essere indispensabile per accedere all'URL (anche con
altri protocolli, credo) in cui andare a cercare gli stub che ti mancano.
Occhio, che l'ultimo slash nel percorso č piů che indispensabile!
Ho letto da qualche parte che una soluzione quale quella di lanciare
Rmiregistry dalla stessa directory sarebbe totalmente sconsigliata poiché,
ma non sono certo di aver capito bene tutto, c'č il rischio che Rmiregistry
possa fare confusione tra i servizi registrati e le classi che vede.
Buona fortuna, spero di averci azzeccato e di esserti utile.
Vincenzo
*** gli stub li hai creati, sě?
!!!!!
Porca pupazza!!! Questo programma troppo intelligente ha messo
automaticamente qui sopra la stringa "file:". Non riesco a toglierla...
occhio che non esiste!!! Vedi dov'č blu? Scusa...

Sei stato più che utile. Effettivamente passando il percorso corretto con
l'opzione -djava.rmi.server.codebase=... ottengo il risultato desiderato. Da
quello che mi è sembrato di capire però nel percorso che passi non sono
contemplati gli archivi jar, cosa che mi costringe comunque ad avere in una
dir le classi che servono al server quando desideravo evitare ciò con un bel
jar package.
Grazzissime,
Davide
