Hallo,
ich habe folgendes Problem bei meinem RMI-Projekt:
Der Server und der Client sind in Eclipse als eigenständige Projekte
angelegt.
Solange sich die beiden Main-Klassen (vom Server und vom Client) - in
ihrem eigenen Projekt(-Ordner) -im selben Package(-Namen) befinden,
funktioniert mein RMI-Projekt.
Wenn ich aber ein Package umbenenne, kommt folgende Fehlermeldung:
Die Fehlermeldung bedeutet doch, dass kein securitymanager vorhanden
ist.
Somit habe ich im Ordner vom Client als auch beim Server die folgende
Datei (client.policy) - direkt auf oberster Ebene im jeweiligen
Projektordner - angelegt:
Um die Datei den SecurityManager zu starten, habe ich dann noch
fogendes ganz am Anfang der Main-Methoden vom Server und vom Client
eingebaut:
Ich habe auch gelesen, dass man diese Datei per VM-Argument übergeben
kann. Dies habe ich aber nicht gemacht, da ich denke, dass dieser
Aufruf korrekt ist? Oder liege ich da falsch?
Auf jedenfall bekomme ich jetzt diese Fehlermeldung:
Aber ich erlaube doch in der Policy-Datei alles. Oder kann der diese
Datei nicht finden (wie kann man das prüfen)? Oder deutet diese
Fehlermeldung auf was anderes hin?
Vielen lieben Dank
Heidi
ich habe folgendes Problem bei meinem RMI-Projekt:
Der Server und der Client sind in Eclipse als eigenständige Projekte
angelegt.
Solange sich die beiden Main-Klassen (vom Server und vom Client) - in
ihrem eigenen Projekt(-Ordner) -im selben Package(-Namen) befinden,
funktioniert mein RMI-Projekt.
Wenn ich aber ein Package umbenenne, kommt folgende Fehlermeldung:
Code:
Client exception: java.rmi.UnmarshalException: error unmarshalling
return; neste
d exception is:
java.lang.ClassNotFoundException: example.hello.RemoteLogin
(no security
manager: RMI class loader disabled)
java.rmi.UnmarshalException: error unmarshalling return; nested
exception is:
java.lang.ClassNotFoundException: example.hello.RemoteLogin
(no security
manager: RMI class loader disabled)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at example.hello1.Client.main(Client.java:21)
Caused by: java.lang.ClassNotFoundException: example.hello.RemoteLogin
(no secur
ity manager: RMI class loader disabled)
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)
... 2 more
Die Fehlermeldung bedeutet doch, dass kein securitymanager vorhanden
ist.
Somit habe ich im Ordner vom Client als auch beim Server die folgende
Datei (client.policy) - direkt auf oberster Ebene im jeweiligen
Projektordner - angelegt:
Code:
grant {
permission java.net.SocketPermission "192.168.0.2:1099", "connect,
accept, resolve";
permission java.security.AllPermission "", "";
};
Um die Datei den SecurityManager zu starten, habe ich dann noch
fogendes ganz am Anfang der Main-Methoden vom Server und vom Client
eingebaut:
Code:
System.setProperty("java.security.policy", "client.policy");
if (System.getSecurityManager() == null)
System.setSecurityManager(new RMISecurityManager());
Ich habe auch gelesen, dass man diese Datei per VM-Argument übergeben
kann. Dies habe ich aber nicht gemacht, da ich denke, dass dieser
Aufruf korrekt ist? Oder liege ich da falsch?
Auf jedenfall bekomme ich jetzt diese Fehlermeldung:
Code:
Client exception: java.security.AccessControlException: access denied
(java.net.
SocketPermission 192.168.0.2:1099 connect,resolve)
java.security.AccessControlException: access denied
(java.net.SocketPermission 1
92.168.0.2:1099 connect,resolve)
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.checkConnect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at
sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown S
ource)
at
sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown S
ource)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown
Source)
at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown
Source)
at sun.rmi.server.UnicastRef.newCall(Unknown Source)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at example.hello1.Client.main(Client.java:26)
Aber ich erlaube doch in der Policy-Datei alles. Oder kann der diese
Datei nicht finden (wie kann man das prüfen)? Oder deutet diese
Fehlermeldung auf was anderes hin?
Vielen lieben Dank
Heidi