Universität Paderborn Prof. Dr. Stefan Böttcher Kapitel 6: Ausgewählte Kapitel der Java-Programmierung Grundlagen der Programmierung 2, SS 2008 1 Universität Paderborn Prof. Dr. Stefan Böttcher Java-Remote Methode Invocation (RMI) RMI: Aufruf von Methoden in entfernt definierten Klassen RMI-Client RMI-Server RMI-Verbindung Registrierung via rmiregistry RMI-Compiler erzeugt aus Klassen Stubs und Skeleton-Klassen Binden der Objekte , dann Aufruf wie bei lokalen Objekten Serialisierung: Objekte werden als Datenstrom übertragen Grundlagen der Programmierung 2, SS 2008 2 RMI-Code (Interface) import java.rmi.*; Universität Paderborn Prof. Dr. Stefan Böttcher Entfernter Server (Typ=interface) public interface RemoteBank extends Remote { public String conc(String s1, String s2) throws RemoteException ; } Grundlagen der Programmierung 2, SS 2008 // interface für Server // was Server bietet 3 RMI-Code (Client) Universität Paderborn Prof. Dr. Stefan Böttcher import java.rmi.*; public class Bank { IP Servicename public static void main(String[] args) { try { // Suche Server mit Name "bankname" RemoteBank bank = // Serverobjekt (RemoteBank) Naming.lookup("rmi://192.168.1.101/bankname"); String ret = bank.conc(args[0], args[1]); // Aufruf an Serverobjekt System.out.println(ret) ; } // Fange und zeige RMI-Exceptions catch (Exception e) { System.out.println(e); } } // main } Grundlagen der Programmierung 2, SS 2008 4 RMI-Code (Server) import java.rmi.*; import java.rmi.server.*; import Bank.*; Universität Paderborn Prof. Dr. Stefan Böttcher // lade das Interface für RemoteBank public class RemoteBankServer extends UnicastRemoteObject implements RemoteBank { public RemoteBankServer() throws RemoteException { super(); } // Implementierung der Remote-Methode conc aus Interface RemoteBank public synchronized String conc (String s1, String s2) throws RemoteException { System.out.println( s1 + " :: " + s2 ) ; return s1+s2 ; } public static void main(String[] args) { try { RemoteBankServer bank = new RemoteBankServer(); // erzeugt Serverobjekt Naming.rebind("bankname", bank); // sein Name ist "bankname" System.out.println("bankname ist bereit."); } catch (Exception e) { System.err.println(e); } } } Grundlagen der Programmierung 2, SS 2008 5 Universität Paderborn Prof. Dr. Stefan Böttcher RMI: Arbeitsweise / Codegenerierung 1. Alle Java-Programme übersetzen: javac *.java 2. Das Server-Programm vorübersetzen mit rmic rmic RemoteBankServer erzeugt Code zum Datentransfer über das Netz 3. Einen Registrierungsprozess für rmi-Server starten Fenster1: rmiregistry 4. Das Server-Programm starten Fenster2: java RemoteBankServer 5. Das Client-Programm starten Fenster3 (evtl. auf einem anderen Rechner): java Bank ab xy Grundlagen der Programmierung 2, SS 2008 6