[Java] RMI in Eclipse RCP ausführen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von die_kackwurst, 25. November 2009 .

  1. 25. November 2009
    RMI in Eclipse RCP ausführen

    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
     
  2. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.