RMI in Eclipse RCP ausführen

Prengepower

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 :):):)
 
Zurück