RMI RMI in Eclipse RCP ausführen

Status
Nicht offen für weitere Antworten.

Prengepower

Aktives Mitglied
Hi!

Ich habe einen kleinen Test-Server + Client geschrieben. Der Server soll von einer RCP anwendung heraus in einem Thread gestartet werden. Der Client soll ebenfalls aus der selben Anwendung in einem Thread gestartet werden und sich dann mit dem Server verbinden. Andere "Clients" starten nur den Client in ihrer Anwendung und verbinden sich dann zu "mir"...

Soweit so gut. Das RCP-Programm startet und funktioniert auch gut. Allerdings gibt es ein ganz elementares Problem: ich kann den Server und den Client nicht starten. Ich habe den Client und den Server in einem normalen Projekt ausprobiert und dort lassen sie sich in einem Thread ganz einfach starten. Das ist kein Problem und funktioniert auch super!

Woran liegt es, dass es nicht in RCP klappt... Ist wirklich dringend!!!

Jetzt mal die ganzen "Anhänge":
Server.java
Code:
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.Remote;
import java.rmi.RemoteException;

public class Server implements Runnable{

	@Override
	public void run(){
		try {
			Remote remote = new ManagerImpl();		
			Naming.rebind("multiserver", remote);
			System.out.println("Server gestartet ...");
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
	}
}

Manager.java
Code:
import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Manager extends Remote {
	String getEcho(String s) throws RemoteException;

}

ManagerImpl.java
Code:
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class ManagerImpl extends UnicastRemoteObject implements Manager {
	public ManagerImpl() throws RemoteException {}
	
	public String getEcho(String s) throws RemoteException {
		return s;
	}

}

Client.java
Code:
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

public class Client implements Runnable {

	@Override
	public void run() {		
		String host = "localhost";
		String text = "Hallo mein lieber Server - endlich ist eine Verbindung da!";
		
		try {
			Manager remote = (Manager) Naming.lookup("//"+host+"/multiserver");
			String received = remote.getEcho(text);
			System.out.println(received);
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NotBoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
	}
}

Browser.java (View, aus der beide Sachen über Button gestartet werden)
Code:
...

Button btnHostSein = new Button(composite, SWT.NONE);
				btnHostSein.addSelectionListener(new SelectionAdapter() {
					@Override
					public void widgetSelected(SelectionEvent e) {
						try {
							LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
							Registry registry = LocateRegistry.getRegistry();
							
							server.start();
							server.join();
						
							client.start();
							client.join();
						} catch (InterruptedException e2) {
							// TODO Auto-generated catch block
							e2.printStackTrace();
						} catch (RemoteException e2) {
							// TODO Auto-generated catch block
							e2.printStackTrace();
						}
					}
				});
				btnHostSein.setBounds(10, 54, 68, 23);
				btnHostSein.setText("Hosten");

...

Vielen Dank für EURE Hilfe :):):)
 
T

tuxedo

Gast
ich kann den Server und den Client nicht starten. Ich habe den Client und den Server in einem normalen Projekt ausprobiert und dort lassen sie sich in einem Thread ganz einfach starten. Das ist kein Problem und funktioniert auch super!

Woran liegt es, dass es nicht in RCP klappt... Ist wirklich dringend!!!

Naja, meine Glaskugel zur automatischen Vorhersage von verschwiegenen Exceptions und Problemdetails ist heute nummerweise ganz dringend in der Wartung/Inspektion.

Kannst du über das Problem noch mehr sagen wie nur "geht nicht" ?

- Alex
 

Prengepower

Aktives Mitglied
Naja, meine Glaskugel zur automatischen Vorhersage von verschwiegenen Exceptions und Problemdetails ist heute nummerweise ganz dringend in der Wartung/Inspektion.

Kannst du über das Problem noch mehr sagen wie nur "geht nicht" ?

- Alex

Also ich hab mich jetzt doch gegen RMI entschieden und es mit Sockets gemacht... Das funktioniert jetzt und von daher lass ich es einfach so. Hab leider nicht die Zeit ewig weiter zu probieren und meine Recherchen haben ergeben, dass RMI auf nem Plug-In Project nicht so einfach zum laufen zu bringen ist...
 
T

tuxedo

Gast
Also ich hab mich jetzt doch gegen RMI entschieden und es mit Sockets gemacht... Das funktioniert jetzt und von daher lass ich es einfach so. Hab leider nicht die Zeit ewig weiter zu probieren und meine Recherchen haben ergeben, dass RMI auf nem Plug-In Project nicht so einfach zum laufen zu bringen ist...

Ich sehe keinen Grund warum RMI in einer RCP Anwendung nicht laufen soll. Haben hier mehrere RCP Anwendungen die allesamt mittels RMI kommunizieren. Ohne Fehlerbeschreibung und Exception lässt sich da halt schlecht eine Aussage treffen warums bei dir nicht ging.

- Alex
 

Prengepower

Aktives Mitglied
Ich sehe keinen Grund warum RMI in einer RCP Anwendung nicht laufen soll. Haben hier mehrere RCP Anwendungen die allesamt mittels RMI kommunizieren. Ohne Fehlerbeschreibung und Exception lässt sich da halt schlecht eine Aussage treffen warums bei dir nicht ging.

- Alex

also ich hab jetzt nochmal den fehler rausgezogen - hoffe du kannst mir helfen!

Java:
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
	java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
	java.lang.ClassNotFoundException: de.hwrberlin.jemm.net.Manager
	at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:396)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
	at sun.rmi.transport.Transport$1.run(Transport.java:159)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:619)
	at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
	at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
	at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:359)
	at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
	at java.rmi.Naming.rebind(Naming.java:160)
	at de.hwrberlin.jemm.net.Server.run(Server.java:22)
	at java.lang.Thread.run(Thread.java:619)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
	java.lang.ClassNotFoundException: de.hwrberlin.jemm.net.Manager
	at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
	at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:386)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
	at sun.rmi.transport.Transport$1.run(Transport.java:159)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	... 1 more
Caused by: java.lang.ClassNotFoundException: de.hwrberlin.jemm.net.Manager
	at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:303)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:247)
	at sun.rmi.server.LoaderHandler.loadProxyInterfaces(LoaderHandler.java:711)
	at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:655)
	at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:592)
	at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:628)
	at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:294)
	at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:238)
	at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1531)
	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1493)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
	... 12 more
java.rmi.NotBoundException: multiserver
	at sun.rmi.registry.RegistryImpl.lookup(RegistryImpl.java:106)
	at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
	at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:386)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
	at sun.rmi.transport.Transport$1.run(Transport.java:159)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:619)
	at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
	at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
	at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:359)
	at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
	at java.rmi.Naming.lookup(Naming.java:84)
	at de.hwrberlin.jemm.net.Client.run(Client.java:16)
	at java.lang.Thread.run(Thread.java:619)
 
T

tuxedo

Gast
Liest sich doch recht einfach: Die Klasse de.hwrberlin.jemm.net.Manager wird auf der Server/Client-Sekite, auf der die Exception auftritt nicht gefunden.

Typischerweise hat man bei RPC (nicht RCP) 3 "Projekte":

1) Client
2) Server
3) Shared

Die ersten beiden sind selbstsprechend. Das dritte enthält alle Files die Client und Server gleichermaßen benötigen. Also Interfaces, Transport-Klassen, ...
Und logischerweise sollte 3) im Classpath der ersten beiden sein.

- Alex

P.S. Etwas irritieren tu mich die "notboundexception" ganz am Ende des Stacktraces... Bist du sicher dass das Server-Objekt schon im Server in die Registry gebunden wurde?
 
Zuletzt bearbeitet von einem Moderator:

Prengepower

Aktives Mitglied
Liest sich doch recht einfach: Die Klasse de.hwrberlin.jemm.net.Manager wird auf der Server/Client-Sekite, auf der die Exception auftritt nicht gefunden.

Typischerweise hat man bei RPC (nicht RCP) 3 "Projekte":

1) Client
2) Server
3) Shared

Die ersten beiden sind selbstsprechend. Das dritte enthält alle Files die Client und Server gleichermaßen benötigen. Also Interfaces, Transport-Klassen, ...
Und logischerweise sollte 3) im Classpath der ersten beiden sein.

- Alex

P.S. Etwas irritieren tu mich die "notboundexception" ganz am Ende des Stacktraces... Bist du sicher dass das Server-Objekt schon im Server in die Registry gebunden wurde?

du stellst fragen... hab doch selber keine ahnung davon! aber warum ist es jetzt nicht RCP - ich arbeite doch auf einer Rich Client Platform o_O
 
T

tuxedo

Gast
RPC = Remote Procedure Call
RCP = Rich Client Platform ...

Deshalb das "nicht RCP" ...

Auf Serverseite muss "bind"/"rebind" VOR dem Lookup vom Client ausgeführt werden, ansonsten kriegst du die Meldung dass das gesuchte Objekt in der Registry nicht gebunden ist (notboundexception?).

Check auch den Classpath....

- Alex
 

Prengepower

Aktives Mitglied
Wie schauts aus? Bist du weiter gekommen?

nope... also iwi wirds nix. muss ich vielleicht irgendwann nochmal nen ganz normales programm starten. aber versuch jetzt meine probleme mit dem dateiversand so zu lösen, dass jede zeile einer datei ne nummer bekommt und die dann so "geordnet" werden...

hab keine zeit sonst mehr dazu - leider!

mfg
 
T

tuxedo

Gast
Was haben denn Zeilennummern mit der Exception zu tun?

Du scheinst mit mehr ein RCP wie ein RMI Problem zu haben wenn man sich die Exception genauer betrachtet.
 

Prengepower

Aktives Mitglied
Was haben denn Zeilennummern mit der Exception zu tun?

Du scheinst mit mehr ein RCP wie ein RMI Problem zu haben wenn man sich die Exception genauer betrachtet.

naja aus dem anderen thema meinte ich das jetzt ;) da habe ich ja bei den sockets ansich nur das problem, dass ich nicht genau weiß wie ich meine txt-datei senden soll... und das wollte ich jetzt halt zeilenweise als String machen und dabei die Zeilen halt durchnummerieren ;)

Mfg
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J GlassFish4 in Eclipse cannot deploy Netzwerkprogrammierung 9
J Eclipse: Windows-Dienst auf fremden Host aktivieren Netzwerkprogrammierung 14
0 Alternative zu Eclipse RMI Plugin Netzwerkprogrammierung 2
M eclipse helios neuen tomcat server erstellen Netzwerkprogrammierung 8
M Class-Datei aus Eclipse mit Xampp Netzwerkprogrammierung 4
S eclipse: client/server gleichzeitig starten Netzwerkprogrammierung 8
O Webservice ohne Eclipse laufen lassen Netzwerkprogrammierung 3
R Java-Chat-Applet funktioniert nur in Eclipse Netzwerkprogrammierung 3
C RMI+Eclipse Netzwerkprogrammierung 10
W RMI funktioniert nur wenn ich im selben Eclipse Projekt bin Netzwerkprogrammierung 3
C RMI mit Eclipse compilieren Netzwerkprogrammierung 3
G RMI und ECLIPSE Netzwerkprogrammierung 2
A RMI und Eclipse Netzwerkprogrammierung 19
M Erstelltes Programm über Internet Browser ausführen Netzwerkprogrammierung 26
M HTTP PATCH Request mit Java ausführen Netzwerkprogrammierung 2
G Programm unter anderer IP ausführen Netzwerkprogrammierung 6
P PHP Script per Java ausführen Netzwerkprogrammierung 2
O HTTP Zugriff und Aktionen auf einer Webseite ausführen Netzwerkprogrammierung 9
K Wie mache ich es: Klasse auf Server, Funktionen per Client ausführen? Netzwerkprogrammierung 7
G SMB-File ausführen Netzwerkprogrammierung 15
D Javascript Funktion aus Java Anwendung ausführen Netzwerkprogrammierung 5
T Datei Herunterladen und ausführen Netzwerkprogrammierung 5
L ftp-Befehl ausführen via FtpClient Netzwerkprogrammierung 7
L RMI-Programm ausführen Netzwerkprogrammierung 6
M Datei auf einem Server ausführen Netzwerkprogrammierung 4
S URL ausführen/aufrufen Problem Netzwerkprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben