# Starten eines RMI-Servers aus einem Plugin heraus



## Dadada (1. Februar 2005)

Hallöchen,

  ich hab da ein kleines/großes Problem. Ich würde gerne einen RMI Server aus einem Plugin heraus starten.
 Das heißt, ich möchte in meinem View gewisse Parameter setzen und dann auf Knopfdruck meinen RMI-Server mit den gesetzten Daten starten.
  Wie ich ein Plugin erstelle ist mir klar, einen einfachen RMI-Server bekomme ich auch hin.
  Aber wie ich selbigen aus einem Plugin heraus starte ist mir ein Rätsel.

 Hab gehofft ich müsste einfach nur ne Instanz davon starten, aber mit der Annahme lag ich leider extrem falsch. Da tut sich dann leider gar nichts.

  Wenn mir jemand helfen könnte wär das super

  thx Dadada


----------



## Thomas Darimont (1. Februar 2005)

Hallo!

Was ist denn genau das Problem? Wie startest du denn die RMI Registry? Per Aufruf des RMIRegistry.exe oder über java.rmi.registry.LocateRegistry.createRegistry(...) ?

Gruß Tom


----------



## Dadada (1. Februar 2005)

Die Registry starte ich über die Rmiregistry.exe, grundlegend startet der RMI Server ja auch wenn ich ihn direkt als Application aus Eclipse heraus starte.

 Was ich jedoch gerne machen würde ist dem Benutzer quasi ein Front-End als Eclipse-Plugin bieten, mit dem der Benutzer  den RMI-Server bestimmte Konfigurationen  mitgeben kann.

 Daher würde ich quasi gerne auf knopfdruck den Server starten und die gesetzen parameter übergeben.

 Ich hab halt keine Ahnung wie ich eine normale Java-Klasse die nur auf Bedarf ausgeführt werden soll in ein Eclipse Plugin einbaue.

 hier mal eben nur pseudocode wie ich mir das vom Prizip gedacht habe, an meinen Code komm ich grade nicht ran da der auf nem anderen Rechner ist.

 myplugin() extends ViewPart
 ...
 ...
 ...
 if button gedrückt
 starte RMI-Server    z.B   server = new  MyServer(Par 1, Par 2, ... )



 Ich bekomme auch keine Fehlermeldung, es passiert halt einfach nichts. Der View ensteht aber der Server wird nicht gestartet.

 Ich hoffe ich konnte mein Problem ein wenig verdeutlichen.

 Gruß


----------



## Thomas Darimont (1. Februar 2005)

Hallo!

Da ich nicht weis wie du genau die RMIRegistry.exe startest kann ich dir nicht wirklich helfen....

Du kannst die RMIRegistry aber auch anders starten:

```
/*
 * Created on 01.02.2005@19:48:55
 *
 * TODO Licence info
 */
package de.tutorials;

import java.io.Serializable;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.Timer;
import java.util.TimerTask;

/**
 * @author Administrator
 *
 * TODO Explain me
 */
public class RMIServer implements Serializable {

    private Registry registry;

    public static void main(String[] args) {
        new RMIServer().start();
    }

    /**
     * 
     */
    private void start() {
        Thread t = new Thread() {
            public void run() {
                while (true) {
                    try {
                        if (registry.list().length > 0) {
                            sleep(100L);
                        } else {
                            break;
                        }
                    } catch (Exception e) {
                        System.out.println(e);
                    }
                }

                System.out.println("Shutdown Server....");
            }
        };

        try {
            registry = LocateRegistry.createRegistry(9845);
            registry.rebind("foo", new RemoteTest());

        } catch (RemoteException e) {
            e.printStackTrace();
        }

        t.start();
        TimerTask task = new TimerTask() {
            public void run() {
                try {
                    RemoteTest r = (RemoteTest) LocateRegistry
                            .getRegistry(9845).lookup("foo");
                    r.foo();

                    registry.unbind("foo");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        };

        Timer timer = new Timer();
        timer.schedule(task, 5000L);
    }

    class RemoteTest implements Remote, Serializable {
        public void foo() throws RemoteException {
            System.out.println("foo");
        }
    }
}
```
Gruß Tom


----------



## Dadada (3. Februar 2005)

Hallo Tom,

   zunächst mal danke für deine Hilfe aber mein Problem ist nicht das Starten der rmiregistry.
   Vielleicht hab ich mich auch einfach nur schlecht ausgedrückt.

   Mir geht es grundlegend um das Problem eine simple Java-Applikation aus einem Plugin heraus zu starten. 
 Ich hab mir zum Testen mal ne einfache Klasse geschrieben die einfach nur einen kleinen Text ausgeben soll. Und ein Objekt dieser Klasse wird halt auf Knopfdruck aufgerufen.
 Wenn ich mein Plugin nun in der Runtime-Workbench ausführe erscheint der Text jedoch in meiner ursprünglichen Workbench und nicht in der neuen. 
 Und wenn ich das ganze als Plugin deploye und dann einbau passiert einfach gar nichts. Das heißt der View ist schon da, nur mein Text wird nicht ausgegeben.

   Hier nen kurzes Beispiel.

   Das ist meine Megasimple Klasse die einfach nur ne Ausgabe machen soll.



> public class hallo {
> 
> public hallo() {
> System.out.println("das ist ein kleiner test");
> ...


 
   Und hier erzeuge ich mir ein objekt von der Klasse.  



> private void makeActions() {
> action1 = new Action() {
> public void run() {
> hall = new hallo();
> ...


 

 Ich würde mal sagen ich hab da irgendwo einfach nur nen gedanklichen Fehler. Und ich denke mal, das es ja irgendwie möglich sein sollte dieses Problem zu lösen.
  Ich bin mit meinem Latein aber so langsam am Ende.

 Hoffe ich konnte mein Problem mit diesem Beispiel noch ein bißchen besser veranschaulichen, falls nicht werde ich nie wieder coden und mich in nen Schrank einsperren.

  Gruß


----------

