backdraft Geschrieben 13. August 2002 Teilen Geschrieben 13. August 2002 Hi! Wer kennt sich hier ein bisschen mit RMI aus? Ich möchte gern die Kommunikation zwischen einem Applet und einem Server in unserem Netzwerk mit RMI realisieren. Ich habe bis jetzt aber nur sehr kurze und komplexe Besipiele gefunden. Wer kann mir sagen, wo es mehr Inforamtionen dazu gibt? Internet, gutes Buch, etc. Gleich mal ne Frage: Muss ich ein Applet signieren, wenn es mit dem Server, von dem es geladen wurde, per RMI kommuniziert? MfG Jonas Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 13. August 2002 Teilen Geschrieben 13. August 2002 Original geschrieben von backdraft Wer kennt sich hier ein bisschen mit RMI aus? Ich möchte gern die Kommunikation zwischen einem Applet und einem Server in unserem Netzwerk mit RMI realisieren. Ich habe bis jetzt aber nur sehr kurze und komplexe Besipiele gefunden. Wer kann mir sagen, wo es mehr Inforamtionen dazu gibt? Internet, gutes Buch, etc. Wenn du konkrete Fragen hast, kann ich gerne helfen. Allerdings solltest du erst einmal ein Beispiel selber nachvollziehen, da das Thema nicht gerade einfach ist. Wenn auf der Server Seite ein Servlet laufen soll, kann ich das Buch "Java Servlet Programming" von Oreilly empfehlen. (3-89721-282-X) 62 Seiten lang wird da nur die Kommunikation zwischen Servlets und Applets beschrieben. Allerdings nicht nur RMI, sondern auch Socket bzw. reine HTTP Kommunikation. Außerdem werden die 3 Möglichkeiten ausführlich miteinander verglichen. Original geschrieben von backdraft Gleich mal ne Frage: Muss ich ein Applet signieren, wenn es mit dem Server, von dem es geladen wurde, per RMI kommuniziert? Solange du nicht auf gesperrte Clientresourcen zugreifen willst, nicht. Bin mir bei dem Punkt aber nicht 100%ig sicher. Gruß Jaraz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
backdraft Geschrieben 13. August 2002 Autor Teilen Geschrieben 13. August 2002 Hi! Ich habe jetzt mal ein Beispielprogramm von Sun gemacht. Beim Kompilieren gibt's aber den Fehler 'cannot resolve symbol', sobald man im Client das Interface des Server- Objekts benutzt. Die Dateien liegen alle in einem Ordner. Finden müsste er sie also. Woran kann das liegen? MfG Jonas Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
backdraft Geschrieben 13. August 2002 Autor Teilen Geschrieben 13. August 2002 Kennt keiner ein einfaches, deutsches Tutorial über RMI? MfG backdraft Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 13. August 2002 Teilen Geschrieben 13. August 2002 Hallo, ich kann dir wohl mit nem einfachen Beispiel dienen. Allerdings handelt es sich dabei um 2 Applikation die miteinander kommunizieren. Bei Applets kommen dann noch Punkte wie codebase, Webserver usw. hinzu. Wenn dir mein Bespiel reicht, kann ich es mal posten oder dir zuschicken. Ist aber im Moment nicht dokumentiert, falls du ICQ hast, kann ich dir aber helfen. Gruß Jaraz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
backdraft Geschrieben 14. August 2002 Autor Teilen Geschrieben 14. August 2002 Hi! Ich habe jetzt nen Server und ein Client. Ich kriege sie aber nicht zum laufen. Beim Aufruf: java -Djava.rmi.server.codebase=file:/d:\server\apache\htdocs\tutorial\hello\ -Djava.security.policy=e:\java\rmi.policy HelloImpl Sagt er immer, dass er die Klasse HelloImpl nicht findet. Warum findet er die nicht? MfG backdraft Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 14. August 2002 Teilen Geschrieben 14. August 2002 Original geschrieben von backdraft java -Djava.rmi.server.codebase=file:/d:\server\apache\htdocs\tutorial\hello\ -Djava.security.policy=e:\java\rmi.policy HelloImpl Das Zeichen \ solltest du immer durch / ersetzen, auch unter Windows. Ich weiss aber nicht ob es daran liegt. Gruß Jaraz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 14. August 2002 Teilen Geschrieben 14. August 2002 So, ich habe mein Beispiel mal nen bisschen dokumentiert. Vielleicht hilft es dir ja. Es handelt sich um nen Server und nen Client mit Callback- Funktionalität, d.h. der Client kann Methoden auf dem Server aufrufen und der Server kann ebenfalls Methoden auf dem Client aufrufen. Gruß Jaraz /* * Datei PzeServer.java * Server Main Programm: * -Startet RMI Registry * -Erzeugt ein Server Objekt und registriert es bei der RMI Registry */ import java.rmi.*; import java.rmi.registry.*; import java.net.MalformedURLException; public class PzeServer { private static Server server; public static void main(String [] av) { System.out.println("start sequenz of the PZE Server"); try { System.setSecurityManager(new RMISecurityManager()); server = new Server(); LocateRegistry.createRegistry(1099); Naming.rebind("rmi://localhost:1099/Server",server); System.out.println("\nPZE Server ready!"); } catch (Exception e) { e.printStackTrace(); System.out.println("\nPZE Server failed!"); } } } [/php] [php] /* * Datei PzeClient.java * Client Main Programm: * -Erzeugt ein Client Objekt und registriert es beim Server */ import java.rmi.*; class PzeClient { private static Client client; static public void main( String args[] ) { System.out.println("start sequenz of the PZE Client"); try { System.setSecurityManager(new RMISecurityManager()); client = new Client(); client.getServer().registerClient(client); System.out.println("\nPZE Client ready!"); } catch (Exception e) { e.printStackTrace(); System.out.println("\nPZE Client failed!"); } } } /* * Datei ServerInterface.java * Das ServerInterface definiert die Methoden, die der Client auf dem * Server aufruft. */ import java.rmi.*; interface ServerInterface extends Remote { // Beispiel, empfangen eines String Objects String getServerString() throws RemoteException; // Diese Methode registriert den Client beim Server void registerClient(ClientInterface cl) throws RemoteException; } [/php] [php] /* * Datei Server.java * Die Klasse Server implementiert die Methoden aus dem * ServerInterface */ import java.rmi.*; import java.rmi.server.*; class Server extends UnicastRemoteObject implements ServerInterface { public Server () throws RemoteException, Exception { super(); } public String getServerString() throws RemoteException { return "Hurra, der Aufruf von Client zum Server hat geklappt..."; } public void registerClient(ClientInterface clientInterface) throws RemoteException { // Hier wird vom Server eine Methode auf dem Client aufgerufen System.out.println(clientInterface.getClientString()); } } /* * Datei ClientInterface.java * Das ClientInterface definiert die Methoden, die der Server auf dem * Client aufruft. */ import java.rmi.*; interface ClientInterface extends Remote { // Beispiel, empfangen eines String Objects String getClientString() throws RemoteException; } [/php] [php] /* * Datei Client.java * Die Klasse Client implementiert die Methoden aus dem * ClientInterface und holt sich ServerInterface Object * aus der RMIRegistry */ import java.rmi.*; import java.rmi.server.*; class Client extends UnicastRemoteObject implements ClientInterface{ private ServerInterface serverInterface; public Client () throws RemoteException, Exception { super(); try { serverInterface = (ServerInterface)Naming.lookup("rmi://localhost:1099/Server"); // Hier wird vom Client eine Methode auf dem Server aufgerufen System.out.println(serverInterface.getServerString()); } catch (Exception ex) { ex.printStackTrace(); } } public String getClientString() throws RemoteException { return "Hurra, der Aufruf von Server zum Client hat geklappt..."; } public ServerInterface getServer(){ return serverInterface; } } Datei java.policy ----[snipp]---------------------------------------- grant { permission java.net.SocketPermission "*:1024-65535", "connect,accept,resolve"; permission java.security.AllPermission "",""; }; ----[/snipp]--------------------------------------- [/php] Ablauf: 1.) Alle Dateien in einem Verzeichnis erstellen 2.) Dos Box öffnen und in das Verzeichnis gehen 3.) javac *.java //eingeben 4.) rmic Server //eingeben 5.) rmic Client //eingeben 6.) java -Djava.security.policy=java.policy PzeServer //eingeben 7.) Eine 2.te Dos Box öffnen und in das Verzeichnis gehen 8.) java -Djava.security.policy=java.policy PzeClient //eingeben Viel Spass!!! Gruß Jaraz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
backdraft Geschrieben 14. August 2002 Autor Teilen Geschrieben 14. August 2002 Cool! Vielen, vielen Dank schon mal! Wenn du mir jetzt noch sagen kannst, wann in einem Applet eine java.lang.NullPointerException: name ausgelößt wird, ist alles wunderbar! Ich hab den Server jetzt am laufen und er meldet das Objekt auch in der rmiregistry an. Nur das Applet macht noch Probleme (s.o.). MfG backdraft Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
backdraft Geschrieben 14. August 2002 Autor Teilen Geschrieben 14. August 2002 Das ist der Sourcecode vom Applet: package tutorial.hello; import java.applet.Applet; import java.awt.Graphics; import java.rmi.Naming; import java.rmi.RemoteException; public class HelloApplet extends Applet { String message = "blank"; Hello obj = null; public void init() { try { obj = (Hello)Naming.lookup("//" + getCodeBase().getHost() + "/HelloServer"); message = obj.sayHello(); } catch (Exception e) { System.out.println("HelloApplet exception: " + e.getMessage()); e.printStackTrace(); } } public void paint(Graphics g) { g.drawString(message, 25, 50); } }[/PHP] Wo steckt der Fehler? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
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.