RMI minimal: Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Keine Bearbeitungszusammenfassung
KKeine Bearbeitungszusammenfassung
 
(4 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:Java]]
[[Kategorie:Java]]
[[Kategorie:Tutorials (Java)]]
[[Kategorie:Tutorials (Java)]]
[[Fragen stellen]]


=Einführung und Grundlagen=
=Einführung und Grundlagen=


* RMI bedeutet '''Remote Method Invocation''' und dient dazu, auf einem Server implementierte Methoden Clients zur Verfügung zu stellen.
* RMI bedeutet '''Remote Method Invocation''' und dient dazu, auf einem [[Server]] implementierte [[Methode| Methoden,]] verbundenen [[Client|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.
* 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 {{JAPI|java.rmi.Remote}} ableiten).
* Zuerst Service-Interface definieren (von {{JAPI|java.rmi.Remote}} ableiten).
* Danach Server und Client implementieren.
* Danach Server und Client implementieren.


=Das Service-Interface=
=Das Service-Interface=
<code=java>
<syntaxhighlight lang="java">
import java.rmi.Remote;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.RemoteException;
Zeile 28: Zeile 29:
     public String reverse(String input) throws RemoteException;
     public String reverse(String input) throws RemoteException;
}
}
</code=java>
</syntaxhighlight>


=Die Server-Klasse=
=Die Server-Klasse=
<code=java>
<syntaxhighlight lang="java">
import java.rmi.RemoteException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.LocateRegistry;
Zeile 62: Zeile 63:
     }
     }
}
}
</code=java>
</syntaxhighlight>


=Der Client=
=Der Client=


<code=java>
<syntaxhighlight lang="java">
import java.rmi.Naming;
import java.rmi.Naming;
   
   
Zeile 85: Zeile 86:
     }
     }
}
}
</code=java>
</syntaxhighlight>
 
=Anwendungsbeispiel=
*[[Java-Programm nur einmal starten]]
 
{{Fragen stellen}}

Aktuelle Version vom 9. März 2018, 18:44 Uhr


Einführung und Grundlagen

[Bearbeiten | Quelltext bearbeiten]
  • 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

[Bearbeiten | Quelltext bearbeiten]
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

[Bearbeiten | Quelltext bearbeiten]
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...");
    }
}
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

[Bearbeiten | Quelltext bearbeiten]


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

  • Besuche unseren Chat

Wir helfen dir gerne!