Buondì! Sto realizzando un progetto per l'esame di Programmazione Avanzata e di Rete (pr gli amici PAR) e sto incontrando qualche problemino con un server attivabile :master:
Vi mostro il pezzetto di codice che da problemi, poi ve lo spiego :master:
Il codice riguarda il lato client: all'utente vengono chiesti i dati di accesso e successivamente viene chiamato il metodo remoto login (che non fa altro che interrogare il database per verificare se i dati sono corretti o meno). Se l'autenticazione va a buon fine viene restituito un oggetto con le informazioni dell'utente, null altrimenti.codice:// client code SystemUser user = factoryServer.getAuthenticationAgent().login(username, password, localAddress); System.out.println("USER = " + user); if (user != null) { System.out.println("Now I try to get the mobile server"); RemoteDatabase d = ActivatableFactory.init(); System.out.println("REMOTE DATABASE = " + d); RemoteUser r = d.getMobileServer(user); System.out.println("REMOTE USER = " + r); }
L'autenticazione non da problemi, infatti user è diverso da null. Fatto questo devo chiedere ad un altro server remoto (un server Activatable di cui ottengo correttamente il riferimento con RemoteDatabase d = ActivatableFactory.init();) un "server mobile" (ovvero un server remoto non ancora esportato che viene serializzato e spedito in rete). Ed è qui che ho problemi: nonostate la chiamata remota a getMobileServer venga eseguita correttamente (lato server vedo correttamente le "stampe di debug"), sul client ottengo un'eccezione (le mie classi sono quelle nel package par (e sotto-package)):
Pensavo fosse un problema di serializzazione degli oggetti ma ho fatto implementare Serializable a TUTTO e non è cambiato nulla!codice:java.rmi.UnmarshalException: error unmarshalling return; nested exception is: java.io.EOFException at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:173) at sun.rmi.server.ActivatableRef.invoke(ActivatableRef.java:124) at par.server.activatable.ActivatableDatabase_Stub.getMobileServer(Unknown Source) at par.server.RMIClient.run(RMIClient.java:113) at par.minimal.MinimalClient.main(MinimalClient.java:21) Caused by: java.io.EOFException at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:323) at java.io.ObjectInputStream$BlockDataInputStream.readUnsignedShort(ObjectInputStream.java:2764) at java.io.ObjectInputStream$BlockDataInputStream.readUTF(ObjectInputStream.java:2820) at java.io.ObjectInputStream.readUTF(ObjectInputStream.java:1051) at java.rmi.server.RemoteObject.readObject(RemoteObject.java:407) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) at sun.rmi.server.UnicastRef.unmarshalValue(UnicastRef.java:306) at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:155) ... 4 more![]()
Qualcuno ha qualche idea di cosa significhi? E' da due giorni che non ne vengo fuori!
Grazie in anticipo =)

Rispondi quotando
al volante son nervoso