Sia Geschrieben 7. November 2002 Geschrieben 7. November 2002 Oh man, jetzt wirds echt kompliziert. Eigentlich will nur mein Client nicht starten, sonst ist alles in Ordnung. Ich beschrieb mal, was ich gemacht habe: (unter W2K) Mein Remote-Interface *RemoteServer* package rmitest; import java.rmi.*; public interface RemoteServer extends Remote { // Definition der Methoden, die dem Client zur Verfügung gestellt werden sollen public int getTest1() throws RemoteException; public int getTest2(int newB) throws RemoteException; public void setTest1(int newA) throws RemoteException; } [/PHP] Meine Implementation davon: [PHP] package rmitest; import java.rmi.*; import java.rmi.server.*; import java.net.*; import java.rmi.activation.*; public class Server extends Activatable implements RemoteServer { //Klassen-Variable int a = 0; int b = 0; //Constructor /*public Server() throws RemoteException { super(); }*/ public Server(ActivationID id, MarshalledObject data) throws RemoteException { super(id, 0); } //Implementation der Methoden, die dem Client zur Verfügung gestellt werden sollen public int getTest1() { print(getClientName() + ": getTest1 - return a = " + a); return a; } public int getTest2(int newB) { b = newB; print(getClientName() + ": getTest2(" + newB + ") - return 6/b = " + 6/b); return 6/b; } public void setTest1(int newA) { print(getClientName() + ": setTest1(" + newA + ")"); a = newA; } private void print(String toPrint) { System.out.println(toPrint); } //Klassen-interne Methoden private String getClientName() { String clientName = "Unknown Client-IP"; try { clientName = java.rmi.server.RemoteServer.getClientHost(); clientName = InetAddress.getByName(clientName).getHostName(); } catch(java.rmi.server.ServerNotActiveException se) { System.err.println(se); } catch(java.net.UnknownHostException se) { System.err.println(se); } return clientName; } } Die Setup-Klasse: package rmitest; import java.rmi.*; import java.rmi.activation.*; import java.util.Properties; public class Setup { public static void main(String[] args) throws Exception { System.setSecurityManager(new RMISecurityManager()); Properties props = new Properties(); props.put("java.security.policy", "rmitest/java.policy"); ActivationGroupDesc.CommandEnvironment ace = null; ActivationGroupDesc testGroup = new ActivationGroupDesc(props, ace); ActivationGroupID agi = ActivationGroup.getSystem().registerGroup(testGroup); String location = "file:./"; MarshalledObject data = null; ActivationDesc desc = new ActivationDesc (agi, "rmitest.Server", location, data, true); RemoteServer mri = (RemoteServer)Activatable.register(desc); System.out.println("Got the stub for the Server"); Naming.rebind("Test", mri); System.out.println("Exported Server"); System.exit(0); } } [/PHP] Und der Client: [PHP] package rmitest; import java.rmi.*; public class Client { private static RemoteServer server; //Implementation der Methoden public static int getTest1() { int a = 0; try { a = server.getTest1(); } catch(Exception ex) { System.err.println(ex); } return a; } public static int getTest2(int newB) { int b = 0; try { b = server.getTest2(newB); } catch(Exception ex) { System.err.println(ex); } return b; } public static void setTest1(int newA) { try { server.setTest1(newA); } catch(Exception ex) { System.err.println(ex); } } private static void testMethode() { try { int a = 4; //Anfragen an Server setTest1(a); System.out.println("1)getTest1(): " + getTest1()); System.out.println("1)getTest2(2): " + getTest2(2)); } catch( Exception e ) { System.err.println( "Exception: " + e ); } } //Verbindung zum Server erstellen public static void main(String[] args) { //Security Manager erzeugen und setzen if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); } //Verbindung über Registry zum Server herstellen try { server = (RemoteServer)Naming.lookup("//134.102.95.10/Test"); } catch(Exception ex) { System.err.println(ex); } testMethode(); } } Ein java.policy-file hab ich auch: grant { permission java.lang.RuntimePermission "setFactory"; permission java.net.SocketPermission "127.0.0.1:*", "accept, connect, listen, resolve"; permission java.net.SocketPermission "134.102.95.10:*", "accept, connect, listen, resolve"; permission java.net.SocketPermission "134.102.95.17:*", "accept, connect, listen, resolve"; permission java.net.SocketPermission "*.biba.uni-bremen.de:*", "accept, connect, listen, resolve"; }; [/PHP] Und rmid braucht ja auch eins: [PHP] grant { permission com.sun.rmi.rmid.ExecPermission "d:\\JavaSoft\\jdk1.3.1_01\\bin"; permission com.sun.rmi.rmid.ExecOptionPermission "c:\\Dokumente und Einstellungen\\sia\\jbprojects\\rmitest\\classes"; }; Anmerkung: Als ich das Activatable noch nicht eingebaut hatte, da lief alles fehlerfrei. - Jetzt starte ich die rmiregistry. Sie läuft. - Ich starte rmid: start rmid -J-Djava.security.policy=rmitest\rmid.policy ...Es läuft - Ich starte die Setup-Klasse: java -Djava.rmi.server.codebase=file:./ -Djava.security.policy=file:rmitest\java.policy rmitest.Setup Es kommt eine Ausgabe: Got the stub for the Server Exported Server Soweit korrekt, das soll ja auch ausgegeben werden, wenn keine Fehler ausgeworfen werden. Danach sieht man aber nicht, ob der Server noch läuft. Es erscheint einfach wieder die DOS- Eingabeaufforderung. *blink* - Jetzt versuche ich den Client zu starten: java -Djava.rmi.server.codebase=file:./ -Djava.security.policy=file:rmitest\java.policy rmitest.Client Fast wie beim Server, ist noch alles lokal. Da passiert es: Ich bekomme eine saftige Fehlermeldung! java.rmi.activation.ActivateFailedException: failed to activate object; nested exception is: java.security.AccessControlException: access denied (com.sun.rmi.rmid.ExecOptionPermission -Djava.security.policy=file:rmitest\java.policy ) java.rmi.activation.ActivateFailedException: failed to activate object; nested exception is: java.security.AccessControlException: access denied (com.sun.rmi.rmid.ExecOptionPermission -Djava.security.policy=file:rmitest\java.policy ) 1)getTest1(): 0 java.rmi.activation.ActivateFailedException: failed to activate object; nested exception is: java.security.AccessControlException: access denied (com.sun.rmi.rmid.ExecOptionPermission -Djava.security.policy=file:rmitest\java.policy ) 1)getTest2(2): 0 Liegt das an meinem java.policy- oder rmid.policy-file? Das wär für mich die nahliegenste Erklärung, aber ich weiß nicht, was ich da ändern muss. Falls sich jemand durch das ganze hier durchfindet und mir weiterhelfen kann, hat er bei unheimlich was gut :-) Schon mal den allerherzlichsten Dank an diesen lieben Menschen!!! Eine (mal wieder) ratlose Sia Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.