RMI minimal

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen


Einführung und Grundlagen

  • RMI bedeutet Remote Method Invocation und dient dazu, auf einem Server implementierte Methoden, verbundenen Clients zur Verfügung zu stellen.
  • In älteren Java-Versionen war das Kompilieren von RMI-Programmen etwas umständlicher. Stub und Skeleton mussten jeweils mit eigenen Compilern (rmic und javac) übersetzt werden. Seit Java 5 ist javac in der Lage alles in einem Zug zu übersetzen.

Die Vorgehensweise ist immer die Gleiche:

  • Zuerst Service-Interface definieren (von java.rmi.Remote ableiten).
  • Danach Server und Client implementieren.

Das Service-Interface

import java.rmi.Remote;
import java.rmi.RemoteException;
 
/**
 * Das Service-Interface.
 * Hier definierte Methoden werden im Server implementiert
 * und können von Clients aufgerufen werden.
 * Alle Methoden müssen "throws RemoteException" deklarieren.
 */
public interface Service extends Remote {
 
    /** 
     * Dreht den übergebenen String um 
     */
    public String reverse(String input) throws RemoteException;
}

Die Server-Klasse

import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
 
/**
 * Implementierung des Service auf Serverseite
 */
public class Server extends UnicastRemoteObject implements Service {
 
    protected Server() throws RemoteException {
        super();
    }
 
    /** Dreht den übergebenen String um */
    public String reverse(String input) {
        StringBuilder sb = new StringBuilder(string);
        return sb.reverse().toString();
    }
 
    public static void main(String... args) throws Exception {
        // RMI-Registry starten, Server erzeugen und an Registry binden
        // Standard-Port ist 1099 (Registry.REGISTRY_PORT)
        
        LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
        Registry registry = LocateRegistry.getRegistry(Registry.REGISTRY_PORT);
        registry.rebind("PalindromService", new Server());
        System.out.println("Server läuft...");
    }
}

Der Client

import java.rmi.Naming;
 
/**
 * Client-Klasse zum Aufruf des RMI-Service.
 */
public class Client {
 
    public static void main(String... args) throws Exception {
        Service service = (Service) Naming.lookup("rmi://127.0.0.1/PalindromService");
 
        String palindrom = "Geist ziert Leben, Mut hegt Siege, Beileid trägt belegbare Reue, "
            + "Neid dient nie, nun eint Neid die Neuerer, abgelebt gärt die Liebe, "
            + "Geist geht, umnebelt reizt Sieg.";
 
        String res = service.reverse(palindrom);
        System.out.println(res);
    }
}

Anwendungsbeispiel


Fragen

Das Thema wurde nicht ausreichend behandelt? Du hast Fragen dazu und brauchst weitere Informationen? Lass Dir von uns helfen!

Wir helfen dir gerne!


Dir hat dieser Artikel gefallen? Oder Du hast Fehler entdeckt und möchtest zur Berichtigung beitragen? Prima! Schreibe einen Kommentar!

Du musst angemeldet sein, um einen Kommentar abzugeben.