Das Projekt cajo ist eine kleine, freie Java-Klassen-Bibliothek. Sie ermöglicht die Kooperation zwischen mehreren virtuellen Maschinen. Das Ziel ist die Vereinfachung des Gebrauchs von RMI.
Erreicht werden soll die Vereinfachung gegenüber RMI wie folgt.
- Im Gegensatz zu RMI werden keine expliziten Schnittstellen definiert.
- Es wird kein RMI-Compiler benötigt, statt Code zu generieren, werden Aufrufe zur Laufzeit via Reflexion durchgeführt.
Da mit Einführung von Java 5.0 ebenfalls kein RMI-Compiler nötig ist, sollte diese API zunehmend an Bedeutung verlieren.
Code-Beispiel
Das folgende Beispiel zeigt einen einfachen Server, der einfach nur die Zeichenkette „Hallo Client“ an den Client überträgt, wobei der Name des Clients per Parameter übergeben wird. Die Methode main
startet den Server.
import gnu.cajo.invoke.Remote;
import gnu.cajo.utils.ItemServer;
public class MyServer {
public String hallo(String client) {
return "Hallo " + client;
}
public static void main(String args[]) {
try {
Remote.config(null, 1198, null, 0);
ItemServer.bind(new MyServer(), "einName");
} catch(Exception e) {
e.printStackTrace();
}
}
}
Der dazu passende Client könnte so aussehen, wobei serverHost
der Name der Maschine ist, auf der der Server läuft:
import gnu.cajo.invoke.Remote;
public class SomeClient {
public static void main(String args[]) {
try {
Object server = Remote.getItem("//serverHost:1198/einName");
String s = (String)Remote.invoke(server, "hallo", "Wiki");
System.out.println(s);
} catch(Exception e) {
e.printStackTrace();
}
}
}
Dieses Client-Programm würde „Hallo Wiki“ ausgeben.
Eigenschaften
Wie am Beispiel erkennbar ist, hat der Verzicht auf eine explizite Schnittstelle den Nachteil, dass der Code des Clients etwas schwerer lesbar ist. Statt wie bei Verwendung einer RMI-Schnittstelle zu schreiben server.hallo("Wiki")
wird geschrieben Remote.invoke(server, "hallo", "Wiki")
.
Der Verzicht auf die Erzeugung von clientseitigem Stub- und serverseitigem Skeleton-Code ist seit Java 5 auch bei Verwendung von RMI ebenfalls möglich, so dass der zweite Vorteil nicht mehr bedeutend ist.
Der Quelltext ist unter der LGPL (v3 oder später) verfügbar.
Am 5. August 2005 vergab die Organisation IANA nach mehr als einem Jahr und ausführlicher Kontrolle dem Projekt cajo die offizielle Portnummer 1198.[1][2]
Siehe auch
- Remote Method Invocation
- SIMON (Alternative zu RMI)
Weblinks
- web.archive.org/web/20170206060021/https://java.net/projects/cajo/pages/Home - archived copy of the original cajo project pages
- github.com/ravn/cajo - github cajo
- java.net/projects/cajo – cajo Projektseite (englisch) (deprecated)
Einzelnachweise
- ↑ cajo.dev.java.net (Seite nicht mehr abrufbar, festgestellt im April 2018. Suche in Webarchiven) Info: Der Link wurde automatisch als defekt markiert. Bitte prüfe den Link gemäß Anleitung und entferne dann diesen Hinweis.
- ↑ iana.org IANA-Port-Nummer