Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

RMI: strano comportamento fuori da Eclipse

0 views
Skip to first unread message

Jack

unread,
Oct 19, 2006, 10:14:14 AM10/19/06
to
Salve a tutti,

sto sviluppando un'applicazione Java che utilizza RMI.
Il punto è il senguente.
Ho creato il mio server rmi, ed il mio client.
Il server effettua correttamente la registrazione dell'interfaccia rmi
dei metodi remoti sul registry.
A questo punto se eseguo sia il server che il client all'interno di
Eclipse, tutto funziona correttamente, e lo stesso vale se eseguo il
server da Eclipse ed il client da riga di comando.
Basta però eseguire il server da riga di comando, che questo non
riceve più le chiamate remote del client, che si becca sempre una
Remote Exception.
Questo vale sia in locale che in rete LAN.

In particolare il server registra l'interfaccia sul registry sulla
porta 1099

try {
LocateRegistry.createRegistry(1099);
String host = InetAddress.getLocalHost().getHostAddress();
Naming.rebind("rmi://"+ host +":1099"+"/service",service);
System.out.println("REGISTRY INIZIALIZZATO");
} catch (RemoteException e) {
System.out.println("REGISTRY NON INIZIALIZZATO");
e.printStackTrace();
}


Il client fa la lookup al registry utilizzando l'inidirizzo IP del
server:

Service s =
(Service)Naming.lookup("rmi://"+ipaddress+":1099"+"/service");
s.doSomething();


Qualche suggerimento?

Grazie,

Jacopo

Roc

unread,
Oct 19, 2006, 10:23:04 AM10/19/06
to

Posta anke l'eccezione..

Jack ha scritto:

Jack

unread,
Oct 19, 2006, 11:31:56 AM10/19/06
to
Roc ha scritto:

> Posta anke l'eccezione..

ecco qua il malloppo!

----------------------------------------------------------
java.rmi.UnmarshalException: error unmarshalling return; nested
exception is:
java.io.EOFException
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:157)
at
java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:179)
at
java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132)
at $Proxy0.receiveJoin(Unknown Source)
at rmi.RMIClientSide.sendJoin(RMIClientSide.java:103)
at controller.Controller.actionPerformed(Controller.java:468)
at
javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at
javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at
javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at
javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.AbstractButton.doClick(AbstractButton.java:302)
at
javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1000)
at
javax.swing.plaf.basic.BasicMenuItemUI$Handler.menuDragMouseReleased(BasicMenuItemUI.java:1104)
at javax.swing.JMenuItem.fireMenuDragMouseReleased(JMenuItem.java:578)
at javax.swing.JMenuItem.processMenuDragMouseEvent(JMenuItem.java:475)
at javax.swing.JMenuItem.processMouseEvent(JMenuItem.java:422)
at
javax.swing.MenuSelectionManager.processMouseEvent(MenuSelectionManager.java:283)
at
javax.swing.plaf.basic.BasicPopupMenuUI$MouseGrabber.eventDispatched(BasicPopupMenuUI.java:757)
at
java.awt.Toolkit$SelectiveAWTEventListener.eventDispatched(Toolkit.java:2206)
at
java.awt.Toolkit$ToolkitEventMulticaster.eventDispatched(Toolkit.java:2100)
at
java.awt.Toolkit$ToolkitEventMulticaster.eventDispatched(Toolkit.java:2099)
at
java.awt.Toolkit$ToolkitEventMulticaster.eventDispatched(Toolkit.java:2099)
at java.awt.Toolkit.notifyAWTEventListeners(Toolkit.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:3867)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at
java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at
java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1766)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Caused by: java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:358)
at
java.io.ObjectInputStream$BlockDataInputStream.readInt(ObjectInputStream.java:2724)
at java.io.ObjectInputStream.readInt(ObjectInputStream.java:919)
at javax.swing.ImageIcon.readObject(ImageIcon.java:391)
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:585)
at
java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:919)
at
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1813)
at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1713)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
at
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1912)
at
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1836)
at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1713)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:339)
at java.util.ArrayList.readObject(ArrayList.java:587)
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:585)
at
java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:919)
at
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1813)
at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1713)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
at
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1912)
at
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1836)
at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1713)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:339)
at sun.rmi.server.UnicastRef.unmarshalValue(UnicastRef.java:290)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:139)
... 37 more
--------------------------------------------

Roc

unread,
Oct 20, 2006, 4:09:55 AM10/20/06
to
Dai una controllata al classpath del client se ci sono gli stub e skel
del server.

Jack ha scritto:

Jack

unread,
Oct 20, 2006, 5:20:13 AM10/20/06
to

Roc ha scritto:

> Dai una controllata al classpath del client se ci sono gli stub e skel
> del server.

Dunque ora ci guardo meglio ma credo che il problema sia un altro.
Infatti mi sono scordato di specificare che l'applicazione è P2P
quindi il server e il client in realtà sono due istanze identiche che
utilizzano la stessa interfaccia remota. Quindi in pratica io avvio N
istanze e poi ognuna farà da server e/o client durante l'esecuzione...
Quindi a questo punto il dubbio è perchè quando l'applicazione si
comporta da server funzioni solo se avviata da Eclipse e invece non
vada quando è avviata da console!!

grazie

Roc

unread,
Oct 20, 2006, 5:48:06 AM10/20/06
to
Sarebbe molto utile capire con quali parametri eclipse lancia il
processo java x la tua applicazione. Non ce' modo di visualizzare cio'?
Anke attraverso qualche tool esterno tipo ProcessExplorer x window o il
comando ps -ef x linux


Jack ha scritto:

Jack

unread,
Oct 20, 2006, 6:38:12 AM10/20/06
to
Dunque facendo alcune prove ho notato che il problema è dato dalla
serializzazione delle immagini.

In pratica durante una chiamata remota al server il client dovrebbe
ricevere un oggetto Card che fra i campi ha una ImageIcon. Questa in
pratica viene caricata nel server:

ImageIcon image = new ImageIcon(path);

e poi inviata in risposta alla chiamata remota del client.

Se commento la creazione dell'ImageIcon tutto funziona... ovviamente
sul client poi non vedo l'immagine!

Quello che non capisco è dove sia il problema visto che i path sono
tutti relativi ed essendo applicazioni P2P in realtà le immagini
risiedono nelle stesse directory sia sul client che sul server

Roc

unread,
Oct 20, 2006, 7:02:43 AM10/20/06
to
Mi spiace ma non so aiutarti.
Alla peggio pero puoi far passare l'immangine tramite un byte[] invece
che utilizzare la classe ImageIcon

Jack ha scritto:

0 new messages