ERLEDIGT
NEIN
NEIN
ANTWORTEN
13
13
ZUGRIFFE
13140
13140
EMPFEHLEN
-
09.11.04 19:52 #1
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
Hier mal ein Beispiel wie man mit Java 1.5.0 eine RMI Anwendung schreiben kann ohne den rmic zu verwenden um Stubs zu generieren....
*dazu gibts bis jetzt noch nicht so viele Beispiele )
(Das Ganze funktioniert jedoch nur, wenn die Client als auch die Server Version unter JDK 5.0 kompiliert und betrieben werden....)
Hierzu bauen wir die schon so oft gesehene ZeitDienst Anwendung nach ...
Unser Interface TimeService
Code :1 2 3 4 5 6 7 8
package de.tutorials.rmi; import java.rmi.Remote; import java.rmi.RemoteException; public interface ITimeService extends Remote{ public long getServerTime() throws RemoteException; }
Usere Server Klasse:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
package de.tutorials.rmi.server; import java.rmi.AlreadyBoundException; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.rmi.server.UnicastRemoteObject; import de.tutorials.rmi.ITimeService; public class Server implements ITimeService { public final static int STD_RMI_PORT = 1099; public Server() { } private void start() { try { ITimeService stub = (ITimeService) UnicastRemoteObject .exportObject(this, 0); Registry registry = LocateRegistry.getRegistry("127.0.0.1", STD_RMI_PORT); System.out.println(registry); registry.bind("TIMESERVICE", stub); } catch (RemoteException e) { e.printStackTrace(); } catch (AlreadyBoundException e) { e.printStackTrace(); } } public static void main(String[] args) { new Server().start(); } public long getServerTime() throws RemoteException { return System.currentTimeMillis(); } }
Unser Client:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
package de.tutorials.rmi.client; import java.rmi.NotBoundException; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.util.Date; import de.tutorials.rmi.ITimeService; public class Client { public final static int STD_RMI_PORT = 1099; public static void main(String[] args) { new Client().start(); } private void start() { try { Registry registry = LocateRegistry.getRegistry("127.0.0.1", STD_RMI_PORT); ITimeService timeService = (ITimeService) registry .lookup("TIMESERVICE"); System.out.println(new Date(timeService.getServerTime())); } catch (RemoteException e) { e.printStackTrace(); } catch (NotBoundException e) { e.printStackTrace(); } } }
Um das ganze zum Laufen zu bringen müssen wir mit Java 1.5.0 kompilieren (Eclipse Compiler Einstellungen in den preferences setzen Java -> Compiler-> Compliance and Classfiles auf 1.5.0)
Nachdem wir das ganze Kompiliert haben starten wir zuerst mal die rmiregistry (befindet sich im Verzeichnis %JJAVA_HOME%\bin.
Standardmäßig horscht diese RMIRegistry auf Port 1099.
Danach starten wir den Server mit folgenden Optionen:
bei ...codebase=file:/ .... die URL so setzen, dass das ITimeService Interface gefunden werden kann...Code :1 2 3 4
-Djava.rmi.server.ignoreStubClasses=true -Djava.rmi.server.codebase=file:/E:/eclipse/workspace/tutorials/ Also: java -Djava.rmi.server.ignoreStubClasses=true -Djava.rmi.server.codebase=file:/E:/eclipse/workspace/tutorials/ de.tutorials.rmi.server.Server
Das Property java.rmi.server.ignoreStubClasses benötigen wir um die Generierung von StubsProxys zu erzwingen.
Nachdem wir nun den Server gestartet haben sollten wir folgende Ausgabe sehen:
Wenn wir nun den Client starten erhalten etwas in der Form:Proxy[Registry,RemoteObjectInvocationHandler[UnicastRef [liveRef: [endpoint:[127.0.0.1:1099](remote),objID:[0:0:0, 0]]]]]
Viel Spaß beim herumprobierenTue Nov 09 19:44:29 CET 2004
...inspiriert durch Artikel: http://today.java.net/pub/a/today/20...MI.html?page=2
Edit: hier noch ein klareres Beispiel dazu:
http://www.tutorials.de/forum/java/2...ghlight=Remote
Gruß Tom
Ps.: Zitat eines bekannten Java Gurus:" ...HHHOOOORRRAAAYYYY ... no more RMIC.... ... Long live the (DYNAMIC) PROXIES!"Java rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
09.11.04 22:10 #2
- Registriert seit
- Oct 2004
- Ort
- Hessen
- Beiträge
- 310
Danke für die Info Thomas, ich sehe schon ich muss mich in nächster Zeit mal mit der neuen Java Version auseinander setzen. Hat sich ja einiges getan. War immer etwas aufwendig RMI Anwendung zum laufen zu bekommen.
"There's nothing we have to fear, except Fear itself....."
-
09.11.04 22:16 #3
- Registriert seit
- Jan 2002
- Ort
- Bayern
- Beiträge
- 1.390
Also erklärt mich jetzt nicht für blöd, aber da ich aus der C++ Ecke komme, hab ich mal ne Frage:
Was ist RMI?
Ist das Prinzip mit Remote-COM bzw... DCOM (Distributed COM) zu vergleichen?
Da ich von JAVA eigentlich gar keine Ahnung habe, aber immer noch am überlegen bin, doch mal damit anzufangen, interessiert mich das.
Groß Homerwe would change the world if god gave us the source code...
and remember, science is nothing more than reverse engineering nature...
Current projects:
- LdrawConverter
-
09.11.04 22:33 #4
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
Bei RMI handelt es sich um eine Middlewarekomponente (Vergleichbar mit DCOM , Corba etc.). RMI steht für Remote Method Invocation und bietet RPC Möglichkeiten. RPC steht für Remote Procedure Call -> "Entfernter Prozedur Aufruf". Damit kannst du Methoden an Objekten aufrufen die sich in einer ander VM befinden. Die dazu benötigten Daten werden durch diverse Protokolle (JRMP (Java Remote Method Protocol) oder RMI over IIOP (Internet Inter Orb Protocol) übers Netz gejagd. Auf der Empfängerseite werden dann die Anfragen durch spezielle Komponenten entgegengenommen (Skeletons beim Server [zumindest wars früher so
) und Stubs beim Client). Die für die Methoden notwendigen Objekte (Parameter, Rückgabewerte etc) werden bei bedarf Serialisiert und zum Anfragenden zurückgeschickt.
Das wars mal kurz und knapp...
Weitere Infos gibts unter:
http://www.galileocomputing.de/openb...0007341F01510F
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
09.11.04 23:18 #5
- Registriert seit
- Jan 2002
- Ort
- Bayern
- Beiträge
- 1.390
Also im grundegenommen vergleichbar mit DCOM, danke, das wollte ich wissen.
Gruß Homerwe would change the world if god gave us the source code...
and remember, science is nothing more than reverse engineering nature...
Current projects:
- LdrawConverter
-
12.03.06 15:42 #6
- Registriert seit
- Apr 2005
- Beiträge
- 18
Hallo Thomas!
Ich versuche seit über einer Stunde, dein Beispiel nachzuvollziehen, aber es will einfach nicht klappen!
Zunächst mal mein Server-Interface:
Code :1 2 3 4 5 6 7 8
package server; import java.rmi.Remote; import java.rmi.RemoteException; public interface Server extends Remote { public String getData() throws RemoteException; }
Nun meine Server-Implementation:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
package server; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.rmi.server.UnicastRemoteObject; class ServerImpl implements Server { protected ServerImpl() throws RemoteException { super(); } public String getData() throws RemoteException { return "Teststring"; } private void start() throws Exception { Server stub = (Server) UnicastRemoteObject.exportObject(this, 0); Registry reg = LocateRegistry.getRegistry(1099); System.out.println(reg); reg.bind("rmiTest", stub); } public static void main(String[] args) throws Exception { new ServerImpl().start(); } }
Das ganze starte ich aus Eclipse mit folgenden Argumenten für die JVM:
Das angegebene Verzeichnis ist dabei das Verzeichnis des Eclipse-Projektes, die Klassen liegen im Verzeichnis bin. Es macht aber keinen Unterschied in der Fehlermeldung, wenn ich das Verzeichnis "bin" mit angebe.-Djava.rmi.server.ignoreStubClasses=true -Djava.rmi.server.codebase=file://F:/Entwicklung/Java/workspace/RMITest_Server/
Ich erhalte eine ClassNotFoundException, wenn ich die URL so angebe wie im Tutorial (evtl. ein Fehler darin?), ich musste vor dem Laufwerksbuchstaben ein zusätzliches Slash einfügen.
Nun bekomme ich keine ClassNotFoundException, sondern ich bekomme folgenden Fehler (das ganze taucht bei dem Binden an die Registry auf):
An den Dateisystem-Rechten kann es nicht liegen, der Benutzer, unter dem ich entwickele, hat Vollzugriff auf den entsprechenden Ordner. Mich wundert aber, dass vor dem Laufwerksbuchstaben zwei Backslashs stehen. Hat der Fehler vielleicht irgendwie damit zu tun?Proxy[Registry,RemoteObjectInvocationHandler[UnicastRef [liveRef: [endpoint:[192.168.0.2:1099](remote),objID:[0:0:0, 0]]]]]
Exception in thread "main" java.security.AccessControlException: access denied (java.io.FilePermission \\F\Entwicklung\Java\workspace\RMITest_Server\bin read)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkRead(Unknown Source)
at java.io.File.exists(Unknown Source)
at sun.net.www.protocol.file.Handler.openConnection(Unknown Source)
at sun.net.www.protocol.file.Handler.openConnection(Unknown Source)
at java.net.URL.openConnection(Unknown Source)
at sun.rmi.server.LoaderHandler.addPermissionsForURLs(Unknown Source)
at sun.rmi.server.LoaderHandler.access$300(Unknown Source)
at sun.rmi.server.LoaderHandler$Loader.<init>(Unknown Source)
at sun.rmi.server.LoaderHandler$Loader.<init>(Unknown Source)
at sun.rmi.server.LoaderHandler$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.server.LoaderHandler.lookupLoader(Unknown Source)
at sun.rmi.server.LoaderHandler.loadProxyClass(Unknown Source)
at java.rmi.server.RMIClassLoader$2.loadProxyClass(Unknown Source)
at java.rmi.server.RMIClassLoader.loadProxyClass(Unknown Source)
at sun.rmi.server.MarshalInputStream.resolveProxyClass(Unknown Source)
at java.io.ObjectInputStream.readProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at sun.rmi.server.UnicastRef.unmarshalValue(Unknown Source)
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
at sun.rmi.server.UnicastRef.invoke(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source)
at $Proxy1.bind(Unknown Source)
at server.ServerImpl.start(ServerImpl.java:33)
at server.ServerImpl.main(ServerImpl.java:37)
Oder sieht jemand, was ich falsch gemacht haben könnte?
Vielen Dank im Voraus.
Martin
-
12.03.06 15:51 #7
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo1
Ich glaube da hatte ich mich bei den Pfaden irgendwo vertippt...
-Djava.rmi.server.codebase=file://F:/Entwicklung/Java/workspace/RMITest_Server/
Versuchs mal mit:
file:/f:/Entwicklung/Java/workspace/RMITest_Server/bin
Für ein anderes tutorial schau mal hier:
http://www.tutorials.de/forum/java/2...ghlight=Remote
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
12.03.06 17:48 #8
- Registriert seit
- Apr 2005
- Beiträge
- 18
Genau das hast du doch aber in deinem Tutorial, und so findet er die Klasse nicht.
Zitat von Thomas Darimont
Nun ja, wenn ich die Registry im Programm erzeuge, brauche ich die Codebase nicht. Nun gelingt es mir immerhin, den Server zu starten, doch wenn ich den Client starte, bekomm ich den Fehler, dass die Skeleton-Klasse nicht gefunden wird.
Der neue Code für den Server:
Code :1 2 3 4 5 6
Server stub = (Server) UnicastRemoteObject.exportObject(this, 0); Registry reg = LocateRegistry.createRegistry(1099); System.out.println(reg); Naming.bind("REMOTE_TEST", stub);
Ich verwende Naming.rebind() anstelle von reg.rebind(), weil das Programm sonst nach dem Aufruf terminieren würde und nicht in Wartestellung bleibt.
Der Client:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14
public class Client { public static void main(String[] args) throws Exception { new Client().start(); } private void start() throws Exception { Registry reg = LocateRegistry.getRegistry("127.0.0.1"); Server server = (Server) reg.lookup("REMOTE_TEST"); System.out.println("Nachricht: " + server.getData()); } }
Die Fehlermeldung:
Sie verwundert mich, da ich dachte, dass der Stub und insbesondere der Skeleton automatisch erstellt werden sollten!Exception in thread "main" java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling call header; nested exception is:
java.rmi.UnmarshalException: skeleton class not found but required for client version
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
at sun.rmi.server.UnicastRef.invoke(Unknown Source)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at client.Client.start(Client.java:17)
at client.Client.main(Client.java:12)
Caused by: java.rmi.UnmarshalException: error unmarshalling call header; nested exception is:
java.rmi.UnmarshalException: skeleton class not found but required for client version
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.rmi.UnmarshalException: skeleton class not found but required for client version
... 7 more
-
13.03.06 09:44 #9
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
Skeletons werden ueberhaupt nicht mehr erstellt... weil diese nicht mehr benoetigt werden. -> http://java.sun.com/j2se/1.5.0/docs/...rmi-arch2.htmlSie verwundert mich, da ich dachte, dass der Stub und insbesondere der Skeleton automatisch erstellt werden sollten!
Also bei mir funktioniert das Beispiel.
Ich starte die rmiregistry wie folgt:
Code :1
rmiregistry -J-Djava.rmi.server.codebase=file:/D:/development/workspace/de.tutorials.rmi/bin/
Hab die Beispielprojekte mal angehaengt. Hast du fuer jeden Java prozess auch den Java 5 Launcher benutzt? Hast du mehrere Netzwerkkarten in deinem Rechner?
Aber wie schon gesagt, ich glaube das andere tutorial zu RMI unter Java 5: http://www.tutorials.de/forum/java/2...ghlight=Remote
laesst sich einfacher nachvollziehen.
Gruss TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
13.03.06 14:47 #10
- Registriert seit
- Apr 2005
- Beiträge
- 18
So, es funktioniert jetzt, wenn Client und Server sich in unterschiedlichen Projekten befinden und das Classfile des Server-Interface sich im Classpath des Clients befindet.
Sind beide im gleichen Projekte, wird also ein- und dieselbe Classfile benutzt, kommt oben angesprochener Fehler mit dem fehlenden Skeleton.
Mich würde noch interessieren, warum das so ist, im Prinzip ist das Problem aber gelöst.
Danke, Thomas!
-
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.
-
25.05.10 23:41 #13
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 :1 2 3 4 5 6
@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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
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_20Geändert von Tasm-Devil (25.05.10 um 23:50 Uhr)
C macht es einfach, sich in den Fuß zu schießen; C++ erschwert es, aber wenn man es tut, bläst es einem das ganze Bein weg." —Bjarne Stroustrup .-.-.-.-.-.-.
„Ich habe mir immer gewünscht, dass mein Computer so einfach zu bedienen sein sollte wie mein Telefon. Mein Wunsch wurde wahr. Ich weiß nun nicht mehr, wie mein Telefon funktioniert.“ —Bjarne Stroustrup
-
26.05.10 00:44 #14
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 :1 2 3 4 5
@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.C macht es einfach, sich in den Fuß zu schießen; C++ erschwert es, aber wenn man es tut, bläst es einem das ganze Bein weg." —Bjarne Stroustrup .-.-.-.-.-.-.
„Ich habe mir immer gewünscht, dass mein Computer so einfach zu bedienen sein sollte wie mein Telefon. Mein Wunsch wurde wahr. Ich weiß nun nicht mehr, wie mein Telefon funktioniert.“ —Bjarne Stroustrup
Ähnliche Themen
-
Dynamic Proxies in C++ / Function Wrappers
Von Thomas Darimont im Forum C/C++Antworten: 0Letzter Beitrag: 02.10.08, 00:08 -
java.net.URL dynamic IP Problem
Von mehirc im Forum JavaAntworten: 2Letzter Beitrag: 02.08.08, 19:11 -
Testing: Mocks, Stubs usw.
Von JennyB im Forum JavaAntworten: 8Letzter Beitrag: 11.07.08, 19:22 -
Interessanter IBM Artikel zum Thema Dynamic Programming mit Java
Von Thomas Darimont im Forum Java Technology NewsAntworten: 0Letzter Beitrag: 15.03.08, 16:27 -
Getypte Datenmodelle nur mit Interfaces und Dynamic Proxies
Von Thomas Darimont im Forum .NET Application und Service DesignAntworten: 1Letzter Beitrag: 21.12.06, 14:31






Zitieren
Login





