# RMI URL nicht gefunden



## delphiking1980 (12. Okt 2011)

Hallo,

ich habe in einem anderem Forum (ich hoffe man nimmt meine abtrönigkeit nicht übel) ein Mini Beispiel zu RMI gefunden welches ich auch erfolgreich umsetzen konnte nur jetzt zu meiner Frage da ich ja beim 

```
Naming.lookup(URL)
```
eine URL angeben kann wollte ich mal folgendes probieren :

```
ITimeService service = (ITimeService)registry.lookup("//localhost:1099/timeservice");
```
nur dann bekomme ich eine Exception 

```
java.rmi.NotBoundException: //localhost:1099/timeservice
	at sun.rmi.registry.RegistryImpl.lookup(RegistryImpl.java:106)
	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)
	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 Client.main(Client.java:18)
```


Mein Code ist folgender :

Server Klasse :

```
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import java.util.Date;

/**
 * @author Administrator
 * 
 *         TODO Explain me
 */
public class Server implements ITimeService {

	public static void main(String[] args) {
		new Server().start();
	}

	/**
     * 
     */
	private void start() {
		try {
			// Erstellt eine RMIRegistry local auf der VM
			LocateRegistry.createRegistry(1099);
			ITimeService serviceStub = (ITimeService) UnicastRemoteObject.exportObject(this);
			// Hohlt das Registry Objekt
			Registry registry = LocateRegistry.getRegistry();
			// Bindet den TimeService in die RMIRegistry ein
			registry.rebind("timeservice", serviceStub);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see de.tutorials.service.ITimeService#getCurrentDate()
	 */
	public Date getCurrentDate() throws RemoteException {
		System.out.println("server received call @" + System.currentTimeMillis());
		return new Date();
	}
}
```

Client Klasse :

```
import java.rmi.AccessException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
 
/**
 * @author Administrator
 *
 * TODO Explain me
 */
public class Client {
 
    public static void main(String[] args) {
        try {
            Registry registry = LocateRegistry.getRegistry();
            ITimeService service = (ITimeService)registry.lookup("//localhost:1099/timeservice");
            System.out.println(service.getCurrentDate());
            
        } catch (AccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (RemoteException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NotBoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
```

und der vollständigkeitshalber das Interface :

```
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.Date;

/**
 * @author Administrator
 * 
 *         TODO Explain me
 */
public interface ITimeService extends Remote {
	public Date getCurrentDate() throws RemoteException;
}
```


----------



## Peter W. Marth (12. Okt 2011)

Hallo,

Der Port 1099 ist der Default Port der  RMI-Registry und muss daher nicht beim Lookup angegeben werden.

Server

```
registry.rebind( "/timeservice", serviceStub );
```

Client

```
ITimeService service = ( ITimeService )registry.lookup( "/timeservice" );
```

Läuft die RMI-Registry nicht auf dem Default-Port, gibt man beim bind/rebind *und* beim Lookup auch Host und Port an:

Server

```
registry.rebind( "//localhost:4711/timeservice", serviceStub );
```

Client

```
ITimeService service = ( ITimeService )registry.lookup( "//localhost:4711/timeservice" );
```


----------



## Peter W. Marth (13. Okt 2011)

Hallo,

noch eine Korrektur: beim direkten Lookup in der RMI-Registry wird der Lookup-Name überhaupt nicht als URL interpretiert,
Host und Port werden da ja bereits mit LocateRegistry.getRegistry(String host, int port) bestimmt.

Eine URL kann man aber mit Naming.lookup verwenden:


Server

```
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import java.util.Date;

public class Server extends UnicastRemoteObject implements ITimeService {

    public static void main( String[] args ) throws InterruptedException, RemoteException {
        new Server().start();
    }

    protected Server() throws RemoteException {
        super();
    }

    public Date getCurrentDate() throws RemoteException {
        System.out.println( "server received call @" + System.currentTimeMillis() );
        return new Date();
    }

    /**
     * 
     */
    private void start() {
        try {
            Registry registry = LocateRegistry.createRegistry( 4711 );
            registry.rebind( "timeservice", this );
        } catch( RemoteException e ) {
            e.printStackTrace();
        }

    }
}
```

Client

```
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

public class Client {

    public static void main( String[] args ) {
        try {
            ITimeService server = ( ITimeService )Naming.lookup( "//localhost:4711/timeservice" );
            System.out.println( server.getCurrentDate() );
        } catch( MalformedURLException e ) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch( RemoteException e ) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch( NotBoundException e ) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
```


----------

