Hallo,
ich habe noch nicht lange mit Java zu tun - dies vorab Dennoch habe ich mich mal an RMI getraut. Dabei bin ich dem RMI Kapitel aus dem Buch "Java ist auch eine Insel" gefolgt.
Bei Google konnte ich leider keine Infos finden, welche mein Problem lösen...
Aktueller Status:
* Ich habe 3 Dateien. (Adder.java, AdderImpl.java und Server.java).
* rmiregistry.exe ist schon gestartet und wartet...
Das Serverprogramm kompiliert brav - lässt sich allerdings nicht starten...
$ java Server
Exception in thread "main" java.lang.NoClassDefFoundError: Server
Was dieser Fehler bedeutet ist mir schon klar - aber ich sehe den eigentlichen Fehler nicht (Code folgt später).
Starte ich das Programm via Eclipse kommt folgendes:
Und nun der Code der drei Dateien:
Adder.java
AdderImpl.java
Server.java
Für jeden Tipp bin ich äußerst dankbar.
[/code]
ich habe noch nicht lange mit Java zu tun - dies vorab Dennoch habe ich mich mal an RMI getraut. Dabei bin ich dem RMI Kapitel aus dem Buch "Java ist auch eine Insel" gefolgt.
Bei Google konnte ich leider keine Infos finden, welche mein Problem lösen...
Aktueller Status:
* Ich habe 3 Dateien. (Adder.java, AdderImpl.java und Server.java).
* rmiregistry.exe ist schon gestartet und wartet...
Das Serverprogramm kompiliert brav - lässt sich allerdings nicht starten...
$ java Server
Exception in thread "main" java.lang.NoClassDefFoundError: Server
Was dieser Fehler bedeutet ist mir schon klar - aber ich sehe den eigentlichen Fehler nicht (Code folgt später).
Starte ich das Programm via Eclipse kommt folgendes:
Code:
Jan 31, 2006 6:10:01 AM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(1)-192.168.0.148: [192.168.0.148: sun.rmi.transport.DGCImpl[0:0:0, 2]: java.rmi.dgc.Lease dirty(java.rmi.server.ObjID[], long, java.rmi.dgc.Lease)]
Exception in thread "main" java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: Adder
at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:385)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240)
at sun.rmi.transport.Transport$1.run(Transport.java:153)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
at java.lang.Thread.run(Thread.java:595)
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.rebind(Unknown Source)
at Server.main(Server.java:15)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: Adder
at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:375)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240)
at sun.rmi.transport.Transport$1.run(Transport.java:153)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.ClassNotFoundException: Adder
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:242)
at sun.rmi.server.LoaderHandler.loadProxyInterfaces(LoaderHandler.java:707)
at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:651)
at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:588)
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:1494)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1457)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1693)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:339)
... 9 more
Jan 31, 2006 6:10:01 AM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(2)-192.168.0.148: [192.168.0.148: sun.rmi.transport.DGCImpl[0:0:0, 2]: void clean(java.rmi.server.ObjID[], long, java.rmi.dgc.VMID, boolean)]
Und nun der Code der drei Dateien:
Adder.java
Code:
//package com.javatutor.insel.rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Adder extends Remote
{
public int add( int x, int y ) throws RemoteException;
}
AdderImpl.java
Code:
//package com.javatutor.insel.rmi;
import java.rmi.RemoteException;
public class AdderImpl implements Adder {
public int add(int x, int y) throws RemoteException {
// TODO Auto-generated method stub
return x+y;
}
}
Server.java
Code:
//package com.javatutor.insel.rmi;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.RemoteServer;
import java.rmi.server.UnicastRemoteObject;
public class Server
{
public static void main( String[] args ) throws Exception
{
AdderImpl adder = new AdderImpl();
Adder stub = (Adder) UnicastRemoteObject.exportObject( adder, 0 );
RemoteServer.setLog( System.out );
Registry registry = LocateRegistry.getRegistry();
registry.rebind( "Adder", stub );
System.out.println( "Adder angemeldet" );
}
}
Für jeden Tipp bin ich äußerst dankbar.
[/code]