# NotBoundException



## Vril (19. Jun 2009)

Hallo,

ich habe versucht ein kleines RMI Beispiel zu machen, "Adder", sprich Client übergibt dem Server zwei Zahlen und der liefert daraufhin die Summe der beiden Zahlen zurück. Nur bekomme ich beim starten der Server.class folgende Fehlermeldung:

Exception in thread "main" java.rmi.NotBoundException: Adder
    at sun.rmi.registry.RegistryImpl.lookup(Unknown Source)
    at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
    at sun.rmi.server.UnicastServerRef.oldDispatch(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.run0(Unknown Source)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    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.lookup(Unknown Source)
    at test.rmi.Client.main(Client.java:13)

Process completed.


Meine Klassen sehen so aus:

```
//Server:
package test.rmi;

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.RemoteServer;
import java.rmi.server.UnicastRemoteObject;
import java.rmi.RemoteException;
import java.rmi.NotBoundException;

public class Server {
	
	public static void main(String[] args) throws RemoteException, NotBoundException{
		try{
		
			LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
		} catch (RemoteException e){System.err.println(e);
		}
		
		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");
	}
}

//Client
package test.rmi;

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.RemoteException;
import java.rmi.NotBoundException;

public class Client{
	
	public static void main(String[] args) throws RemoteException, NotBoundException{
		
		Registry registry = LocateRegistry.getRegistry();
		Adder adder = (Adder) registry.lookup("Adder");
		System.out.println(adder.add(47,11));
	}
}

//AdderImpl
package test.rmi;

public class AdderImpl implements Adder{
	
	public int add(int x, int y){
		return x+y;
	}
}


//Adder
package test.rmi;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Adder extends Remote{
	
	int add(int x, int y) throws RemoteException;
}
```

Hat zufällig jemand eine Idee was ich da falsche mache?
"start rmiregistry" habe ich im Verzeichnis wo die einzelnen *.class liegen gemacht.


----------



## mvitz (19. Jun 2009)

Vril hat gesagt.:


> Hallo,
> Hat zufällig jemand eine Idee was ich da falsche mache?
> "start rmiregistry" habe ich im Verzeichnis wo die einzelnen *.class liegen gemacht.



Nicht da wo die *.class liegen, sondern am Start der Packagestruktur.


----------



## Vril (19. Jun 2009)

Danke für den Tip, aber hat leider nichts geholfen! Gleiche Fehlermeldung wie zuvor!


----------



## tuxedo (19. Jun 2009)

Die add-Methode deiner AdderImpl Klasse trägt eine andere Signatur als die im Adder Interface. Die müssen jedoch 100,0% übereinstimmen sonst sind sie eben nicht mit der Registry verbunden (genau das sagt ja die Fehlermeldung).

- Alex


----------

