# RMI server startet nicht



## Anselmus (15. Apr 2005)

hi folks,

habe folgendes beispiel gemacht:
http://java.sun.com/j2se/1.4.2/docs/guide/rmi/getstart.doc.html

hat auch soweit alles geklappt

habe mein interface

```
package examples.hello;



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

public interface Hello extends Remote {
	String SayHello() throws RemoteException;

}
```


sowie den dazugehörigen server


```
package examples.hello;
	
	import java.rmi.Naming;
	import java.rmi.RemoteException;
	import java.rmi.RMISecurityManager;
	import java.rmi.server.UnicastRemoteObject;
	
	public class HelloImpl extends UnicastRemoteObject implements Hello {
	
	    public HelloImpl() throws RemoteException {
		super();
	    }
	
	    public String SayHello() {
		return "Hello World!";
	    }
	
	    public static void main(String args[]) {
	
		// Create and install a security manager
		if (System.getSecurityManager() == null) {
		    System.setSecurityManager(new RMISecurityManager());
		}
	
		try {
		    HelloImpl obj = new HelloImpl();
	
		    // Bind this object instance to the name "HelloServer"
		    Naming.rebind("//localhost/HelloServer", obj);
	
		    System.out.println("HelloServer bound in registry");
		} catch (Exception e) {
		    System.out.println("HelloImpl err: " + e.getMessage());
		    e.printStackTrace();
		}
	    }
	}
```

rmic hat auch prima funktioniert; hat ein sekelton und ein stub produziert;

die liegen jetzt alle in
~/public_html/examples/hello

/public_html/ ist das rootdirectory des apache (localhost)

rmiregistry hat auch gefunzt und läuft uach

jetzt will ich meinen server (HelloImpl) starten:
java  -Djava.rmi.server.codebase=http://localhost/examples  -Djava.security.policy=/home/sschoeffel/public_html/examples/ examples.hello.HelloImpl

leider geht das nicht und es kommt folgende fehlermeldung:
Exception in thread "main" java.lang.NoClassDefFoundError: examples/hello/HelloImpl

hab schon sämtliche pfade beirmi.server.codebase ausprobiert... will aber nicht laufen...
jemand eine idee?

viele grüße
stephan


----------



## Bleiglanz (15. Apr 2005)

>>jetzt will ich meinen server (HelloImpl) starten: 

bist du sicher dass die codebase stimmt?

sollte es dann nicht hello.HelloImpl heissen, wenn "examples" schon im Pfad enthalten ist....

versuchs mal mit "localhost/" ohne examples


----------



## Anselmus (15. Apr 2005)

hab ich schon versucht. habs mit localhost/ 
localhost/examples
und localhost/examples/hello

probiert

hab auch /home/sschoeffel/public_html/ usw

probiert...


----------



## Bleiglanz (15. Apr 2005)

java
-Djava.rmi.server.codebase=http://localhost/examples 
examples.hello.HelloImpl 

das passt auf keinen fall zusammen (weil die codebase den packagenamen vorwegnimmt)!

gibts die Datei

/home/sschoeffel/public_html/examples/hello/HelloImpl.class

?


----------



## Anselmus (15. Apr 2005)

=)

die datei gibts

habs jetzt mal direkt aus eclipse aus probiert und hab da folgende fehlermeldung bekommen:

HelloImpl err: access denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)
java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)
	at java.security.AccessControlContext.checkPermission(AccessControlContext.java:292)
	at java.security.AccessController.checkPermission(AccessController.java:476)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java:538)
	at java.lang.SecurityManager.checkConnect(SecurityManager.java:1040)
	at java.net.Socket.connect(Socket.java:472)
	at java.net.Socket.connect(Socket.java:428)
	at java.net.Socket.<init>(Socket.java:335)
	at java.net.Socket.<init>(Socket.java:150)
	at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
	at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:144)
	at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:580)
	at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:203)
	at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:189)
	at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:329)
	at sun.rmi.registry.RegistryImpl_Stub.rebind(RegistryImpl_Stub.java:125)
	at java.rmi.Naming.rebind(Naming.java:172)
	at examples.hello.HelloImpl.main(HelloImpl.java:29)

offensichtlich ein problem mit dem apache, aber wo kann ich das einstellen?

*edit* hab jetzt mal probiert im ports.conf des apache noch 
	
	
	
	





```
Listen 1099
```
 einzutragen. aber damit hats auch nciht funktioniert...

konnt ich dann gar nicht mehr auf localhost zugreifen


----------



## Anselmus (15. Apr 2005)

habs jetzt nochmal ganze neu angefangen und die dirs genauso genannt wie im tutorial da hats geklappt...   :wink: 

trotzdem stange  ???:L


----------



## eooc (16. Apr 2005)

Moin Moin ..

also erstmal möchte ich kurz wissen mit welcher Java-Version du das ganze probierst, da es wesentliche Unterschiede zwischnen 1.4 und 1.5 gibt im Bereich RMI. (Beschäftige mich gerade selber damit)

Access denied kommt wahrscheinlich aus folgenden Punkten:

- RMIRegistry evtl nicht im selben Verzeichnis gestartet wie den Klassenaufruf (eher selten der Fall)
- java.policy angepasst / erstellt (sehr wahrscheinlich)


Lösung:
- rmiregistry mit: rmiregistry &  starten im Klassenverzeichnis
- java.policy: Eine Datei mit dem Namen java.policy im $Home-Verzeichnis erstellen
Bei Windows wäre das i.d.R. C:\Dokumente und Einstellungen\<<Username>>
Linux: das $Home des Users

Achtung: Diese Einstellungen der java.policy sind sehr UNSICHER und sollten zum testen genutzt werden

```
grant { 
	// alle Berechtigungen setzen
	permission java.security.AllPermission;
	permission java.net.SocketPermission "localhost", "accept,connect,listen";

};
```



EDIT: Oh ich seh gerade. . Unix / Linux umgebung


----------



## Anselmus (19. Apr 2005)

hi,

wie gesagt, habs jetzt noch mit anderen beispielen probiert und es hat funktioniert, aber ich kann immer noch nicht sagen, owran es gelegen hat...

danke & gruß
stephan


----------

