From 33529d25f6e31ba6fe43d6d15e61b660625c9057 Mon Sep 17 00:00:00 2001 From: Sebastian Rieger Date: Sun, 11 Nov 2018 23:09:30 +0100 Subject: [PATCH] Changed output of RMI Echo Server from System.err to System.out, added RMI Echo Server that contains creation of a local registry, no need to start rmiregistry in this case --- .../verteiltesysteme/rmi/RMIEchoServer.java | 2 +- .../rmi/RMIEchoServerWithRegistry.java | 64 +++++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 VerteilteSysteme-Examples/src/verteiltesysteme/rmi/RMIEchoServerWithRegistry.java diff --git a/VerteilteSysteme-Examples/src/verteiltesysteme/rmi/RMIEchoServer.java b/VerteilteSysteme-Examples/src/verteiltesysteme/rmi/RMIEchoServer.java index d09ec6f..b2c3b4f 100644 --- a/VerteilteSysteme-Examples/src/verteiltesysteme/rmi/RMIEchoServer.java +++ b/VerteilteSysteme-Examples/src/verteiltesysteme/rmi/RMIEchoServer.java @@ -42,7 +42,7 @@ public class RMIEchoServer implements RMIEchoInterface { Registry registry = LocateRegistry.getRegistry(); registry.bind("RMIEchoInterface", stub); - System.err.println("Server ready"); + System.out.println("Server ready"); } catch (Exception e) { System.err.println("Server exception: " + e.toString()); e.printStackTrace(); diff --git a/VerteilteSysteme-Examples/src/verteiltesysteme/rmi/RMIEchoServerWithRegistry.java b/VerteilteSysteme-Examples/src/verteiltesysteme/rmi/RMIEchoServerWithRegistry.java new file mode 100644 index 0000000..0c35c34 --- /dev/null +++ b/VerteilteSysteme-Examples/src/verteiltesysteme/rmi/RMIEchoServerWithRegistry.java @@ -0,0 +1,64 @@ +package verteiltesysteme.rmi; + +/* damit der Server gestartet werden kann, muss die rmiregistry (Verzeichnisdienst + * für bereitgestellte Funktionen und deren Parameter etc., vgl. Folien, laufen. + * Hierfür kann in Eclipse über "Run --> External Tools" eine neue "External Tool + * Configuration" erstellt werden, die die rmiregistry aufruft: + * + * - New Configuration, "Progam" auswählen, (+ Symbol) + * + * - Im Tab "Main" --> Location z.B. für Standard Java 8 JRE unter Windows: + * C:\Program Files\Java\jre1.8.0_181\bin\rmiregistry.exe + * + * - Im Tab "Environment" --> Variable "CLASSPATH" anlegen und auf das bin + * Verzeichnis des Projects z.B. + * C:\Users\\git\verteilte-systeme-bsc-ai-examples\ + * VerteilteSysteme-Examples\bin" + * zeigen lassen. Danach mittels "Run" rmiregistry starten. + * + * - Run Configuration für die in diesem File gezeigte Klasse RMIEchoServer muss + * im Tab "Arguments" im Feld "VM Arguments:" folgendes eingetragen haben: + * -Djava.rmi.server.codebase=file:${workspace_loc:VerteilteSysteme-Examples/bin/} + * damit die für den RMIEchoServer erfoderlichen Klassen als codebase in RMI + * verfügbar sind + */ + +import java.rmi.RemoteException; +import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; +import java.rmi.server.UnicastRemoteObject; + +public class RMIEchoServerWithRegistry implements RMIEchoInterface { + public RMIEchoServerWithRegistry() { + } + + public static void main(String args[]) { + + try { + RMIEchoServerWithRegistry obj = new RMIEchoServerWithRegistry(); + RMIEchoInterface stub = (RMIEchoInterface) UnicastRemoteObject.exportObject(obj, 0); + + // Bind the remote object's stub in the registry + + // create a local registry on default port 1099 (tcp) + Registry registry = LocateRegistry.createRegistry(1099); + // Use rebind to simply replace existing binding + registry.rebind("RMIEchoInterface", stub); + + System.out.println("Server ready"); + } catch (Exception e) { + System.err.println("Server exception: " + e.toString()); + e.printStackTrace(); + } + } + + @Override + public String toLowerCase(String input) throws RemoteException { + return input.toLowerCase(); + } + + @Override + public String toUpperCase(String input) throws RemoteException { + return input.toUpperCase(); + } +} \ No newline at end of file