<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Cajo</id>
	<title>Cajo - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Cajo"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Cajo&amp;action=history"/>
	<updated>2026-06-11T13:39:41Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Cajo&amp;diff=476627&amp;oldid=prev</id>
		<title>imported&gt;TaxonBot: Bot: Auflösung doppelter toter Links nach https://de.wikipedia.org/w/index.php?title=Wikipedia:Bots/Anfragen&amp;oldid=266185123#Aufl%C3%B6sung_der_doppelten_Toten_Links</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Cajo&amp;diff=476627&amp;oldid=prev"/>
		<updated>2026-04-16T15:48:26Z</updated>

		<summary type="html">&lt;p&gt;Bot: Auflösung doppelter toter Links nach https://de.wikipedia.org/w/index.php?title=Wikipedia:Bots/Anfragen&amp;amp;oldid=266185123#Aufl%C3%B6sung_der_doppelten_Toten_Links&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Begriffsklärungshinweis|Zum peruanischen Sprinter siehe [[Jeffrey Cajo]].}}&lt;br /&gt;
Das Projekt &amp;#039;&amp;#039;&amp;#039;cajo&amp;#039;&amp;#039;&amp;#039; ist eine kleine, [[Freie Software|freie]] [[Java (Technik)|Java]]-Klassen-Bibliothek. Sie ermöglicht die Kooperation zwischen mehreren [[Virtuelle Maschine|virtuellen Maschinen]]. Das Ziel ist die Vereinfachung des Gebrauchs von [[Remote Method Invocation|RMI]].&lt;br /&gt;
&lt;br /&gt;
Erreicht werden soll die Vereinfachung gegenüber RMI wie folgt.&lt;br /&gt;
# Im Gegensatz zu RMI werden keine expliziten [[Schnittstelle (Programmierung)|Schnittstellen]] definiert.&lt;br /&gt;
# Es wird kein RMI-Compiler benötigt, statt Code zu generieren, werden Aufrufe zur Laufzeit via [[Reflexion (Programmierung)|Reflexion]] durchgeführt.&lt;br /&gt;
&lt;br /&gt;
Da mit Einführung von Java 5.0 ebenfalls kein RMI-Compiler nötig ist, sollte diese [[Programmierschnittstelle|API]] zunehmend an Bedeutung verlieren.&lt;br /&gt;
&lt;br /&gt;
== Code-Beispiel ==&lt;br /&gt;
Das folgende Beispiel zeigt einen einfachen Server, der einfach nur die [[Zeichenkette]] „Hallo &amp;#039;&amp;#039;Client&amp;#039;&amp;#039;“ an den Client überträgt, wobei der Name des Clients per Parameter übergeben wird. Die Methode &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; startet den Server.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import gnu.cajo.invoke.Remote;&lt;br /&gt;
import gnu.cajo.utils.ItemServer;&lt;br /&gt;
&lt;br /&gt;
public class MyServer {&lt;br /&gt;
&lt;br /&gt;
    public String hallo(String client) {&lt;br /&gt;
        return &amp;quot;Hallo &amp;quot; + client;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public static void main(String args[]) {&lt;br /&gt;
        try {&lt;br /&gt;
            Remote.config(null, 1198, null, 0);&lt;br /&gt;
            ItemServer.bind(new MyServer(), &amp;quot;einName&amp;quot;);&lt;br /&gt;
        } catch(Exception e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Der dazu passende Client könnte so aussehen, wobei &amp;lt;code&amp;gt;serverHost&amp;lt;/code&amp;gt; der Name der Maschine ist, auf der der Server läuft:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import gnu.cajo.invoke.Remote;&lt;br /&gt;
&lt;br /&gt;
public class SomeClient {&lt;br /&gt;
&lt;br /&gt;
    public static void main(String args[]) {&lt;br /&gt;
        try {&lt;br /&gt;
            Object server = Remote.getItem(&amp;quot;//serverHost:1198/einName&amp;quot;);&lt;br /&gt;
            String s = (String)Remote.invoke(server, &amp;quot;hallo&amp;quot;, &amp;quot;Wiki&amp;quot;);&lt;br /&gt;
            System.out.println(s);&lt;br /&gt;
        } catch(Exception e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dieses Client-Programm würde „Hallo Wiki“ ausgeben.&lt;br /&gt;
&lt;br /&gt;
== Eigenschaften ==&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;server.hallo(&amp;quot;Wiki&amp;quot;)&amp;lt;/code&amp;gt; wird geschrieben &amp;lt;code style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;Remote.invoke(server, &amp;quot;hallo&amp;quot;, &amp;quot;Wiki&amp;quot;)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Der Verzicht auf die Erzeugung von clientseitigem Stub- und serverseitigem Skeleton-Code ist seit Java&amp;amp;nbsp;5 auch bei Verwendung von RMI ebenfalls möglich, so dass der zweite Vorteil nicht mehr bedeutend ist.&lt;br /&gt;
&lt;br /&gt;
Der [[Quelltext]] ist unter der LGPL (v3 oder später) verfügbar.&lt;br /&gt;
&lt;br /&gt;
Am 5. August 2005 vergab die Organisation [[Internet Assigned Numbers Authority|IANA]] nach mehr als einem Jahr und ausführlicher Kontrolle dem Projekt &amp;#039;&amp;#039;cajo&amp;#039;&amp;#039; die offizielle Portnummer 1198.&amp;lt;ref&amp;gt;{{Toter Link |datum=2018-04 |url=https://cajo.dev.java.net/servlets/NewsItemView?newsItemID=2539 |text=cajo.dev.java.net |archivebot=2018-04-03 07:07:16 InternetArchiveBot}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[http://www.iana.org/assignments/port-numbers iana.org] IANA-Port-Nummer&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Remote Method Invocation]]&lt;br /&gt;
* [[SIMON]] (Alternative zu RMI)&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [https://web.archive.org/web/20170206060021/https://java.net/projects/cajo/pages/Home web.archive.org/web/20170206060021/https://java.net/projects/cajo/pages/Home] - archived copy of the original cajo project pages&lt;br /&gt;
* [https://github.com/ravn/cajo github.com/ravn/cajo] - [[GitHub|github]] cajo&lt;br /&gt;
* [http://java.net/projects/cajo/pages/Home java.net/projects/cajo] – cajo Projektseite (englisch) (deprecated)&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java-Bibliothek]]&lt;/div&gt;</summary>
		<author><name>imported&gt;TaxonBot</name></author>
	</entry>
</feed>