Java 1.5.0 RMI OHNE Stubs und Skeletons dank Dynamic Proxies ;-)

Is ja krass! Hab schon viele Tutorials gelesen und und ausprobiert. Erst nach dem ich das shier gelesen hab, hats funktioniert
Danke Thomas!
 
Moin,

Zu RMI habe ich gerade mal eine grundsätzliche Frage, die ich mir auch mehrere Stunden Recherche im Netz nicht beantworten konnte.

Kann ich mit etwas anderem als einem Java Applet bzw Javaprogramm als Client auf die Methoden eines Servers zugreifen, der RMI Methoden bereitstellt?

Beispielsweise über Javascript? Ich bin dabei über den Begriff DWR gestolpert, habe aber irgendwie das Gefühl, dies geht daran vorbei.
Ich würde gerne einen Browserclient für meinen RMI Server schreiben, ohne auf ein Java Applet zurückgreifen zu müssen.
 
Hi Thomas,

deine Demo funktioniert bei mir leider nicht. Ich bin schon den halben Tag damit beschäftigt dieses RMI zum laufen zu bringen aber ich schaffe es leider nicht. Ich zweifle langsam an meinen Fähigkeiten. Leider habe ich schon lange kein Java mehr programmiert und darum könnte es auch nur ein vollkommen blöder Fehler sein. Wie auch immer ich kriegs nicht hin.

Deine Demo finde ich bin jetzt ganz nett aber bei mir kommen irgendwie nur Fehler.

Ich arbeite mir Eclipse und dem neuen Java 6.

Ich habe mir für deine Dateien 2 Projekte angelegt: de.tutorium.rmi und de.tutorium.rmi.client

zusätzlich habe ich eine bat.Datei angelegt mit der ich die rmiregistry starte:

Code:
@ECHO OFF

rmiregistry -Djava.rmi.server.ignoreStubClasses=true
                -Djava.rmi.server.codebase=file:/D:/Uni-Kl/Informatik/SS_2010/SEP/Eclipse_workspace/RMI_von_tutorials/
                de.tutorials.rmi.server.Server
Pause

wenn ich die starte macht er was aber ich seh nur schwarz in der Eingabeaufforderung. Aber ich denke, dass ist wohl nicht weiter schlimm.
An deinen Quelcodes habe ich nichts geändert.
Dann möchte ich den Server starten und es kommt folgende Fehlermeldung:

Code:
RegistryImpl_Stub[UnicastRef [liveRef: [endpoint:[127.0.0.1:1099](remote),objID:[0:0:0, 0]]]]
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
	java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
	java.lang.ClassNotFoundException: de.tutorials.rmi.ITimeService
	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.bind(Unknown Source)
	at de.tutorials.rmi.server.Server.start(Server.java:28)
	at de.tutorials.rmi.server.Server.main(Server.java:39)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
	java.lang.ClassNotFoundException: de.tutorials.rmi.ITimeService
	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)
Caused by: java.lang.ClassNotFoundException: de.tutorials.rmi.ITimeService
	at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
	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

was soll ich damit anfangen? Hilfeeee!
Ich hoffe du kannt mir da weiterhelfen. Ist dringend weil meine Gruppe und ich im Softwareentwicklungspraktikum am Montag abgabe haben.

Danke schon mal im Voraus.

P.S. ich arbeite auf Win XP mit Eclipse 1.2.2 (neuste Version: eclipse-java-galileo-SR2-win32.zip)
und der Java jdk1.6.0_20
 
Zuletzt bearbeitet:
ok. Got it.

Vergesst diese Batch-Datei von mir oben. Ich hab nicht richtig gelesen was zu tun war. (Ich Depp)
Und jetzt gehts auch einwandfrei mit folgender Batch Datei:

Code:
@echo off
start C:\Programme\Java\jdk1.6.0_20\bin\rmiregistry
Pause
C:\Programme\Java\jdk1.6.0_20\bin\java -Djava.rmi.server.ignoreStubClasses=true -Djava.rmi.server.codebase=file:/D:/Uni-Kl/Informatik/SS_2010/SEP/Eclipse_workspace/RMI_von_tutorials/  de.tutorials.rmi.server.Server
Pause

Ich wollte an rmiregistry Parameter übergeben, welche für java gedacht waren. Da sieht man, dass ich noch nie von der Kommandozeile aus ein Java-Prog. kompiliert habe. *schäm*

Aber Danke dir für dieses Tutorial. Echt klasse.

Jetzt werd ich noch zusehen, wie ich es mache, dass ich mir die Batch Datei schenken kann indem ich die rmiregistry direkt aus dem Server heraus starten und wie ich Eclipse beibringe Parameter an java zu übergeben. Wird denk ich mal keine große Sache sein.

Trotzdem Danke.
 
Zurück