Paper - Lehre und Forschung Thorsten Strufe

Werbung
Studienarbeit
Analyse von JXTA und prototypische
Implementierung eines Peer-to-PeerSystems
Hochschullehrer:
Prof. Dr. Ing. habil. D. Reschke
Betreuer:
Dipl.-Inf. Thorsten Strufe
Name:
Ronny Heidenreich
Studiengang:
Informatik
Fakultät:
Fakultät für Informatik und Automatisierung
Universität:
Technische Universität - Ilmenau
1
Inhaltsverzeichnis
1. Einleitung
1.1
4
Aufgabenstellung
. . . . . . . . . . . . . . . . . .
2. Grundlagen zu Peer-to-Peer und JXTA
2.1
2.2
4
5
Übersicht zu Peer-to-Peer . . . . . . . . . . . . . . . .
5
2.1.1
P2P-Begriffe . . . . . . . . . . . . . . . . .
5
2.1.2
Dezentrale und zentrale Netzwerke . . . . . . . . . .
5
2.1.3
P2P-Einsatzgebiete . . . . . . . . . . . . . . .
6
2.1.4
Allgemeine Probleme in P2P-Netzwerken . . . . . . .
7
2.1.5
JXTA als gemeinsame Grundlage für P2P-Anwendungen . .
7
Übersicht zu JXTA . . . . . . . . . . . . . . . . . .
8
2.2.1
Entwicklungsgeschichte von JXTA. . . . . . . . . .
8
2.2.2
Die Ziele von JXTA . . . . . . . . . . . . . . .
8
2.2.3
Die JXTA-Architektur im Überblick . . . . . . . . .
10
2.2.4
Die Bestandteile der JXTA-Architektur . . . . . . . .
11
2.2.4.1 Der Core Layer. . . . . . . . . . . . . .
11
2.2.4.2 Core Layer - Konzepte . . . . . . . . . . .
11
2.2.4.3 Core Layer - Protokolle
. . . . . . . . . .
18
2.2.4.4 Der Service Layer. . . . . . . . . . . . .
21
2.2.4.5 Der Application Layer . . . . . . . . . . .
21
JXTA Anwendungen. . . . . . . . . . . . . . .
22
2.2.5.1 Die JXTA Shell . . . . . . . . . . . . .
22
2.2.5.2 myJxta . . . . . . . . . . . . . . . .
22
2.2.5
3. Stand der Technik
23
4. Die prototypische Implementierung des P2P-Systems
24
4.1
Entwurf . . . . . . . . . . . . . . . . . . . . . .
24
4.2
Implementierung . . . . . . . . . . . . . . . . . . .
26
4.2.1
Die Hauptklasse (TestApp.java) . . . . . . . . . . .
26
4.2.2
Das Content Management System (CMSystem.java) . . . .
28
2
4.2.3
Der Group Manager (GroupManager.java). . . . . . . .
31
4.2.4
Informationen zum Netzwerk (NetworkInfo.java) . . . . .
35
4.2.5
Hilfsklasse (Utility.java) . . . . . . . . . . . . .
35
4.2.6
Die graphische Benutzerschnittstelle (GUI.java) . . . . .
35
4.3. Probleme während der Umsetzung des Entwurfs . . . . . . . .
36
5. Fazit
37
6. Abkürzungsverzeichnis
38
7. Literaturverzeichnis
39
A. Softwareinstallation
40
B. Bedienungsanleitung
42
3
1.
Einleitung
Derzeit existieren die verschiedensten P2P-Anwendungen für die unterschiedlichsten
Bereiche. Dazu zählen Applikationen für File-Sharing, Instant-Messaging sowie
Distributed-Computing. Trotz ihrer unterschiedlichen Ansätze und vielfältigen
Einsatzmöglichkeiten haben diese Anwendungen eine Gemeinsamkeit: Während ihrer
Entwicklungsphase musste ein beträchtlicher Aufwand betrieben werden, um die
grundlegenden Funktionen eines jeden P2P-Systems zu integrieren. Zu diesem Zweck
wurden entsprechende Protokolle geschaffen und integriert. Diese Protokolle haben
aber einen erheblichen Nachteil: Sie sind untereinander nicht kompatibel, enthalten aber
zum Teil die gleichen Funktionalitäten. In der Folge entstanden getrennte Communities
zur Nutzung der inkompatiblen Anwendungen.
Diese Entwicklungen im P2P-Bereich wurden von der Firma „SUN“ als Anlass
genommen, das Projekt JXTA ins Leben zu rufen. Das Ziel dieses Projektes ist es, eine
dünne und universell einsetzbare Netzwerkzwischenschicht zu schaffen, die von den
verschiedensten P2P-Systemen gemeinsam genutzt werden kann. Mit JXTA entstand
somit ein Framework, das offene Protokolle enthält, plattformunabhängig ist und mit
dem es möglich sein soll, die Interoperabilität zwischen den Anwendungen zu
verbessern. Durch den Einsatz von JXTA soll auch der Aufwand für die
Anwendungsentwicklung verringert werden. Die Erleichterung bezieht sich dabei vor
allem auf den Umgang mit dem unterliegenden Netzwerk, das zu großen Teilen von
JXTA verwaltet werden soll.
1.1
Aufgabenstellung
Ziel dieser Arbeit ist zum einen die Analyse von JXTA und zum anderen die
prototypische Implementierung eines P2P-Systems. Zu diesem Zweck wird sich die
Arbeit in zwei Teile gliedern. Der Inhalt des ersten Teils ist die Analyse von JXTA. Das
Umfasst die Erläuterung der einzelnen Bestandteile von JXTA, sowie die Erklärung der
Funktion und des Einsatzes der enthaltenen Protokolle. Im zweiten Teil wird es dann
vor allem um den Entwurf und die konkrete Implementierung eins auf JXTAbasierenden P2P-Systems gehen.
4
2.
Grundlagen zu Peer-to-Peer und JXTA
Dieses Kapitels enthält eine kurze Einführung in die Peer-2-Peer Thematik und befasst
sich hauptsächlich mit den Grundlagen und Bestandteilen von JXTA. Die Ausführungen
zu JXTA enthalten dabei die Entwicklungsgeschichte und die Ziele von JXTA, sowie
die wichtigsten Konzepte und Protokolle die JXTA ausmachen. Zum Abschluss des
Kapitels werden einige Beispiele für bereits bestehende JXTA-Projekte etwas genauer
beschrieben.
2.1
Übersicht zu Peer-2-Peer
2.1.1 P2P-Begriffe
Unter dem Begriff Peer(s) versteht man alle Geräte in einem geschichteten
Kommunikationsnetzwerk, die auf der gleichen Protokollebene arbeiten. Peer-to-Peer
bedeutet etwa soviel wie „von gleich zu gleich“. Die Peer-to-Peer Kommunikation ist
der
Informationsaustausch
zwischen
Geräten,
die
in
einer
geschichteten
Netzwerkarchitektur auf der gleichen Protokollebene arbeiten.
2.1.2 Dezentrale und zentrale Netzwerke
Bei P2P-Netzwerken spricht man von so genannten dezentralisierten Netzwerken.
Kennzeichnend für ein solches Netzwerk ist, dass die Inhalte und Dienste von den
teilnehmenden Peers angeboten werden. Man nennt die Peers in diesem Zusammenhang
auch Servents, da sie Server und Client gleichzeitig sind. Typisch ist für diese
Netzwerke die Autonomie der Peers sowie das dynamische Betreten und Verlassen des
Netzwerks durch die Peers. Ein solches Netzwerk ist gegenüber Ausfällen sehr robust,
da die Funktionalität über das gesamte Netzwerk verteilt wird.
5
Den Gegensatz zu den dezentralen Netzwerken bilden die zentralen Netzwerke.
Diese Netzwerke funktionieren nach dem Client / Server Prinzip - d.h. es gibt dort
einen zentralen Server oder Serververbund, der alle anfragenden Clienten bedient.
Derzeit ist diese Architektur die am häufigsten anzutreffende.
Die bekanntesten Formen von existierenden P2P-Netzwerken sind entweder
total dezentralisiert (z.B. Gnutella) oder aber kombiniert zentralisiert &
dezentralisiert (z.B. KaZaA). Zentralisierte Netzwerke mit einem zentralen Indexserver
a la Napster sind nicht mehr so erfolgreich.
2.1.3 P2P-Einsatzgebiete
Bei dem P2P-Konzept handelt es sich nicht um eine Neuentwicklung, sondern um eine
bereits bekannte Organisationsform von Netzen, die schon im frühen Internet zum
Einsatz kam. Als Beispiele seien hier stellvertretend das Usenet und DNS genannt.
Der P2P-Gedanke wurde zwischenzeitlich immer wieder aufgegriffen, aber nie wirklich
in großem Rahmen umgesetzt. Heute wird dieser Typ von Netzwerken wieder
interessant, da sehr leistungsfähige PCs kostengünstig und in großer Stückzahl zur
Verfügung stehen. Die Rechner haben ein enormes Potenzial an Rechenkraft und
Speicherkapazität, welches durch die oft breitbandige Anbindung an das Internet auch
in geeigneter Weise genutzt werden kann.
Einige Beispiele für aktuelle P2P-Einsatzbereiche und Anwendungen:
-
Instant-Messaging (ICQ, AIM, Jabber)
-
File-Sharing (KaZaA, Gnutella, eDonkey2000, Overnet, Freenet)
-
Distributed-Search-Engines (OpenCola, Copernic)
-
Group-Collaboration (Groove, NetMeeting)
-
Distributed-Computing (Seti@Home, Parabon)
Mögliche zukünftige Anwendungsbereiche für P2P sind unter anderem DistributedStorage, Licensed-Media-Distribution und Online-Gaming.
6
2.1.4 Allgemeine Probleme in P2P-Netzwerken
Trotz der vielfältigen Einsatzbereiche und den Vorteilen, die ein P2P-Netzwerk bietet,
bringt diese Art von Netzwerken auch eine Reihe von Problemen mit sich, die hier nicht
unerwähnt bleiben sollen. So ist z.B. die Administration der einzelnen Peers sehr
schwierig. Auch Aspekte wie Anonymität, Sicherheit und Vertraulichkeit sind bei
bestehenden Lösungen meist nur unzureichend umgesetzt. Die Problematik der
Ausbreitung von unerwünschten Inhalten und die Garantie der Verfügbarkeit von
Inhalten, ist ein weiteres Problem. Häufig gibt es auch Schwierigkeiten beim Umgang
mit Firewalls und NATs. Nicht zuletzt müssen auch die Performance und Skalierbarkeit
in einem solchen Netzwerk beachtet werden, wenn eine P2P-Lösung mit bereits
existierenden zentralen Systemen konkurrieren soll.
2.1.5 JXTA als gemeinsame Grundlage für P2P-Anwendungen
In der P2P-Welt gibt es derzeit eine Vielzahl von Anwendungen für die
unterschiedlichsten Bereiche. Das Problem dabei ist, dass eine Anwendung meist nur
einen
einzigen
Bereich
abdeckt
und
ihr
eigenes
Programmierungs-
und
Kommunikationsmodell mitbringt. Die so entstanden Anwendungen existieren
unabhängig voneinander und sind untereinander nicht kompatibel. Zur Lösung dieses
Problems will JXTA beitragen. Es bietet dafür ein Framework, das eine gemeinsame
Grundlage für die Entwicklung von zukünftigen P2P-Anwendungen bieten soll. Der
Aufwand für die Entwicklung von grundlegenden Netzwerkfunktionen soll damit
verringert und die Interoperabilität zwischen den Anwendungen verbessert werden.
7
2.2
Übersicht zu JXTA
2.2.1 Entwicklungsgeschichte von JXTA
JXTA ist die Abkürzung für juxtaposition und heißt soviel wie „nebeneinander stellen“.
Das Konzept wurde von Bill Joy, Chefwissenschaftler bei Sun, entwickelt. Die ersten
Informationen zu JXTA stammen vom 15.02.2001 und wurden im Rahmen einer P2PKonferenz der Öffentlichkeit vorgestellt. Die JXTA Web-Site (www.jxta.org) wurde am
25.04.2001 eröffnet. Zeitgleich wurde ein Open Source Projekt ins Leben gerufen, das
den Namen Project JXTA hat. Dieses Projekt ist eine Referenzimplementierung der
Spezifikation von JXTA, und soll die weitere Entwicklung von JXTA vorantreiben.
Die Implementierung wurde in Java vorgenommen.
2.2.2 Die Ziele von JXTA
Bei der Entwicklung von JXTA wurden im Wesentlichen drei Hauptziele verfolgt:
—
Interoperabilität (Interoperability)
Bei genauerer Analyse von existierenden P2P-Systemen hatte man festgestellt, dass
viele der bisher entstandenen Systeme lediglich einen bestimmten Dienstetyp
realisierten. So wurde z.B. Napster nur für Musik-File-Sharing, Gnutella für
allgemeines File-Sharing oder AIM explizit für Instant-Messaging entwickelt. Die
verschieden Eigenschaften der Dienste und das Fehlen einer gemeinsamen zugrunde
liegenden P2P-Infrastruktur führte dazu, dass inkompatible Systeme entstanden sind.
Ein weiteres Ergebnis der Untersuchungen war die Feststellung, dass ähnlich gelagerte
Grundanforderungen der jeweiligen Dienste mehrfach neu entwickelt wurden, was
einen nicht unerheblichen Aufwand für das Gesamtprojekt bedeutete. Damit ein Nutzer
die angebotenen Dienste letztendlich auch nutzen konnte, war es notwendig, dass er
jede einzelne Implementierung eines P2P-Systems unterstützte. Durch den Einsatz von
JXTA sollen diese Schwierigkeiten beseitigt werden. JXTA stellt aus diesem Grund ein
Framework zur Verfügung, mit dem Peers in die Lage versetzt werden, die
verschiedensten Dienste anzubieten, diese aufzufinden, zu nutzen und mit anderen Peers
8
ganz allgemein zu kommunizieren. Die Interoperabilität erstreckt sich dabei auf die
verschiedenen P2P-Systeme und Communities.
— Plattformunabhängigkeit (Platform Independence)
Die meisten P2P-Systeme sind an ein bestimmtes Betriebssystem oder eine bestimmte
Programmiersprache gebunden. Das hat zur Folge, dass diese Systeme nur auf einem
Teil der denkbaren Peers lauffähig sind. Um eine Nutzung auf weiteren Plattformen zu
ermöglichen, ist eine erneute Entwicklung einer solchen Anwendung nötig. Bei JXTA
geschieht
die
Entwickelung
Programmiersprachen
und
Kommunikationsprotokollen
deshalb
unabhängig
von
Entwicklungsumgebungen,
sowie
den
eingesetzten
den
den
bevorzugten
verschiedenen
Plattformen
bzw.
Betriebssystemen.
— Globale Erreichbarkeit (Ubiquity)
Man verfolgt dieses Ziel mit der Absicht, die JXTA Technologie in jedes Gerät mit
einem „digitalen Herzschlag“ implementieren zu können. So z.B. in Sensoren,
Verbraucherelektronik, PDAs, Router, Desktop Computer, große Datenserver und
Speichersysteme. Somit erstreckt sich der Einsatzbereich über die Großsysteme der
Unternehmen bis hin zu den verbraucherorientierten Kleinsystemen der Endanwender.
JXTA kann somit theoretisch auf jedem digitalen Gerät eingesetzt werden, wobei klar
ist, dass der Funktionsumfang entsprechend angepasst werden muss. Alle Geräte
innerhalb des so entstehenden JXTA-Netzwerks lassen sich nach einem festgelegten
Schema auffinden und ansprechen.
Abbildung 2.1: Einordnung von JXTA in die bisherigen Strukturen
9
2.2.3 Die JXTA-Architektur im Überblick
Die Architektur von JXTA gliedert sich in drei Hauptebenen:
— Plattform (Core Layer)
Diese Ebene enthält im Wesentlichen das Basiswissen für alle P2P-Operationen und
beinhaltet die Funktionalität der JXTA-Basisprotokolle.
— Dienstebene (Service Layer)
Diese Schicht enthält die Dienste, die ein P2P-System anbieten oder nutzen kann.
— Anwendungsebene (Application Layer)
Stellt die Benutzerschnittstelle für Applikationen wie z.B. Tauschbörsen, InstantMessaging-Systeme und andere mögliche Anwendungen dar.
Abbildung 2: Die Architektur von JXTA
Abbildung 2.2: Die Architektur von JXTA
10
2.2.4 Die Bestandteile der JXTA-Architektur
2.2.4.1 Der Core Layer
Der JXTA Core Layer definiert die grundlegende Funktionalität für die P2P-Dienste
und Anwendungen. Er beinhaltet die gemeinsamen, minimalen und wesentlichen
Grundlagen für das P2P-Netzwerk.
Beispiele für diese grundlegenden Funktionen sind:
-
Basiskommunikation & Erkundungsmechanismus
-
grundlegende Sicherheitskonzepte & Mitgliedschaftsmechanismen
-
grundlegende Monitoring-Mechanismen
Konkret heißt das, es geht um den Aufbau von Kommunikationskanälen, das Aufspüren
von kommunikationswilligen Partnern und die Sicherung des Datenaustauschs. In einer
sicheren Umgebung werden dazu verschiedene Mechanismen zur Verfügung gestellt.
Der Core Layer umfasst im Wesentlichen Konzepte (Concepts) und Protokolle
(Protocols).
Zu den Konzepten gehören:
Peers, Peer Groups, Network Services, Pipes, Messages, Advertisements, Identifiers,
Credentials und Content
2.2.4.2 Core Layer - Konzepte
— Peer
Peers sind alle am Netzwerk angebundenen Teilnehmer, die JXTA nutzen. Ausgehend
von ihrem jeweiligen Einsatzzweck haben sie dafür ein oder mehrere Protokolle von
JXTA implementiert. Peers im Sinne von JXTA sind Prozessoren, Prozesse oder
Benutzer sowie Sensoren, Telefone, PDAs, PCs, Server und Super-Computer. Jeder
Peer im JXTA-Netzwerk besitzt eine eindeutige ID, die es erlaubt den Peer unabhängig
von seinem physischen Standort sicher zu adressieren. Da ein Peer mehrere
11
Netzwerkschnittstellen haben kann, wird jede veröffentlichte Schnittstelle als ein Peer
Endpoint bekannt gemacht und lässt sich damit eindeutig identifizieren und adressieren.
Die Peer Endpoints werden genutzt, um direkte Punkt-zu-Punkt Verbindungen
zwischen den Peers einrichten zu können. Da dies aber nicht in jedem Fall möglich ist,
z.B. wegen Trennung der Peers durch NATs, Firewalls und Proxys, gibt es einige
spezielle Peers, die dafür sorgen, dass trotzdem eine Verbindung aufgebaut werden
kann.
An dieser Stelle ein kurzer Überblick über die verschiedenen Peertypen:
Minimal Peer:
-
kann Messages senden und empfangen
-
kann keine Advertisements für andere Peers speichern oder Messages
weiterleiten
-
sind meist Geräte mit begrenzten Ressourcen
Simple Peer: (der überwiegende Anteil der Peers)
-
kann Messages senden und empfangen
-
kann Advertisements speichern
-
kann keine Discovery Requests weiterleiten
-
kann aber auf Discovery Requests antworten - mit Hilfe seine gespeicherten
Advertisements
Relay Peer:
-
hält Informationen über Routen zu anderen Peers (dynamische RoutingInformationen)
-
wird benutzt, um Messages weiterzuleiten bzw. zu routen
-
die Weiterleitung wird oft dann genutzt, wenn Peers nicht direkt zu erreichen
sind z.B. wegen physischer oder logischer Trennung des Netzes
=> die Überwindung von Firewalls wird möglich
-
speichern Messages für vorübergehend nicht erreichbare Peers
12
Rendezvous Peer:
-
kann Advertisements speichern
-
kann Discovery Requests weiterleiten
-
hält eine Liste aller ihm bekannten anderen Rendezvous Peers und der an ihn
angeschlossenen Peers => zum Messages verteilen
-
agiert als Zugangspunkt für das JXTA Netzwerk
Jeder Peer agiert unabhängig und asynchron mit anderen Teilnehmern. Ein Peer kann
Dienste anbieten, nutzen oder Informationen zwischenspeichern. Die Interaktion eines
Peers ist typischerweise auf wenige andere Teilnehmer im Netzwerk beschränkt. Diese
Peers haben sich meist als Gruppe organisiert, um ein bestimmtes Interessengebiet
abzudecken.
— Peer Group
Eine Peer Group ist eine virtuelle Einheit, die typischerweise aus einer Ansammlung
von kooperierenden Peers besteht. Die Mitglieder einer Gruppe verfolgen gemeinsame
Interessen und bieten gemeinsam Dienste an. Eine Peer Group bietet eine sichere,
spezialisierte und beobachtbare Umgebung. Dabei wird von der JXTA Spezifikation
nicht vorgeschrieben wann, wo oder warum eine Peer Group zu entstehen hat. Genauso
beliebig kann der Typ und die Mitgliedschaft einer Gruppe gewählt werden. Die JXTA
Spezifikation beschreibt lediglich, wie Peers eine Peer Group veröffentlichen, finden,
beitreten oder überwachen können. Ein Peer kann verschiedenen Peer Groups beitreten.
JXTA definiert standardmäßig eine WorldPeerGroup, in der alle Peers automatisch
vertreten sind. Jede Peer Group kann eigene Aufnahmekriterien für neue Mitglieder
definieren (z.B.: jeder beliebige Peer kann Mitglied werden, oder Peers müssen sich
autorisieren).
Motivation für die Gründung einer Peer Group könnte z.B. sein:
-
Erstellen einer sicheren Umgebung
-
Peer Groups können dafür beispielsweise einen Sicherheitsmechanismus
wie Public-Key Verfahren implementieren oder auch nur eine
Autorisierung mittels Benutzername und Kennwort fordern.
13
-
Erstellen einer spezialisierten Umgebung
-
Peers, die gemeinsamen Interessen nachgehen, schließen sich zusammen.
Innerhalb dieser Gruppe können dann Dateien ausgetauscht werden oder
gemeinsam nutzbare Rechnerleistung zur Verfügung gestellt werden.
-
Erstellen einer überwachten Umgebung
-
Peer Groups erlauben die Überwachung von Peers (Accountig, Tracing,
usw.)
Wie schon erwähnt, bietet eine Peer Group bestimmte Dienste an, so genannte Peer
Group Services. JXTA definiert einige grundlegende Peer Group Services, die natürlich
jederzeit um weitere zusätzliche Dienste ergänzt werden können.
Zu den grundlegenden Diensten (Core Services) gehören:
Discovery Service, Membership Service, Access Service, Pipe Service, Resolver Service,
Monitoring Service
— Network Services
Peers kooperieren und kommunizieren miteinander, um Network Services zu
veröffentlichen, zu finden und daran teilzunehmen. Ein Peer findet einen solchen
Network Service mittels des Peer Discovery Protocols (PDP).
Das JXTA Protokoll kennt 2 Ebenen von Network Services:
Peer Services
Darunter fallen alle Dienste, die nur ein einzelner Peer anbietet. Ein solcher Dienst steht
dem Netzwerk nur solange zur Verfügung, wie der Peer korrekt arbeitet und erreichbar
ist. Anderenfalls ist dieser Dienst nicht mehr nutzbar.
Peer Group Services
Diese Art Dienst wird von mehreren Mitgliedern einer Peer Group angeboten und ist
solange erreichbar, wie es noch Peers dieser Gruppe gibt, die den Dienst anbieten
können.
14
— Pipes
Pipes sind virtuelle Kommunikationskanäle zum Senden und Empfangen von
Nachrichten (Messages). In ihrer Grundform sind sie als asynchrone, unidirektionale
und unsichere Verbindung ausgelegt. Dieser geringe Funktionsumfang resultiert daraus,
dass JXTA keine Anforderungen an die darunter liegenden Transportschichten stellt.
Die jeweiligen Enden einer Pipe werden als Pipe Endpoints bezeichnet, wobei das
empfangende Ende als Input Pipe und das sendende Ende als Output Pipe bezeichnet
wird. Die Pipe Endpoints werden dynamisch zur Laufzeit an die Peer Endpoints
gebunden. Pipes verbinden also Peers miteinander. Dies kann direkt geschehen oder
aber mittels einem oder mehreren Relay Peers, wenn keine direkte Verbindung möglich
ist. In JXTA wird zwischen zwei Basistypen von Pipes unterschieden:
Point-to-Point Pipes:
Verbinden immer genau zwei Peers miteinander. Dabei liefert ein Peer die Messages
und der andere konsumiert diese. Eine Unterform dieser Art von Pipe ist die Secure
Unicast Pipe, die im Wesentlichen eine sichere Point-to-Point Pipe darstellt.
Propagate Pipes: (Point-to-Multipoint Pipes).
Verbinden einen Produzenten mit beliebig vielen Konsumenten; d.h. eine Output Pipe
wird mit vielen Input Pipes verbunden. Diese Art von Verbindung kommt im Rahmen
von Peer Groups zum Einsatz, um Messages an die einzelnen Mitglieder zu verteilen.
JXTA bietet auch die Möglichkeit, aufbauend auf den bestehenden Pipes, neue Typen
von Pipes zu erzeugen. So enthält z.B. die Java Implementierung von JXTA
bidirektionale und zuverlässige Pipes.
— Advertisements
Ein Advertisement ist ein XML strukturiertes Dokument, das Netzwerkressourcen
benennt, beschreibt und deren Existenz bekannt gibt. Netzwerkressourcen sind z.B.
Peers, Peer Groups, Pipes oder ein Dienst. Advertisements sind also Metadaten zum
Beschreiben von Ressourcen. Sie werden verteilt, um verfügbare Ressourcen bekannt
zu machen und sie somit auffinden zu können. Jedes Advertisement hat eine bestimmte
15
„Lebenszeit“, die eine Angabe über die Dauer der Verfügbarkeit einer entsprechenden
Ressource macht. JXTA definiert nur ein Basis-Set an Advertisements. Neue Subtypen
können mit Hilfe der Basistypen und unter Zuhilfenahme der XML Notation definiert
werden.
Die JXTA Protokolle definieren folgende Core Advertisements:
Peer Advertisement, Peer Group Advertisement, Pipe Advertisement, Module
Advertisement,
Peer
Info
Advertisement,
Content
Advertisement,
Rendezvous
Advertisement
— Messages
Messages sind in JXTA die Grundform für den Datenaustausch zwischen den Peers. Es
gibt je nach Einsatzzweck zwei verschiedene Formen für die Darstellung einer
Messsage:
-
Binär: kompakte Form
-
XML: sprachenunabhängig und selbstbeschreibend
Eine Message besteht prinzipiell aus einer Hülle, einem Stapel an Protokoll-Headern
und den dazugehörigen Rümpfen (bodies). Die Hülle an sich enthält einen Header, eine
Message-ID, den Quell Endpunkt (optional) und den Ziel Endpunkt. Ein Endpunkt in
JXTA ist ein logisches Ziel, das in Form einer URI (Uniform Resource Identifier)
gegeben ist. Endpoints werden auf reale physische Adressen abgebildet, um so die
Messages zustellen zu können. Durch das so gewählte Message-Format ist es möglich,
die verschiedensten Transportstandards zu unterstützen.
Die Informationen einer Message sind in den so genannten Elements enthalten. Ein
Element ist dabei ein Name, dem ein bestimmter Inhalt zugeordnet wird. Eine Message
besteht aus einer Liste von Name/Wert Paaren. Zusätzlich enthält eine Message so
genannte Credentials, das sind Informationen, welche den Sender gegenüber dem
Empfänger identifizieren.
16
—
Identifiers
Dienen zum Eindeutigen identifizieren und lokalisieren von Peers, Peer Groups, Pipes
und anderen JXTA-Ressourcen. Zu diesem Zweck wurden in JXTA so genannte UUIDs
definiert. Eine solche UUID ist eine 128-bit ID, die es ermöglicht eine Instanz eindeutig
zu identifizieren und somit auch lokalisieren zu können. Zur Darstellung der JXTA-IDs
werden URNs (Uniform Ressource Name) eingesetzt. Eine solche ID ist eindeutig,
einzigartig (höchstwahrscheinlich), beständig und ortsunabhängig.
Ein Beispiel für eine JXTA Peer ID ist:
urn:jxta:uuid59616261646162614A78746150325033F3BC76FF13C2414CBC0AB663666DA53903
Ein Beispiel für eine JXTA Pipe ID ist:
urn:jxta:uuid59616261646162614E504720503250338E3E786229EA460DADC1A176B69B731504
— Credential
Das sind Zusatzinformationen, die einen Sender gegenüber einem Empfänger
identifizieren. Das exakte Format und der genaue Inhalt sind nicht weiter spezifiziert.
Denkbar wären z.B. eine Unterschrift, die die Originalität einer Message beweist oder
genauere Informationen zur Verschlüsselung einer Message.
— Content
Das sind jegliche Daten, die zwischen den Peers ausgetauscht werden können. Das
umfasst sowohl Code als auch Daten (Codat). Content ist eindeutig identifizierbar.
17
2.2.4.3 Core Layer - Protokolle
Damit die einzelnen Peers einer Peer Group miteinander interagieren können, müssen
sie die erforderlichen Protokolle kennen und implementiert haben. Welche Protokolle
dabei genau benötigt werden ist aus den Advertisements der Peer Groups ersichtlich. Da
alle Knoten standardmäßig der WorldPeerGroup angehören, müssen sie auch deren
Protokolle verstehen können. Diese grundlegenden Protokolle stellen die Basis von
JXTA dar und werden daher auch als Basis Protokolle betrachtet.
Die Protokolle:
-
Peer Resolver Protocol (PRP)
-
Peer Discovery Protocol (PDP)
-
Peer Information Protocol (PIP)
-
Pipe Binding Protocol (PBP)
-
Peer Endpoint Protocol (PEP)
-
Rendezvous Protocol (RVP)
— Peer Resolver Protocol
Das Peer Resolver Protocol (PRP) ermöglicht es einem Peer durch das Senden und
Empfangen von allgemeinen Anfragen nach weiteren Peers, Peer Groups, Pipes und
anderen Informationen zu suchen. Eine Anfrage kann dabei an einen bestimmten Peer
oder an einen Rendezvous Peers gesendet werden. Der Rendezvous Peer übernimmt
dann die Verteilung der Anfrage auf die Mitglieder einer Peer Group. PDP und PIP
nutzen beide das PRP, jedoch sind die Anfragen bzw. Antworten dieser beiden
Protokolle spezifischer. So werden mittels PIP Statusinformationen abgefragt und PDP
wird genutzt, um Peer Ressourcen zu finden. Für die Bearbeitung der Anfragen sind so
genannte Handler zuständig. Diese können bei Bedarf von jedem Dienst registriert
werden und sind von da an für die Bearbeitung der Anfragen und für die Generierung
der entsprechenden Antworten zuständig. Üblicherweise wird dieses Protokoll nur von
Peers
implementiert,
die
Zugriff
auf
Datenspeicher
haben
und
erweiterte
Suchmöglichkeiten anbieten wollen.
18
— Peer Discovery Protocol
Mit Hilfe des Peer Discovery Protocol (PDP) kann ein Peer seine eigenen Ressourcen
bekannt machen und nach bereits veröffentlichten Ressourcen suchen. Ressourcen
werden in JXTA durch Advertisements repräsentiert, so dass mit Hilfe des PDP das
Netzwerk nach jeglichen Advertisements, die eine Ressource veröffentlicht hat,
durchsucht werden kann. Das PDP ist das standardmäßige Discovery Protocol für alle
selbst definierten Peer Groups und der WorldPeerGroup. Es ist natürlich jederzeit
möglich, einen eigenen Peer Discovery Service zu implementieren und ihn der Peer
Group zur Verfügung stellen. Die Java Version von JXTA verwendet für die Erkundung
eine Kombination aus IP Multicasts in einem lokalen Subnetz (Broadcast im LAN) und
Rendezvous Peers im WAN.
Um ein Advertisement zu finden, erzeugt ein Peer eine Discovery Message und schickt
diese an einen Peer oder an einen Rendezvous Peer. Die Message enthält Informationen,
die den anfragenden Peer gegenüber dem Empfänger identifizieren. Der sendende Peer
erhält dann entweder eine, keine oder mehrere Antwort-Messages.
— Peer Information Protocol
Ein Peer kann mit Hilfe des Peer Information Protocol (PIP) die Fähigkeiten und den
Status eines anderen Peers abfragen. Mittels PIP ist es z.B. möglich, Informationen über
die Erreichbarkeit und die Auslastung eines Peers zu gewinnen. Die Erreichbarkeit kann
mittels der so genannten PIP Ping Message abgefragt werden. Es ist dann von der
genauen Ping Message abhängig, ob man nur ein alive, uptime oder aber ein
vollständiges Advertisement als Antwort zurückbekommt. Dieses Protokoll wird
überwiegend beim Peer Monitoring eingesetzt.
— Pipe Binding Protocol
Das Pipe Binding Protocol (PBP) dient zum Aufbau von Pipes. Mittels des PBP kann
ein Peer die zwei oder mehr Enden einer Pipe, die zu einer Verbindung gehören, mit
einem physischen Peer Endpoint verbinden. Eine Pipe kann hierbei als eine abstrakte,
mit einem Namen versehene Message Warteschlange angesehen werden, die verschiede
19
abstrakte Operationen unterstützt. Zu diesen Operationen gehören create, open, close,
delete, send und receive.
— Peer Endpoint Protocol
Das Peer Endpoint Protocol (PEP) dient zum dynamischen Finden von Routen, die das
Versenden von Messages an andere Peers ermöglichen. Das PEP definiert dafür ein Set
von Frage/Antwort Messages, um die Routing Informationen zu finden. Wenn nun ein
Peer eine Massage verschicken will und keine Informationen über die Route in seinem
lokalen Cache hat wendet er sich an einen Relay Peer. Wenn dieser die Route kennt,
gibt er als Antwort eine entsprechende Route zurück, die im Wesentlichen aus einer
Liste von Hops besteht. Auf diesem Weg kann dann die Message zum Ziel Peer
geschickt werden. Zum Einsatz kommt das PEP immer dann, wenn zwei Peers nicht
direkt miteinander verbunden sind oder nicht dasselbe Netzwerk-Transport-Protokoll
benutzen oder durch Firewalls getrennt sind. Jeder Peer der das PEP unterstützt, kann
ein Relay Peer werden. Ein solcher Peer speichert dann typischerweise Routing
Informationen.
— Rendezvous Protocol
Das Rendezvous Protocol (RVP) wird verwendet, um Messages innerhalb einer Peer
Group zu verbreiten. Ein Rendezvous Peer kann damit Messages an alle seine Klienten
und an andere ihm bekannte Rendezvous Peers weiterleiten. Das RVP ist ein simples
Protokoll, das es Peers erlaubt sich mit einem Service zu verbinden und die Verbreitung
von Messages zu kontrollieren.
Ein Peer der mit einem Rendezvous Peer verbunden ist, kann so Messages verbreiten
und verbreitete Messages empfangen. Ein unnötiges Kreisen der Messages im Netzwerk
wird verhindert, indem die Message-ID überprüft wird (loopback detection) und ein
TTL-Mechanismus zu Anwendung kommt. PRP und PBP verwenden das Rendezvous
Protocol, um ihre Messages zu verbreiten.
20
Abbildung 2.3: Project JXTA Protokolle
2.2.4.4 Der Service Layer
Der Kern von JXTA stellt lediglich die grundlegenden Funktionalitäten für ein P2PSystem zur Verfügung. Aufbauend auf dem Core Layer, also den Konzepten und
Protokollen von JXTA, definiert die JXTA-Dienstebene einen Satz von erweiterten
Funktionalitäten. Solche Dienste umfassen zum Beispiel File-Sharing, Namens- und
Suchdienste oder auch einen Indexmechanismus. Nicht zuletzt stellen die Dienste auch
allgemeingültige Funktionalitäten bereit. Einige der Dienste werden von SUN und der
JXTA-Community bereitgestellt und weitere können von jedem selbst entwickelt
werden. An dieser Stelle sei gesagt, dass es nicht notwendig ist, dass jeder Peer alle
Dienste unterstützt.
Beispiele für bereits bestehende Dienste sind z.B. cms (Content Management System),
jxta-spaces (Shard Memory) und jxta-rmi (Remote Method Invocation).
2.2.4.5 Der Application Layer
Aufbauend auf dem JXTA-Kern und den JXTA-Diensten können letztendlich die
JXTA-Anwendungen
entwickelt
werden.
Diese
Ebene
ist
somit
die
Benutzerschnittstelle (User Interface) und ermöglicht so die Nutzung der Dienste. Die
Programme können die Vorteile einer einheitlichen Architektur und eines einheitlichen
21
Kontroll- und Transportmechanismus nutzen. Sie können damit vermutlich einfacher
und schneller entwickelt werden. Beispiele für denkbare Anwendungen wären FileSharing, Ressourcen-Sharing, Instant-Messaging, Kalender oder Terminprogramme.
Eine strikte Trennung zum Service Layer ist nicht immer möglich.
Bisher
bekannte
Anwendungen
sind
z.B.
die
JXTA-Shell,
jxAuction
(Auktionsplattform) und vop2p (Voice Over P2P).
2.2.5 JXTA Anwendungen
2.2.5.1 Die JXTA-Shell1
Fester Bestandteil der JXTA-Architektur ist die JXTA-Shell. Diese stellt für Entwickler
und Anwender ein Hilfsmittel bereit, um sich mit den Möglichkeiten des Systems
vertraut zu machen. Es ist damit möglich, die Umgebung gezielt zu beeinflussen bzw.
zu kontrollieren. Die Shell an sich ist ein zeilenorientierter Kommandointerpreter
(Konsole), der es erlaubt, direkt mit der JXTA Plattform zu interagieren. Es sind
Kommandos für die verschiedensten Aufgaben enthalten, so z.B. zum Erstellen von
Advertisements, um Skripte auszuführen oder auch um mit anderen Peers
kommunizieren zu können. Die Shell kann beliebig um weitere Kommandos erweitert
werden.
2.2.5.2 myJxta2
Dient überwiegend zur Demonstration der Möglichkeiten von JXTA. Mit dieser
Anwendung wird ein leichtes navigieren im JXTA-Netzwerk ermöglicht. Bestandteile
der Anwendung sind Instant-Messaging, File-Sharing und Secure-Chat.
1
http://shell.jxta.org
http://myjxta.jxta.org
2
22
3.
Stand der Technik
Derzeit gibt es verschiedene File-Sharing-Anwendungen im Internet, die parallel
existieren und genutzt werden. Zu den Bekanntesten zählen Morpheus, KaZaA,
eMule, eDonky2000 und BearShare. Als Grundlage nutzen diese das
FastTrack-Netzwerk, das Gnutella-Protokoll oder eigene Protokolle. Weitere
Vertreter mit erweiterten Ansätzen, die über das bloße File-Sharing hinausgehen sind
z.B. Freenet und MojoNation. Die Mehrzahl dieser Anwendungen ist in C/C++
oder Java programmiert und für Windows-Umgebungen und zunehmend auch für
Einsatz unter Linux vorgesehen.
Projekte, die auf die Kombination von JXTA & Java setzen, gibt es kaum. Als
einer der wenigen Vertreter wäre die Anwendung Jnushare1 zu nennen, die aber noch
keine besondere Verbreitung gefunden hat. Die wesentlichen Bestandteile der
Anwendung sind JXTA, GISP2 und CMS3 und sie wurde mittels Java programmiert.
GISP und CMS sind JXTA-Services und als offizielle Projekte auf der JXTAHompage4 zu finden. CMS dient bei diesem Projekt lediglich zum Dateiaustausch und
GISP ist für die Suche nach Dateien verantwortlich. Bei der Implementierung des P2PSystems im Rahmen dieser Arbeit wird hauptsächlich JXTA und CMS zum Einsatz
kommen und um Aspekte der Gruppenverwaltung erweitert werden. Die Suche wird
mittels CMS geschehen.
Ein weiters aktuelles und interessantes Projekt bei dem JXTA im großem
Rahmen zum Einsatz kommt, wurde vom DFN5 (Deutsches-Forschungs-Netz) ins
Leben gerufen. Der Name des Projektes ist Science-To-Science6 (S2S). Dabei
handelt es sich um eine Kombination aus einem P2P-Netzwerk und einer
leistungsfähigen Suchmaschine. Es wird damit es möglich sein, nach wissenschaftlichen
Dokumenten zu suchen und diese auszutauschen. Das System wird auch die Suche nach
Metadaten unterstützen.
1
4
2
5
http://jnushare.jxta.org
http://gisp.jxta.org
3
http://cms.jxta.org
http://www.jxta.org
http://www.dfn.de
6
http://s2s.neofonie.de
23
4.
Die prototypische Implementierung des P2PSystems
Der Inhalt dieser Arbeit setzt sich zusammen aus der Analyse von JXTA und der
konkreten Implementierung eines P2P-Systems unter Nutzung von JXTA. Der erste Teil
der Aufgabenstellung wurde bereits im zweiten Kapitel ausführlich behandelt. Thema
dieses Kapitels wird daher der Entwurf und die konkrete Umsetzung des P2P-Systems
sein.
4.1
Entwurf
Das Haupteinsatzgebiet des P2P-Systems soll der File-Sharing-Bereich sein, d.h. es
wird primär um die Suche und den Austausch von Dateien zwischen den einzelnen
Teilnehmern des Netzwerks gehen. Bei der Umsetzung des Systems werden Teile des
von JXTA bereitgestellten Funktionsumfangs zum Einsatz kommen und neu
miteinander kombiniert werden. Am Ende der Arbeit sollte es dann möglich sein,
Aussagen über Vorteile bzw. Nachteile bei der Anwendungsentwicklung mit JXTA
machen zu können.
Bei der Entscheidung der Programmiersprache fiel die Wahl auf Java. Der
entscheidende
Grund
dafür
war,
dass
es
bereits
eine
sehr
ausgereifte
Referenzimplementierung von JXTA für diese Sprache gibt. An dieser Stelle sei
erwähnt,
dass
es
noch
weitere
Umsetzungen
von
JXTA
für
andere
Programmiersprachen gibt. Stellvertretend seien hier C/C++, Perl und Python genannt.
Alle diese Umsetzungen weisen jedoch noch nicht den Entwicklungsstand der JavaReferenzimplementierung auf. Ein weiterer Grund für den Einsatz von Java liegt in der
Natur von Java selbst. Denn ein unter Java entwickelter Klient ist problemlos auf den
verschiedensten Betriebssystemen lauffähig, wenn diese über eine Java-Unterstützung
verfügen. Dies ist bei aktuellen Betriebssystemen so gut wie immer der Fall. So war es
z.B. während der Implementierungsphase problemlos möglich, den Klienten auf einem
Windows-System zu entwickeln und später in einer Netzwerkumgebung zu testen, die
überwiegend aus Linux- und Unix-Maschinen bestand.
24
Um den Einsatzbereich des Klienten möglicht groß zu gestalteten, wurde er
derart entworfen, dass er sowohl in einer fensterbasierten als auch in einer fensterlosen
Umgebung lauffähig ist. Die Bedienung geschieht im fensterlosen Modus durch die
Konsole, mit der Einschränkung, dass nur die wesentlichsten Funktionen der
Anwendung verfügbar sind. Ein Vorteil dieses Modus ist, dass es z.B. möglich wird
sich per Telnet oder SSH auf einer Maschine einzuwählen und dann den Klienten zu
starten, zu konfigurieren und zu bedienen.
Weitere Überlegungen, die in dieser Phase notwendig waren, betreffen die
Struktur des Netzwerks, die von den Peers geschaffen wird. In der jetzigen Form
handelt es sich dabei um eine flache Struktur. Das bedeutet, dass alle Teilnehmer am
Netzwerk gleichberechtigt sind und alle dieselben Aufgaben und Funktionen
übernehmen bzw. anbieten. Neuere Konzepte bei der Organisation der Peers wie z.B.
das Superpeer-Konzept haben keinen Eingang in den Entwurf gefunden. Der
Hauptbeweggrund für diese Entscheidung war, dass das eingesetzte und bereits
bestehende Content Management System (CMS) diese Form der Strukturierung nicht
unterstützt. Das CMS ist ein Projekt der JXTA-Community und lässt sich problemlos in
die JXTA-Umgebung einbinden.
Ein weiter Aspekt der den Entwurf beeinflusste, war die Organisation der Peers
innerhalb des JXTA-Netzwerks, als eine eigenständige und abgeschlossene Gruppe. Das
Gruppenkonzept
ist
ein
zentraler
Bestandteil
von
JXTA
und
wurde
im
Grundlagenkapitel schon genauer erläutert. Die wichtigste Eigenschaft in diesem
Zusammenhang ist, dass potentielle Teilnehmer die neue Gruppe nur mit dem
entsprechenden Login und Passwort betreten dürfen.
Ein weiteres Ziel dieser Arbeit ist es, den Einsatz von JXTA ganz allgemein zu
erproben. Zu diesem Zweck wurden einige Funktionen vorgesehen, die z.B. das Suchen
nach Peers & Groups sowie das Sammeln von Informationen unterstützen. Das ist z.B.
dann sinnvoll, wenn man die Erreichbarkeit von Peers testen will, die durch
Hindernisse, wie etwa eine Firewall, nicht direkt erreichbar sind. Auch auftretende
Ereignisse, wie das korrekte Absetzen bzw. Eintreffen von Suchanfragen lassen sich
damit besser nachvollziehen.
Die Hauptfunktion des zu entwickelnden Klienten besteht im Austauschen und
Finden von Dateien. Alle Teilnehmer der Gruppe haben dabei die Möglichkeit Dateien
freizugeben und verfügbare Dateien anzufordern.
25
4.2
Implementierung
In diesem Abschnitt geht es um die konkrete Implementierung des P2P-Systems mit den
im Entwurf vorgesehen Aufgaben und Eigenschaften. Zu diesem Zweck wird ein
Überblick über die definierten Klassen und deren Aufgaben gegeben. Anhand der
einzelnen Klassen wird dann genauer erläutert, wie die einzelnen Anforderungen
umgesetzt wurden.
4.2.1 Die Hauptklasse (TestApp.java)
Diese Klasse ist die Hauptklasse der Anwendung. Sie dient zum Starten und
Initialisieren
der
Anwendung.
Sie
enthält
Methoden
zur
Auswertung
der
Konsolenparameter und -befehle, so dass das Programm im fensterlosen Modus
gestartet, bedient und konfiguriert werden kann.
Eine wichtige Aufgabe dieser Klasse ist die Konfiguration des JXTA-Peers.
Generell sind dafür zwei mögliche Wege vorgesehen. Die erste Möglichkeit besteht
darin, den JXTA eigenen Konfigurationsdialog aufzurufen (Abbildung 4.1). Mit diesem
Dialogfenster können alle wichtigen Einstellungen vorgenommen werden, damit der
Peer in der gewünschten Weise arbeitet. Dazu gehören unter anderem der Peer-Name,
die Verbindungseinstellungen, Rendezvous- bzw. Relay-Einstellungen sowie die
Angaben über den Login und das Passwort für den Peer allgemein. Jeder JXTA-Peer
verfügt über ein solches Login und Passwort, um ihn vor ungewolltem Zugriff besser zu
schützen. Die zweite Möglichkeit den Peer zu konfigurieren besteht darin, die
gewünschten Einstellungen in einer Datei einzutragen und diese Datei dem Programm
beim Start zu übergeben. Diese Form der Konfiguration ist unter anderem dann
sinnvoll, wenn der Klient auf einem System laufen soll, das über keine
Fensterunterstützung verfügt und somit der JXTA-Standard-Konfigurationsdialog nicht
verfügbar ist.
Nachdem der JXTA-Peer mit Hilfe von einer der beiden oben vorgestellten
Möglichkeiten konfiguriert wurde, werden die vorgenommenen Einstellungen
automatisch gesichert.
26
Abbildung 4.1: Der JXTA-Konfigurationsdialog
Zu diesem Zweck wird dazu von JXTA im JXTA-Home-Verzeichnis die in Abbildung
4.2 dargestellte Struktur aus Dateien und Ordnern angelegt. Der Order „cm“ dient dazu,
alle empfangenen oder erstellten Advertisements zu speichern. Diese Informationen
werden bei neueren JXTA-Versionen um zusätzliche Indextabellen ergänzt, die eine
verbesserte
Verwaltung
gewährleisten.
Der
Ordner
„pse“
enthält
sämtliche
Sicherheitseinstellungen des Peers. Das ist z.B. der Peer-Login und das verschlüsselt
gespeicherte Peer-Passwort. Die Datei „jxta.properties“ enthält einige JXTA-interne
Einstellungen. Die eigentliche Konfiguration wird letztendlich in der Datei
„PlatformConfig“ gespeichert. Diese Datei liegt im XML Format vor und kann bei
Bedarf von Hand editiert werden.
/.jxta
|-------- - /cm
|--------- /pse
|--------- jxta.properties
|--------- PlatformConfig
Abbildung 4.2: Verzeichnisstruktur die durch JXTA angelegt wird
27
Eine weitere Aufgabe dieser Klasse ist die Initialisierung der Anwendung. Dazu
gehört das Starten der JXTA-Plattform und der NetPeerGroup, als Grundlage für alle
weiteren Aktivitäten. Es werden außerdem das Content Management System und der
Group Manager gestartet. Diese beiden Komponenten werden im Rahmen ihrer
Klassenbeschreibung noch genauer erläutert. Es wird während der Initialisierung auch
der bereits oben erwähnte Ordner „cm“ samt Inhalt gelöscht, da es damit immer wieder
zu Problemen mit veralteten Advertisements von Peers, Groups und anderem Content
kam. Dieses Problem tritt verstärkt bei besonders kurzen Laufzeiten von Peers auf und
wird mit wachsender Dauer geringer. Das liegt daran, dass dann das JXTA-eigene
System die Verwaltung der Advertisements übernimmt. Die dazu notwendigen
Aktualisierungsinformationen
werden
von
JXTA
an
Hand
der
eingestellten
Lebensdauer der Advertisements bestimmt. Eine solche Lebensdauer kann für jedes
Advertisement einzeln vergeben werden.
Eine weitere Aufgabe dieser Klasse ist es, die programmeigene Einstellungsdatei
(„testapp_pref.txt“) zu laden und zu speichern. In dieser Datei sind unter anderem die
Informationen zum Download- und Freigabeverzeichnis abgelegt. Auch die Logins und
Passwörter für den Peer und die Peer Group können mit dieser Datei eingestellt werden.
4.2.2 Das Content Management System (CMSystem.java)
Das CMS ist die Grundlage für die Realisierung der File-Sharing-Funktionalität der
Anwendung. Beim CMS handelt es sich um einen einfachen Service von JXTA, der
wiederum selbst auf anderen JXTA Services aufsetzt. Aus diesem Grund werden in der
folgenden Beschreibung die Grundlagen des CMS etwas genauer erläutert und dann
beschrieben, wie der Service in dieser Arbeit genutzt wird.
Das CMS ist ein Service mit dem Dateien zwischen den Peers einer Gruppe
geteilt werden können. Der Service bietet die Möglichkeit Dateien anzubieten, zu
suchen bzw. zu finden und letztendlich die angeforderten Dateien von anderen Peers zu
empfangen. Beim CMS handelt es sich in der jetzigen Form noch um einen sehr
einfachen Service mit begrenztem Funktionsumfang. So verfügt das CMS über keinen
ausgereiften Suchmechanismus und auch die Verteilung bzw. Erreichbarkeit der Daten
ist in keinster Weise zuverlässig.
28
Für zukünftige Versionen ist es deshalb angedacht, die CMS-Suche durch die
deutlich leistungsfähigere Suche des Projektes „JXTA Search“ zu ersetzen. „JXTA
Search“ ist ein weiteres Projekt der JXTA-Community und ist auf der Homepage von
JXTA zu finden. Es ist weiterhin geplant, den Datentransfer deutlich zu verbessern, da
dieser bisher sehr simpel gehalten ist. So fehlen z.B. Funktionen um abgebrochene
Downloads wieder aufzunehmen oder eine Datei von mehreren Quellen (gleichzeitig)
zu laden.
Der folgende Abschnitt wird sich etwas genauer mit der Arbeitsweise und der
Funktion des CMS befassen. So ist es beispielsweise eine der ersten Aktionen beim
Starten des CMS, dass ein Verzeichnis mit dauerhaften Informationen eingelesen wird.
Sollte dieses Verzeichnis noch nicht vorhanden sein, so wird es neu erstellt. Dieses
Verzeichnis enthält Informationen über eigene Freigaben, sowie Angaben über bereits
empfangene Informationen und über Freigaben von anderen Peers. Das Verzeichnis
wird
dann
einem
so
genannten
ContentManager
übergeben.
Der
ContentManager ist ein wichtiger Bestandteil des CMS und übernimmt die weitere
Verwaltung der Freigabeinformationen. Seine Aufgabe ist es dann, auf Anfragen von
anderen Peers zu warten. Die eintreffenden Suchanfragen (Requests) werden so
automatisch durch den ContentManager verarbeitet.
Beim CMS kann im Wesentlichen zwischen zwei Request-Typen unterschieden
werden: Den so genannten LIST-Requests und den GET-Requests. Ein LIST-Request
wird abgesetzt, um eine Liste mit allen Freigaben eines Peers zu bekommen. Die
Antwort auf einen solchen Request enthält die Content-Advertisements von dem
gesamten Content, der freigegeben wurde. Der GET-Request wird verwendet, um einen
bestimmten Content anzufordern. Ein solcher Request enthält einen Content-Identifier,
um den gewünschten Content eindeutig bestimmen zu können. Die entsprechende
Antwort enthält dann die aktuellen Daten des angeforderten Content.
Im weiteren Teil zur Beschreibung dieser Klasse wird es nun um den konkreten Einsatz
des CMS gehen. Eine der ersten Methoden dieser Klasse dient dazu, den Service zu
starten und ihn somit nutzen zu können. Wie bereits oben beschrieben, wird nach dem
Starten des Service ein Verzeichnis angelegt, in dem die dauerhaften Informationen
über die freigegeben Dateien abgelegt werden. Das Verzeichnis selbst enthält wiederum
Unterverzeichnisse für alle Gruppen, in denen der Peer Mitglied ist. Die
Freigabeinformationen werden so gruppenweise gespeichert. Die Klasse enthält
29
weiterhin eine Methode, mit der ein Verzeichnis mit Dateien für die Peer Group
freigegeben werden kann. Diese Methode übergibt das Freigabeverzeichnis an den
ContentManager, der dann wieder die weitere Verwaltung übernimmt. Das
Verzeichnis wird rekursiv durchlaufen, so dass eventuelle weitere Verzeichnisse mit
Dateien erfasst werden können.
Zwei weitere Methoden sind für die Suche und den Download der Dateien
verantwortlich. Diese funktionieren im Wesentlichen nach den bereits erwähnten LISTund GET-Requests.
Bei einer konkreten Suche nutzt der CMS bisher nur den Namen einer Datei und
bietet keine erweiterten Möglichkeiten, wie etwa nach der eindeutigen ContentID zu
suchen. Dieses Manko wird etwas dadurch entschärft, dass es die Möglichkeit gibt, auch
nach Teilstrings zu suchen. Das ist immer dann sinnvoll, wenn der vollständige Name
einer Datei nicht genau bekannt ist. Eine weitere Möglichkeit der einfachen Suche
besteht bei lokalen Advertisements. Diese können mittels eines ContentFilter
nach den gewünschten Kriterien durchsucht werden. Der ContentFilter ist ein
Bestandteil des CMS und kommt bei dieser Arbeit nicht zum Einsatz.
Ein weiterer Bestandteil der Klasse sind Subklassen für die Bearbeitung der
LIST- und GET-Requests. Sie sind daher eng mit den Methoden für die Suche bzw. den
Download der Dateien verknüpft. Sie sind dafür verantwortlich, den CMS betreffende
Meldungen zu erfassen und auszuwerten. So werden z.B. eingehende Suchanfragen
registriert und Antworten auf selbst gesendete Anfragen angezeigt. Es lässt sich auch
der Fortschritt bei der Übertragung einer angeforderten Datei ablesen, was von Vorteil
sein kann, wenn diese sehr groß ist.
An
dieser
Stelle
noch
ein
kurzer
Hinweis
zum
Verhalten
des
ContentManagers. Dies betrifft eventuelle längere Wartezeiten, wenn ein
Verzeichnis mit Freigaben das erste Mal an diesen übergeben wurde oder aber der
Inhalt des Verzeichnisses geändert wurde. Diese Wartezeiten resultieren daraus, dass
der ContentManager für jede Datei die eindeutige ContentID, eine MD5Checksumme berechnet. Die Bestimmung dieser ID kann bei größeren Dateien eine
gewisse Zeit dauern, abhängig von der vorhandenen Rechenkraft und Auslastung eines
Peers.
30
4.2.3 Der Group Manager (GroupManager.java)
Die Aufgabe dieser Klasse ist es, die geplante Gruppenverwaltung zu realisieren. Dazu
gehören Methoden zum Anlegen der Gruppe, die Möglichkeit die Gruppe zu betreten
bzw. wieder zu verlassen und die Authentifizierung der Peers.
Eine Entscheidung die im Zusammenhang mit der Erstellung der neuen Gruppe
getroffen wurde, ist, dass die Gruppe eine eindeutige Identifizierung braucht. Das
Problem hierbei ist, dass JXTA standardmäßig bei jedem Erstellen einer Gruppe nur
eine temporär eindeutige ID vergibt, d.h. bei jedem Starten der Anwendung würde sich
die Gruppen-ID ändern. Aus diesem Grund wird die Gruppen-ID statisch vergeben. Die
vergebene Gruppen-ID lautet: jxta:uuid-4d6172676572696e204272756e6f202002.
Eine der wichtigsten Aufgaben der Klasse ist die Realisierung der Authentifizierung,
die dafür sorgt, dass nur dafür vorgesehene Peers die Gruppe betreten dürfen. Eine
Standardgruppe unter JXTA stellte einen solchen Mechanismus nicht zur Verfügung, so
dass dieser nachträglich integriert werden musste. Im Folgenden wird es also
hauptsächlich um das Vorgehen beim Erstellen der Gruppe und die Implementierung
der Authentifizierung gehen.
Ganz allgemein handelt es sich bei der Anmeldung bzw. Mitgliedschaft einer
Gruppe um einen Service, den die Gruppe bereitstellt. Damit für die neue Gruppe nicht
alle Standardservices einer JXTA-Gruppe neu erstellt werden müssen, ist es sinnvoll,
diese von der NetPeerGroup zu übernehmen. Die NetPeerGroup ist dafür besonders
geeignet, da diese Gruppe in JXTA die Grundlage für alle weiteren Gruppen ist.
Nachdem die Services übernommen wurden besteht der nächste Schritt darin, die Liste
der Services zu Durchlaufen und den bestehenden Service für die Mitgliedschaft zu
entfernen.
Bei
JXTA
ist
das
standardmäßig
der
so
genannte
NullMembershipService, der keine weitere Authentifizierung der Peers verlangt.
Die Stelle des entfernten Services kann dann der neue Membership-Service einnehmen.
Um die Entwicklung eines solchen Services zu erleichtern, ist bei JXTA bereits ein sehr
einfacher, auf Login und Passwort basierender Membership-Service in der
Referenzeimplementierung vorgesehen. Dieser Service wird bei der hier vorliegenden
Arbeit
auch
zum
Einsatz
kommen.
Der
Name
des
Services
lautet
PasswdMembershipService. Dabei ist anzumerken, dass dieser Service nur zur
31
Veranschaulichung dient und keine wirkliche Zugangssicherheit zur Gruppe bietet. Das
liegt vor allem daran, da das Verschlüsselungsschema, welches bei der Kodierung des
Passworts zum Einsatz kommt, recht einfach gehalten ist. Das so verschlüsselte
Passwort, welches in jedem GroupAdvertisement mitgeschickt wird, ist nicht
mehr geheim zu halten. Es ist aber durchaus vorstellbar, an dieser Stelle eine sichere
Verschlüsselung
des
Passworts
zu
gewährleisten,
wenn
die
JXTA-eigenen
Verschlüsselungsbibliotheken zum Einsatz kommen.
Bei der realen Implementierung werden die Services in Form von
Advertisements verwaltet. Um das weitere Vorgehen beim Erstellen der Gruppe zu
erläutern, werden die nächsten Schritte an Hand dieser Advertisements gezeigt, da diese
sehr anschaulich gehalten sind.
Nachdem also das Advertisement für den Membership-Service ausgetauscht
wurde, muss das vollständige Advertisement, welches alle Services der Gruppe enthält,
noch verbreitet werden. Bei diesem neuen Advertisement handelt es sich um ein so
genanntes ModuleImplAdvertisement, welches in JXTA eine veröffentlichte
Implementation einer gegebenen Spezifikation darstellt - d.h. damit werden angebotene
Services für potentielle Teilnehmer bekannt gemacht. Zur besseren Veranschaulichung
sind die oben beschrieben Advertisements in Abbildung 4.3 & Abbildung 4.4 noch
einmal in ihrer XML-Notation angegeben. Diese Notation entspricht gleichzeitig der
Form, mit der die Advertisements im JXTA-Netzwerk ausgetaucht werden.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jxta:MIA>
gekürzt!
<jxta:MIA xmlns:jxta="http://jxta.org">
<MSID>
urn:jxta:uuid-DEADBEEFDEAFBABAFEEDBABE000000050206
</MSID>
<Code>
net.jxta.impl.membership.PasswdMembershipService
</Code>
<PURI>
http://www.jxta.org/download/jxta.jar
</PURI>
<Prov>
sun.com
</Prov>
<Desc>
ModuleImplAdvertisement for the PasswdMembership Service
</Desc>
</jxta:MIA>
Abbildung 4.3: Advertisement des neuen Membership-Service (moduleAdv)
32
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jxta:MIA>
gekürzt!
<jxta:MIA xmlns:jxta="http://jxta.org">
<Code> net.jxta.impl.peergroup.StdPeerGroup </Code>
<Desc> General Purpose Peer Group Implementation </Desc>
<Parm>
<Svc>
<Code> net.jxta.impl.access.always.AlwaysAccessService </Code>
<Desc> Reference Implementation of the Always Access service <Desc>
<Code> net.jxta.impl.rendezvous.RendezVousServiceImpl </Code>
<Desc> Reference Implementation of the Rendezvous service <Desc>
<Code> net.jxta.impl.membership.PasswdMembershipService </Code>
<Desc> ModuleImplAdvertisement for the PasswdMembership Service <Desc>
<Code> net.jxta.impl.endpoint.EndpointServiceImpl </Code>
<Desc> Reference Implementation of the Endpoint service <Desc>
<Code> net.jxta.impl.discovery.DiscoveryServiceImpl </Code>
<Desc> Reference Implementation of the Discovery service <Desc>
<Code> net.jxta.impl.peer.PeerInfoServiceImpl </Code>
<Desc> Reference Implementation of the Peerinfo service <Desc>
<Code> net.jxta.impl.resolver.ResolverServiceImpl </Code>
<Desc> Reference Implementation of the Resolver service <Desc>
<Code> net.jxta.impl.pipe.PipeServiceImpl </Code>
<Desc> Reference Implementation of the Pipe service <Desc>
</Svc>
<App>
...
</App>
</Parm>
</jxta:MIA>
Abbildung 4.4: Advertisement mit allen Services der Gruppe (ModuleImplAdv)
Der nächste Schritt beim Erzeugen der Gruppe besteht darin, ein
PeerGroupAdvertisement zu erstellen. Ein solches Advertisement enthält die
wichtige GroupID, den Namen der Gruppe und eine kurze Beschreibung. Zusätzlich
wird bei diesem Advertisement noch die Information für den Membership-Service
angehangen. Diese Information ist wie zu erwarten, der Login und das in verschlüsselter
Form abgelegte Passwort. Das so erweiterte PeerGroupAdvertisement (Abbildung
4.5) muss dann wiederum verbreitet werden, damit Peers die Möglichkeit haben die
Gruppe zu finden und ihr beizutreten.
33
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jxta:PGA>
<jxta:PGA xmlns:jxta="http://jxta.org">
<GID>
urn:jxta:uuid-4D6172676572696E204272756E6F202002
</GID>
<MSID>
urn:jxta:uuid-DEADBEEFDEAFBABAFEEDBABE000000010406
</MSID>
<Name>
SecureGroup
</Name>
<Desc>
SecureGroup -> Mit Login/Password - MembershipService
</Desc>
<Svc>
<MCID>
urn:jxta:uuid-DEADBEEFDEAFBABAFEEDBABE0000000505
</MCID>
<Parm>
<login>
login:SWPPDJFA:
</login>
</Parm>
</Svc>
</jxta:PGA>
Abbildung 4.5: Das PeerGroupAdvertisement (pgAdv)
Die Klasse enthält neben der Methode zum Erstellen der Gruppe eine zweite wichtige
Methode. Diese Methode regelt den Ablauf, mit dem der Gruppe beigetreten werden
kann. Der Vorgang beim Beitritt kann in drei Schritte unterteilt werden. Der erste
Schritt besteht darin, die Methode applyToMembershipService aufzurufen, um
die Aufnahme in den Membership-Service zu beantragen. Das Ergebnis dieser Methode
wird an einen „Authenticator“ übergeben. Im zweiten Schritt wird mit diesem
Authenticator die Methode completeAuth aufgerufen und damit die Richtigkeit des
Logins und des Passworts überprüft. Am Ende dieser Überprüfung wird eine
Rückmeldung über den Erfolg bzw. Misserfolg ausgegeben. Der letzte Schritt nach
einer erfolgreichen Prüfung besteht darin, die Methode joinMembershipService
aufzurufen und so dem Membership-Service beizutreten. Die Folge dieses Aufrufs ist
dann die ordnungsgemäße Mitgliedschaft in der Gruppe.
34
4.2.4 Informationen zum Netzwerk (NetworkInfo.java)
Zusätzlich zur reinen Erstellung des P2P-Systems ist es ein weiteres Ziel dieser Arbeit,
JXTA und dessen Funktionsweise etwas genauer zu analysieren. Um sinnvolle
Informationen über das JXTA-Netzwerk sammeln zu können, wurde die Klasse
„NetworkInfo“ implementiert. Sie enthält bislang nur die Möglichkeit nach Peers und
Groups zu suchen. Zu Peers und Groups, die mit dieser Suchfunktion gefunden wurden,
lassen sich genauere Informationen abrufen. Dazu gehören z.B. die eindeutige ID, eine
kurze Beschreibung und der Name.
Eine andere Methode der Klasse dient dazu, den lokalen Cache zu leeren. Dieser
enthält alle empfangenen Advertisements zu bereits gefundenen Peers und Peer Groups.
Die Notwendigkeit solche Advertisements löschen zu können, entstand daraus, dass es
immer wieder zu Problemen mit nicht mehr aktuellen Daten kam. So konnte es z.B.
durchaus passieren, dass einige Peers noch angezeigt wurden, obwohl sie das Netzwerk
schon längere Zeit verlassen hatten.
4.2.5 Hilfsklasse (Utility.java)
Diese Klasse enthält einige wenige Methoden, die programminterne Aufgaben lösen.
Das sind z.B. das Festlegen der Fenstergröße der Anwendung und die Positionierung
auf dem Desktop. Es ist auch eine Subklasse enthalten, die zum korrekten Beenden der
Anwendung dient.
4.2.6 Die graphische Benutzerschnittstelle (GUI.java)
Der Zweck dieser Klasse lässt sich leicht aus dem Namen erschließen. Die Aufgabe
dieser Klasse ist somit die Realisierung der grafischen Schnittstelle zum Programm. Die
dort vereinbarten Methoden werden also immer dann benötigt, wenn das Programm im
Fenstermodus betrieben werden soll. Die Dialogelemente werden mittels der JavaSwing-Komponenten erzeugt.
35
Abbildung 4.6: Das graphische Interface der Anwendung
4.3
Probleme während der Umsetzung des Entwurfs
Einige der Schwierigkeiten dieser Arbeit entstanden beim Wechsel der eingesetzten
JXTA-Version. Es kam zu diesen Problemen, weil zu Beginn des Entwurfs und zu
Testzwecken eine JXTA-Version vom Juli 2002 zum Einsatz kam und es im Verlauf der
Implementierung notwendig wurde, auf eine aktuellere Version umzusteigen. Mit der
neuen Version war es dann möglich, alle Funktionen zu integrieren, die im Entwurf
vorgesehen waren. Eine der Änderung betraf z.B. das Erstellen der JXTA-Einstellungen
mit Hilfe der Konfigurationsdatei im fensterlosen Modus, dass in dieser Form nicht in
der alten Version vorgesehen war. Beim Versionswechsel kam es zu auch zu Problemen
mit anderen JXTA-Funktionen, die durch Änderungen an JXTA allgemein verursacht
wurden. Das umfasst Namensänderungen von Konstanten und Variablen sowie
Änderungen bei der Übergabe von Parametern an bestimmte Methoden. Diese
Änderungen an JXTA sind aber nicht als Nachteil zu werten, da JXTA so ständig
weiterentwickelt und verbessert wird. Diese Modifikationen sind somit als vorteilhaft
für den Entwickler einzuschätzen.
36
An dieser Stelle möchte ich auch auf darauf hinweisen, dass JXTA das sehr
verbreitete CVS-Konzept vollständig unterstützt. Damit war es zum Beispiel in relativ
kurzer Zeit möglich, den oben beschrieben Problemen auf den Grund zu gehen und
diese zu beheben. Sämtliche Quellcodes von JXTA und viele der JXTA-Projekte
werden mittels CVS verwaltet. Diese Tatsache und der sehr gut nutzbaren CVSFunktionen auf der JXTA-Hompage sind geeignete Mittel, um Änderungen im
Quellcode von JXTA nachzuvollziehen und das eigene Programm entsprechend
anzupassen.
5.
Fazit
Das wesentliche Ziel dieser Arbeit bestand im Erstellen eines P2P-Systems mit Hilfe
von JXTA. Dabei sollten die Vorteile von JXTA genutzt werden und eventuelle
Nachteile aufgezeigt werden. Zum Abschluss dieser Arbeit kann man sagen, das JXTA
eine solide Grundlage für die Entwicklung von P2P-Systemen ist. Es besitzt einen
großen Funktionsumfang und eine gute Dokumentation. Zudem erfährt es eine ständige
Weiterentwickelung, Erweiterung und Verbesserung. Die Erleichterung beim Umgang
mit dem zugrunde liegenden Netzwerk ist durchaus vorhanden und es konnte mehr
Augenmerk auf die Realisierung der eigentlichen Funktion der Anwendung gelegt
werden. Dazu war es natürlich notwendig, sich zu Beginn der Arbeit intensiv mit JXTA
und seinen Bestandteilen auseinander zusetzen, um die bestehenden Möglichkeiten auch
nutzen zu können. Die Frage mit der tatsächlichen Interoperabilität lässt sich nicht
eindeutig beantworten. Das liegt daran, dass die verschiedenen Anwendungen zwar
JXTA nutzen können aber für spezielle Dienste entsprechend vorbereitet werden
müssen und so nur über grundlegende gemeinsame Funktionen verfügen. Das zweite
wesentliche Ziel von JXTA, die Plattformunabhängigkeit, kann bei dieser Arbeit als
erreicht angesehen werden.
37
6.
Abkürzungsverzeichnis
P2P
Peer-to-Peer
NAT Network Adress Translation
PDA Personal Digital Assistant
XML Extensible Markup Language
URI
Uniform Resource Identifier
URN Uniform Resource Name
UUID Universal Unique Identifier
TTL
Time To Live
SSH
Secure Shell
GUI
Graphical User Interface
CMS Content Management System
GISP Global Information Sharing Protocol
CVS
Concurrent Versions System
38
7.
Literaturverzeichnis
1.
JXTA Hompage
URL: http://www.jxta.org/
2.
Gong, Li (2001): JXTA: A Network Programming Environment
URL: http://www.jxta.org/project/www/docs/JXTAnetworkProgEnv.pdf
3.
Traversat, Bernard (2002): Project JXTA Virtual Network
URL:
4.
http://www.jxta.org/project/www/docs/JXTAprotocols_01nov02.pdf
Sun Microsystems, Inc.: Project JXTA: Java Programmer’s Guide
URL: http://www.jxta.org/docs/jxtaprogguide_final.pdf
5.
Baehni, Sebastien: Java User Group Switzerland: P2P-JXTA-TPS
URL:
http://lpdwww.epfl.ch/sbaehni/work/presentations/tbpsjxta/jugs.ppt
6.
Brookshier, Daniel (2002): JXTA: Java P2P Programming
7.
Wilson, Brendon (2002): JXTA
URL: http://www.brendonwilson.com/projects/jxta
8.
Project JXTA Tutorials: ProgGuideExamples
URL: http://www.jxta.org/project/www/Tutorials.html
39
A. Softwareinstallation
Systemvoraussetzungen
Da die Anwendung mit Java programmiert wurde, ist sie auf allen Betriebssystemen die
Java
unterstützen
lauffähig.
Um
einen
ungefähren
Anhaltspunkt
für
die
Systemvoraussetzungen zu bekommen, sind nachstehend die Bedingungen aufgeführt,
unter denen die Anwendung entworfen wurde:
-
PC mit einem Betriebssystem vom Typ Windows(TM)oder Linux
-
Java(TM) 2 Runtime Environment (Version 1.3.1-1.4)
Benötigte Software
Zum installieren sind folgende Dateien notwendig:
-
die JXTA-Bibliotheken
(jxta.jar, log4j.jar, jxtasecurity.jar, jxtaptls.jar,
minimalBC.jar, cryptix-asn1.jar, cryptix32.jar,
jxtacms.jar, javax.servlet.jar, org.mortbay.jetty.jar,
jxtashell.jar)
-
die Quelldateien
(CMSystem.java, GroupManager.java, GUI.java,
NetworkInfo.java, TestApp.java, Utility.java)
-
die beiden Konfigurationsdateien testapp_pref.txt und configfile.txt
-
die Dateien compileIt, jarIt und startIt
Installationsschritte
0.
Installation der Java(TM) 2 Runtime Environment.
40
1.
Ein beliebiges Verzeichnis anlegen und darin die Ordner lib, src,
classes und Cms_dirs erstellen.
2.
Im Verzeichnis Cms_dirs die Ordner Download und Share anlegen.
3.
Die JXTA-Bibliotheken (*.jar) in den lib Ordner kopieren.
4.
Die Quelldateien der Anwendung (*.java) im Ordner src ablegen.
5.
Die beiden Konfigurationsdateien testapp_pref.txt und configfile.txt
in das Verzeichnis aus Schritt eins kopieren.
6.
Die Dateien compileIt, jarIt und startIt mit den Endungen bat bzw. sh
auch in das Verzeichnis aus Schritt eins kopieren.
7.
Wenn die Verzeichnisstruktur der Schritte 1-6 eingehalten wurde, können die
drei Dateien wie folgt benutzt werden:
-
compIt: zum Kompilieren der Quelldateien
-
jarIt: zum Packen der mittels compIt erstellten Java Klassendateien
-
startIt: zum Starten der Anwendung
Sollte die Verzeichnisstruktur nicht so aussehen, wie in Schritt 1-6 vorgesehen, dann
müssen die obigen Dateien entsprechend angepasst werden, um sie nutzen zu können.
41
B.
Bedienungsanleitung
An dieser Stelle eine kurze Übersicht zu den Parametern und Befehlen mit der die
Anwendung ohne GUI gestartet, gesteuert und konfiguriert werden kann.
1.
Zum Start der Anwendung ohne GUI ist der Parameter „nowindow“ vorgesehen
und wird zu diesem Zweck wie folgt übergeben:
„java -classpath ... TestApp –nowindow“
2.
Damit die Anwendung ohne GUI bedient werden kann sind folgende Befehle
enthalten und können über die Kommandozeile eingegeben werden:
„c [ENTER]“ - zum Anzeigen der verfügbaren Befehle
„p [ENTER]“ - initiiert die Suche nach Peers
„g [ENTER]“ - initiiert die Suche nach Peer Groups
„f [ENTER]“ - leert den lokalen Advertisement-Cache
„x [ENTER]“ - beendet die Anwendung
„s "SearchString" [ENTER]“
- sucht nach Dateien, die den Inhalt des SearchString im Namen aufweisen
- ist der SearchString leer, werden alle verfügbaren Dateien gesucht
„d "FileIndex" [ENTER]“
- überträgt eine durch den FileIndex gewählte Datei
- der FileIndex einer Datei steht in eckigen Klammern am Beginn einer
Zeile, die bei einer Suche als Suchergebnis ausgegeben wird,
z.B. „[x] Ergebnis1“
3.
Damit der JXTA-Peer auch im fensterlosen Modus konfiguriert werden kann,
ist der Parameter „setconfig“ vorgesehen und wird wie folgt eingesetzt:
„java –classpath ... TestApp –setconfig „configfile.txt“ “
Die Datei configfile.txt enthält alle notwendigen Parameter, um den Peer
zu konfigurieren und muss entsprechend dem vorgesehenen Einsatzbereich
angepasst werden.
42
Herunterladen