# Jini

Jini, inzwischen als Projekt der Apache Software Foundation Apache River genannt, ist ein Framework zum Programmieren von verteilten Anwendungen, welche besondere Anforderungen an die Skalierbarkeit und die Komplexität der Zusammenarbeit zwischen den verschiedenen Komponenten stellen und nicht durch existierende Techniken bedient werden können. Jini bietet eine flexible Infrastruktur, über die Dienste (Services) in einem Netzwerk bereitgestellt werden können. Jini wurde von Sun Microsystems basierend auf der Programmiersprache Java entwickelt.
Das Kunstwort Jini wurde geschaffen, als nach einem klangvollen Namen gesucht wurde, der mit dem Buchstaben „J“ für „Java“ beginnt. Der Name Jini wurde letztlich ausgewählt, weil er wie das englische Wort genie [dʒiːniː] für einen Dschinn aus Tausendundeine Nacht klingt. Über Bedeutungen als Akronym wurde nur nachträglich spekuliert. Das Markenzeichen von Jini ist eine Öllampe, die Behausung des dienstbaren Geistes in der Erzählung Aladin und die Wunderlampe.
Die Jini-Netzwerktechnologie ist eine offene Architektur, welche es Entwicklern ermöglicht, anpassungsfähige Netzwerk-basierte Dienste – implementiert in Hardware oder Software – zu programmieren. Mit Jini können skalierbare und flexible Netzwerke erzeugt werden, wie sie in einer dynamischen Computer-Umgebung benötigt werden.

## Eigenschaften
### Die acht Trugschlüsse verteilter Anwendungen

* Das Netzwerk ist immer verfügbar
* Die Wartezeit (engl. latency) ist Null
* Die Übertragungsrate ist unendlich groß
* Das Netzwerk ist sicher
* Der Aufbau des Netzwerks ändert sich nicht
* Es gibt nur einen Administrator
* Es fallen keine Transportkosten an
* Das Netzwerk ist homogen
Diese Annahmen über das Netzwerk behindern die effektive Geschwindigkeit und die Verteilung der Software. Die folgenden Eigenschaften der Jini-Netzwerk-Technologie helfen, die genannten Fallstricke zu meistern.
* Code mobility – Das Programmiermodell der Java-Programmiersprache wird auf das Netzwerk übertragen. Es ist möglich, dass Daten und Programme als Java-Objekt über das Netzwerk übertragen werden.
* Protokoll-unabhängig – ermöglicht eine hohe Flexibilität beim Design der Programme.
* Leasing – ermöglicht die Selbstheilung und automatische Konfiguration des Netzwerkes, wodurch z. B. die Fehlertoleranz erhöht wird.
* Flexibilität – das Netzwerk passt sich Änderungen an der Computer-Umgebung an.
* Integration – es wird eine einfache und schnelle Zusammenarbeit von alten, aktuellen und zukünftigen Netzwerkkomponenten ermöglicht
* Lizenzierung – die Jini-Netzwerktechnologie ist kostenlos verfügbar.

### Jini-Architektur

Die Jini-Architektur spezifiziert, wie sich Clients und Dienste in einem Netzwerk finden und zusammenarbeiten können, um gestellte Aufgaben zu lösen. Die Dienstanbieter ermöglichen den Clients den Zugriff auf die Dienste über Java-basierte Objekte. Die Netzwerkkommunikation kann über verschiedene Techniken wie RMI, CORBA oder SOAP erfolgen, da der Client nur die angebotenen Java-Objekte des Dienstes sieht. Die eigentliche Netzwerkkommunikation ist durch die Java-Objekte des Dienstes verdeckt.
Wenn ein Dienst, welcher Jini unterstützt, in einem Netzwerk gestartet wird, dann verbreitet dieser Dienst eine Meldung über ein Java-Objekt, welches die Service-API implementiert. Die Implementierung dieses Java-Objektes ist dem Dienst freigestellt. Ein Client findet die Dienste, indem er nach Objekten sucht, welche die gewünschte Programmierschnittstelle bereitstellen. Nachdem der Client das veröffentlichte Objekt gefunden hat, werden benötigte Programmteile geladen, um mit dem Dienst kommunizieren zu können. Der Entwickler des Dienstes hat festgelegt, wie die Kommunikation zwischen Client und Service erfolgen soll.
Die existierende Java-Plattform macht es möglich, die Jini-Netzwerktechnologie festzulegen. Jini erweitert die Java-Plattform, indem es die Dienste innerhalb des Netzwerks verfügbar macht. Die Java-Plattform legt fest, was auf einer beteiligten Maschine an Funktionen zur Verfügung steht. Die Jini-Technologie erweitert den Gedanken einer Plattform von einem einzelnen Rechner auf das Netzwerk von Rechnern, welche die Java-Plattform nutzen. Jini-Dienste müssen nicht zwingend auf allen Rechnern des Netzwerkes existieren, sondern sind durch das Netzwerk auf allen Rechnern verfügbar.

## Jini und UPnP

Jini und UPnP sind verschiedene Ansätze, um eine Zusammenarbeit zwischen Programmen und Geräten in einem Netzwerk zu ermöglichen. Allerdings stellen beide Ansätze jeweils einen anderen Umfang der Implementierung bereit. Während zum Beispiel Jini bereits ein existierendes Netzwerk für die Kommunikation zwischen den Teilnehmern des Netzes voraussetzt, bietet UPnP auch Funktionen, um das Netzwerk zwischen verschiedenen Geräten zu konfigurieren und damit erst zu ermöglichen.