Kurzanleitung RMI-Beispiel: getTime Seite 1 / 7 Inhaltsverzeichnis RMI – Projekt „getTime“ _____________________________________________ 1 Schritt 1: Interface Klasse definieren _______________________________________ 1 Schritt 2: Implementation Class definieren __________________________________ 2 Schritt 3: RMI Compiler erstellen und starten ________________________________ 3 Schritt 4: Main-Class getTimeServer erstellen _______________________________ 4 Policy-Datei integrieren ________________________________________________________ 5 Schritt 5: Main-Class getTimeClient erstellen ________________________________ 6 Policy-Datei integrieren ________________________________________________________ 7 RMI – Projekt „getTime“ Schritt 1: Interface Klasse definieren Methoden der Interface-Klasse definieren: import java.rmi.Remote; import java.rmi.RemoteException; public interface GetTimeInterface extends Remote { public String getTime() throws RemoteException; } Kurzanleitung RMI-Beispiel: getTime Seite 2 / 7 Schritt 2: Implementation Class definieren Danach muss noch der Constuctor und die Funktion getTime() ausprogrammiert werden: import import import import java.rmi.RemoteException; java.rmi.server.UnicastRemoteObject; java.text.SimpleDateFormat; java.util.Date; public class GetTimeImplementation extends UnicastRemoteObject implements GetTimeInterface { public GetTimeImplementation() throws RemoteException { super(); } public String getTime() throws RemoteException { // Zeit zurückgeben SimpleDateFormat formatter = new SimpleDateFormat("hh:mm:ss"); java.util.Date now = new Date(); return formatter.format(now); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub } } Kurzanleitung RMI-Beispiel: getTime Seite 3 / 7 Schritt 3: RMI Compiler erstellen und starten Neues File im Projekt mit dem Filenamen rmiCompiler.cmd erstellen. SET JAVA_HOME=C:\j2sdk1.4.2_10 SET PATH=%PATH%;C:\j2sdk1.4.2_10\bin rmic -keep GetTimeImplementation Diese cmd Datei direkt im Windows-Explorer im entsprechenden Folder per Doppelklick starten. Wichtig: Sobald etwas im Interface geändert wird (z.B. zusätzliche Methoden), dann muss der RMI Compiler wieder ausgeführt werden. Vor dem Ausführen: Nach dem Ausführen: Kurzanleitung RMI-Beispiel: getTime Seite 4 / 7 Schritt 4: Main-Class getTimeServer erstellen import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; public class GetTimeServer { /** * @param args */ public static void main(String[] args) throws RemoteException { int port = 1099; String objName = "GetTime"; //Vermittlername //Implementation Class integrieren GetTimeImplementation impl = new GetTimeImplementation(); //Die Verbindung zum NameService herstellen Registry registry = LocateRegistry.getRegistry(port); boolean bound = false; for (int i = 0;!bound && i < 2;i++) { try{ //Registrierung der Verbindung mit dem Vermittlername objName registry.rebind(objName,impl); bound = true; System.out.println(objName+"bound to registry port "+port+"."); } catch (RemoteException e){ //Falls er die Verbindung nicht findet die Datei //"C:\j2sdk1.4.2_10\bin\rmiregistry.exe" (NameService) //starten und verbinden System.out.println("Rebinding "+objName+"failed, retrying..."); registry = LocateRegistry.createRegistry(port); System.out.println("Registry started on port " + port + "."); } } System.out.println("HelloServer ready."); } Kurzanleitung RMI-Beispiel: getTime Seite 5 / 7 } Policy-Datei integrieren Falls eine Policy-Datei integriert werden soll, folgende Codezeile vor der LocateRegistryZeile implementieren: if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); } Registry registry = LocateRegistry.getRegistry(port); boolean bound = false; Zusätzlich muss in der Run-Configuration die Policy noch als Argument hinterlegt werden. Kurzanleitung RMI-Beispiel: getTime Seite 6 / 7 Schritt 5: Main-Class getTimeClient erstellen import import import import java.net.MalformedURLException; java.rmi.Naming; java.rmi.NotBoundException; java.rmi.RemoteException; public class getTimeClient { /** * @param args */ public static void main(String[] args) { try { int port = 1099; // Gleicher Port wie beim GetTimeServer benutzt wurde String host = "127.0.0.1"; // Verbindung zum NameServic herstellen - und zwar auf die // Verbindung "GetTime" // Der Der Verbinung ist im File "getTimeServer" definiert worden. GetTimeInterface obj = (GetTimeInterface) Naming.lookup("rmi://" + host + ":" + port + "/" + "GetTime"); // Zeit auslesen / Methode, welche in der Implementation Class //definiert wurde String serverTime = obj.getTime(); // Zeit ausgeben System.out.println("Server Zeit: " + serverTime); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NotBoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } Kurzanleitung RMI-Beispiel: getTime Seite 7 / 7 Policy-Datei integrieren Falls eine Policy-Datei integriert werden soll, folgende Codezeile direkt nach dem try { implementieren: if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); } Zusätzlich muss in der Run-Configuration die Policy noch als Argument hinterlegt werden.