# Servlet-RMI Kommunikation



## ne0n (13. Apr 2007)

Hallo,

ich habe ein Problemchem mit dem Servlet, das mit einem RMI-Server kommunizieren muss. Das problem trifft schon beim compilieren auf. In einem Ordner liegen alle JAVA-Klassen und die Bibliotheken. Nun wenn ich die kompilieren möchte, mit 
	
	
	
	





```
rmic -classpath ..\class -d ..\class test.MyServlet
```
, (nur ein Ausschnitt... Alle anderen Klassen werden genauso korrekt kompiliert) bekomme ich die folgende Fehlermeldunug:  Class javax.servlet.http.HttpServlet not found in class test.MyServlet. Wobei ich die Pfade zu allen Libs richtig gesetzt habe.
Und die Servlet-api.jar ist natürlich auch vorhanden.

Hoffe jemand könnte mir dabei helfen.
Danke!


ne0n


----------



## L-ectron-X (13. Apr 2007)

Gleich vorne weg: Mit welcher Java-Version programmierst du?
Dann gehen wir gleich ein paar Irrtümern und Fehlerquellen aus dem Weg.


----------



## ne0n (13. Apr 2007)

Ich programmiere mit jdk1.6.0 unter Eclipse. Da erstelle ich ein Tomcat-Project. (Weil ich kein Plugin für RMI für eclipse habe, kompiliere ich den Code per Hand).


----------



## L-ectron-X (13. Apr 2007)

OK, dann brauchst du den rmic gar nicht mehr anzufassen. Seit Java 1.5 werden die Stub- und Skeleton-Klassen automatisch zur Laufzeit aufgebaut. Du kompilerst einfach nur mit javac und fertig.


----------



## ne0n (13. Apr 2007)

Danke für die schnelle Antwort.

Wenn ich das ganze ohne rmic mache, dann werden bei mir keine Stub-dateien erzeugt. Den Server kann ich dann starten, aber wenn Servlet sich mit dem Server zu verbinden versucht, bekomme ich den Fehler von Tomcat dass die Stub-dateien nicht gefunden wurden und es läuft nicht weiter.
Kompiliere ich mit 
	
	
	
	





```
javac -classpath ..;.;..\class;intdt.jar;servlet-api.jar -d ..\class -Xlint:unchecked *.java
```


----------



## L-ectron-X (13. Apr 2007)

Läuft der Client unterhalb von Java 1.5? Wie gesagt, ab Java 1.5 werden die Stellvertreter-Objekte zur Laufzeit aufgebaut. Deshalb wirst du auch keine entsprechenden Dateien sehen.
Mehr dazu kannst du auch hier nachschlagen: http://www.galileocomputing.de/openbook/javainsel6/javainsel_18_003.htm


----------



## ne0n (13. Apr 2007)

OK. Danke, ich schaue mal nach und probiere es weiter. Ich poste dann mal später ob es geklappt hat.

mfg
ne0n


----------



## ne0n (20. Apr 2007)

Hallo, bei mir klappt es immernoch nicht.
Vielleicht mache ich was komplett falsch, und bevor wir versuchen irgendwelche Probleme zu lösen versuche ich zu beschreiben was ich im Endeffekt haben möchte.

Also jetzt habe ich einen Applet und einen RMI-Server. Die kommunizieren über RMI. Klappt hervorragend. Ich starte den Server, der Wartet bis ich den Applet starte. Sobald ich das tue läuft alles.

Nun zu dem was ich haben möchte. Man schickt eine Anfrage an Servlet welches ein Interface Renderer mit Methode  notifyCompletion(Response resp) implementiert. 

```
public interface Renderer extends Remote{
    /** 
	method to be notified of requests completion
    **/
    public void notifyCompletion(Response resp) throws RemoteException;
}
```


```
public class MyServlet extends HttpServlet implements Renderer...
```
Servlet nimmt diese an, liest die nötigen Parameter aus und dann verbindet er sich mit dem RMI-Server und schickt an den die Daten. Der RMI-Server macht seine Arbeit (holt die Daten aus einem USB-Token) und dann gibt die Daten an Servlet zurück.

```
renderer.notifyCompletion(resp);
```

Ist das realisierbar? Kann das Servlet solange warten bis RMI-Server die Daten an ihn sendet?

Hoffentlich habe ich alles verständlich dargestellt und man versteht was ich da geschrieben habe.


mfg


----------



## L-ectron-X (20. Apr 2007)

Kann mir schon vorstellen ,dass es funktionieren kann. Sicher bin ich mir da aber nicht.
Im Prinzip ist ja ein Remote-Methodenaufruf unter RMI so, als würdest du die Methode lokal aufrufen. Von daher, glaube ich schon, dass es funktioniert.


----------

