# JXTA

JXTA ist ein Projekt zur Standardisierung von Peer-to-Peer-Anwendungen durch frei zugängliche Protokolle und unter einer Open-Source-Lizenz veröffentlichte Referenzbibliotheken für die Programmiersprachen Java, C und weitere Sprachen. Die JXTA-Projektwebsite definiert JXTA als ein Protokoll, welches die große Rolle der Referenzbibliotheken und Anwendungen vernachlässigt. Die JXTA-Protokolle sind tatsächlich Kern des Projektes, da sie unabhängig von Programmiersprache, Betriebssystem und darunterliegendem Transportprotokoll wie beispielsweise TCP/IP oder Bluetooth die breiteste Anwendbarkeit finden können. JXTA bietet die Möglichkeit, weitere Teilnehmer zu entdecken (discovery), Firewall und NAT zu überwinden (NAT-traversal), sowie auch eigene Dienste für Peer-To-Peer Netze zu entwickeln.
Das Projekt JXTA wurde 2001 durch Sun Microsystems unter der Leitung von Bill Joy und Mike Clary ins Leben gerufen und ist durch eine große industrielle und akademische Gemeinschaft weiterentwickelt worden. Der Name JXTA leitet sich aus dem englischen 'juxtapose' ab, was so viel bedeutet wie „Nebeneinanderstellung“ und spielt darauf an, dass die neuere P2P-Architektur und die ältere Client/Server-Architektur "nebeneinander" existieren sollen. Die Quellen zu JXTA wurden unter einer Sun-eigenen Lizenz veröffentlicht, die auf der Apache Software License Version 1.1 basiert. Sun Microsystems hatte großen Einfluss auf das JXTA Projekt, da Sun Microsystems stets eines der drei Vorstandsmitglieder stellte und auch die aktivsten Entwickler im Projekt im Angestelltenverhältnis führte.
Zwei JXTA-Vorstandsmitglieder werden jährlich von der Community gewählt. Ziel des JXTA-Vorstandes ist es strategische Ausrichtungen am Projekt vorzugeben. Zum Beispiel ist es Ziel des Projektes, die Protokolle durch das Internet Engineering Task Force (IETF) als Internet Standard anerkannt zu bekommen. Dazu soll anhand von prototypischen Netzwerken die Skalierbarkeit, Sicherheit und Interoperabilität von JXTA gezeigt werden.
Im Jahr 2010 stieg Sun Microsystems aus dem Projekt aus. Es wird nicht mehr aktiv weiterentwickelt. Eine Eingliederung in das Apache-Projekt schlug fehl.
Für den Mobil-Markt wird eine besondere Java Referenzbibliothek (JXME) bereitgestellt, die die Java 2 Micro Edition (J2ME) verwendet. Derzeit gibt es drei verschiedene Versionen:
* Proxybased basierend auf CLDC/MIDP2.0.
* Proxyless basierend auf CDC1.1.
* Proxyless basierend auf CLDC/MIDP2.0.

## Terminologie

* Peer kann alles genannt werden, was mindestens den JXTA-Core implementiert. Das können beispielsweise PDAs, Mobiltelefone oder Server sein. Jeder Peer erhält eine weltweit eindeutige ID.
* Eine Peer Group ist eine Menge von Peers, die sich selbst zu einer Gruppe organisieren, um gemeinsam Arbeit für die Gruppe zu verrichten. Peer Groups werden ebenfalls durch eine eindeutige ID in einem JXTA-Netzwerk identifiziert.
* Messages in JXTA sind Objekte, die zwischen Peers verschickt werden können. Als Format wird meist XML eingesetzt, aber auch ein binäres Format ist möglich.
* Eine Pipe ist ein Kommunikationskanal um Messages zu versenden oder empfangen zu können.
* Ein Advertisement ist ein XML-strukturiertes Dokument, das alle JXTA Ressourcen benennt, beschreibt und deren Existenz bekanntgibt. Ressourcen sind dabei Peers, Peer Groups, Pipes oder Services.
* Ein Service ist ein Dienst, der von jedem Peer oder einer Peer Group bereitgestellt werden kann.

## Core Protokolle
### Peer Resolver Protocol

    erlaubt es Peers, generische Anfragen zu verschicken und zu empfangen.

### Endpoint Routing Protocol

    definiert eine Reihe von Nachrichten, die es möglich machen, eine Route von einem Quell-Peer zu einem Ziel-Peer aufzubauen.

## Standard Protokolle

optional, aber trotzdem empfohlen diese zu Implementieren:

### Peer Discovery Protocol

    wird verwendet, um Peers, Peer Groups, Pipes oder Services aufzufinden.

### Peer Information Protocol

    bietet die Möglichkeit, Informationen über andere Peers abzufragen.

### Pipe Binding Protocol

    hat die Funktion, einen virtuellen Kommunikationskanal (pipe) an einen Kanalendpunkt (endpoint) zu binden.

### Rendezvous Protocol

    wird verwendet, um Verbindungen zu Rendezvous Peers aufzubauen, um dadurch Messages innerhalb einer Peer Group überhaupt versenden zu können.

## Architektur

JXTA basiert auf einer Architektur mit drei Schichten:
* JXTA Core, gemeinsame P2P-Protokolle und Sicherheit
* JXTA Services, higherlevel Services (von Sun und der Community entwickelt), basieren auf dem Core. Bieten Services, die nicht in allen P2P-Anwendungen benötigt werden, wie FileSharing, Indexing oder Searching.
* JXTA applications, highlevel Applikations die JXTA bzw. die Services nutzen; Hier gibt es auch Services, wie z. B. P2P-InstantMessaging oder P2P-E-Mail – die Differenzierung zwischen Services und Anwendungen verschwimmen.

## Rendezvous Super-Peer Network

Bei JXTA bilden die Rendezvous-Peers ein Netzwerk untereinander, in dem Advertisements ausgetauscht werden und nach Advertisements gesucht werden kann. Dadurch wächst die Skalierbarkeit von JXTA stark.