Title: mit Java implementiert
1P2P Seminar JXTA im Detail
- mit Java implementiert
- (Java 2 Standard Edition)
Nicole Hänelt, Mike Rohland, Julia Schenk,
Rafael Grote
2P2P JXTA Überblick
- Definition
- Welche Protokolle gibt es?
- Peer Discovery Protocol API
- Peer Resolver Protocol API
- Peer Membership Protocol API
- Peer Information Protocol API
- Pipe Binding Protocol API
- Peer Endpoint Protocol API
- Beispiel
3P2P JXTA Definition
- Ein Protokoll ist ein wieder verwendbares
Verfahren um die Datenübertragung zwischen
Computern zu regeln.(JXTA Java P2P Programming
22. March 2002) - Ein Protokoll (engl. protocol) enthält Standards
für die kontrollierte Übermittlung von Daten
(www.net-lexikon.de gesehen am 14.05.2004)
4P2P JXTA Überblick
- Definition
- Welche Protokolle gibt es?
- Peer Discovery Protocol API
- Peer Resolver Protocol API
- Peer Membership Protocol API
- Peer Information Protocol API
- Pipe Binding Protocol API
- Peer Endpoint Protocol API
- Beispiel
5Welche Protokolle gibt es?
P2P JXTA Protokolle
- Grundservices, die in einem P2P-Netzwerk
ausgeführt werden können müssen - Discovery
- Membership
- Communication
- Pipe Binding Protocol
- Endpoint Protocol
- Resolver Protocol
- Peer Information Protocol
6P2P JXTA Protokolle
(JXTA Java P2P Programming 22. March 2002)
7P2P JXTA Überblick
- Definition
- Welche Protokolle gibt es?
- Peer Discovery Protocol API
- Peer Resolver Protocol API
- Peer Membership Protocol API
- Peer Information Protocol API
- Pipe Binding Protocol API
- Peer Endpoint Protocol API
- Beispiel
8P2P JXTA Peer Discovery API
Advertisements
- Dienen zur generellen Beschreibung einer jeden
Resource, - die im P2P-Netz bereitgestellt wird
- Werden in XML-Dokumente gefasst
- Es gibt keine DTDs oder Schemata für
Advertisments, es reicht wenn ein Advertisment
wohlgeformt ist
- von JXTA vorgegebene Lebensdauer
- Löschen
- flushAdvertisements( String id, int type )
throws IOException
9Peer Group Advertisement
P2P JXTA Peer Discovery API
- 1 lt?xml version"1.0"?gt
- 2 lt!DOCTYPE jxtaPGAgt
- 3 ltjxtaPGA xmlnsjxta"http//jxta.org"gt
- 4 ltGIDgt
- 5 urnjxtauuid-AAA122616461AAAAAAA1
24615032503302 - 6 lt/GIDgt
- 7 ltMSIDgt
- 8 urnjxtauuid-DEADBEEFDEAFBABAFEED
BABE000000010306 - 9 lt/MSIDgt
- 10 ltNamegt
- 11 Test
- 12 lt/Namegt
- 13 ltDescgt
- 14 Wir testen.
- 15 lt/Descgt
- 16 lt/jxtaPGAgt
10Discovery Query Message
P2P JXTA Peer Discovery API
- lt?xml version1.0 encodingUTF-8?gt
- ltjxtaDiscoveryQuerygt
- ltTypegt2lt/Typegt
- ltThresholdgt1lt/Thresholdgt
- ltAttrgtNamelt/Attrgt
- ltValuegtpaderlt/Valuegt
- ltPeerAdvgt
- lt?xml version1.0.?gt
- lt!DOCTYPE jxtaPAgt
- ltjxtaPA xmlnsjxtahttp//jxta.orggt
- ltPIDgturnjxta365738865...7424832749Clt/PIDgt
- lt/jxtaPAgt
- lt/PeerAdvgt
- lt/jxtaDiscoveryQuerygt
11Discovery Response Message
P2P JXTA Peer Discovery API
- lt?xml version1.0 encodingUTF-8?gt
- ltjxtaDiscoveryResponsegt
- ltTypegt2lt/Typegt
- ltCountgt1lt/Countgt
- ltAttrgtNamelt/Attrgt
- ltValuegtpaderlt/Valuegt
- ltPeerAdvgt
- lt?xml version1.0.?gt
- lt!DOCTYPE jxtaPAgt
- ltjxtaPA xmlnsjxtahttp//jxta.orggt
- ltPIDgturnjxta1235738865...742483DE4lt/PIDgt
- lt/jxtaPAgt
- lt/PeerAdvgt
- ltResponse Expiration36000000gt
- lt?xml version1.0?gt
- lt!DOCTYPE jxtaPipeAdvertisementgt
- ltjxtaPipeAdvertisement xmlnshttp//jxta.orggt
- ltIdgturnjxtauuid-05773264AB...EF56A468375lt/Idgt
- ltTypegtJxtaUnicastSecurelt/Typegt
12P2P JXTA Peer Discovery API
(JXTA Java P2P Programming 22. March 2002)
13Local Discovery
P2P JXTA Peer Discovery API
Veröffentlichung von Advertisements
publish(Advertisement adv, int type)
- Im lokalen Cache (Cache Management Ordner) nach
Advertisements suchen - getLocalAdvertisements(int type, String
attribute, String value)
Suche nach einem Peer Bla getLocalAdvertisement
s(DiscoveryService.PEER, Name, Bla)
14P2P JXTA Peer Discovery API
Mögliche Implementierung
- 1 private void findLocalAdvertisements ( )
- 2 System.out.println( looking local )
- 3 try
- Enumeration enu discoveryService.getLocalAdverti
sements(DiscoveryService.ADV, null ,null) - 5 if ((enu ! null) enu.hasMoreElements(
)) - 6 System.out.println(found local Advertisement
) - 7 while (enu.hasMoreElements( ))
- 8 Advertisement adv (Advertisement)enu.nextEle
ment( ) - 9 try
- 10 Document doc adv.getDocument(new
MimeMediaType (text/xml)) - 11 doc.sendToStream(System.out)
- 12
- 13 catch (IOException e)
- 14 e.printStackTrace(System.err)
- 15
- 16
- 17
- 18
- 19 catch (IOException e)
(Oliver Steinhauer JXTA Seminar, FU
Gießen-Friedberg, SS03)
15Remote Discovery
P2P JXTA Peer Discovery API
Veröffentlichung von Advertisements
remotePublish(Advertisement adv, int type)
- Eine Anfrage an alle RendezvousPeers senden um
ihre lokale DB zu durchsuchen - getRemoteAdvertisements( String peerid, int
type, String attribute, String value, int
threshold ) - Problem
- Der Peer weiß nicht, wann die Advertisements
gefunden wurden.
16Remote Discovery mit Listener
P2P JXTA Peer Discovery API
getRemoteAdvertisements( String peerid, int
type, String attribute, String value, int
threshold, DiscoveryListener listener ) Bei
jeder Antwort wird der DiscoveryListener
aufgerufen. discoveryEvent(DiscoveryEvent
discoveryEvent) // behandelt // Event vom
Discovery Service Das DiscoveryEvent
Objekt getResponse() // liefter
DiscoveryResponseMsg DiscoveryResponseMsg getRes
ponses() // liefert Aufzählung der
Advertisements zurück
17P2P JXTA Überblick
- Einführung
- Welche Protokolle gibt es?
- Peer Discovery Protocol API
- Peer Resolver Protocol API
- Peer Membership Protocol API
- Peer Information Protocol API
- Pipe Binding Protocol API
- Peer Endpoint Protocol API
- Beispiel
18P2P JXTA Peer Resolver API
Peer Resolver API
- wird zur Suche im P2P Netz benutzt
- dazu werden Anfragen (query) an andere Peers
versendet - und Antworten (response) empfangen
-
- keine Übermittlungsgarantien
- Rendezvous Peers können Übermittlung ablehnen
oder - dabei ausfallen
-
- keine Antwortgarantien
- weder wenn keine Antworten vorhanden noch
Antworten - vorhanden
19P2P JXTA Peer Resolver API
Resolver API Classes
- ResolverInterface Interface zur
Implementierung - des ResolverServices
-
- ResolverService Interface definiert
QueryHandler Verwaltung -
- GenericResolver Interface definiert senden von
Messages -
- QueryHandler Interface zur Message
Verarbeitung -
- ResolverQuery Standardimplementierung
-
- ResolverResponse Standardimplementierung
20P2P JXTA Peer Resolver API
QueryHandler im Detail
- int processQuery(ResolverQuery query)
- Ablaufsteuerung mittels Rückgabewert
- ResolverService.OK
- ResolverService.Repropagate
- void processResponse
- (ResolverResponse response)
- keine weitere Ablaufsteuerung da Endpunkt
21P2P JXTA Peer Resolver API
I Benutzen des ResolverServices
Starten
ResolverServiceImpl resolver resolver
(ResolverServiceImpl)group. getResolverService(
) TestQueryHandler handler new TestQueryHandle
r(handlerName,credential) resolver.registerHandle
r(handlerName, handler)
Beenden
resolver.unregisterHandler(handlerName)
22P2P JXTA Peer Resolver API
II Benutzen des ResolverServices
Abfragen
// xml AbfrageDokument erstellen StructuredTextDoc
ument doc null doc ()StructuredDocumentFacto
ry. newStructuredDocument( new
MimeMediaType("text/xml"),"Pong") Element e
doc.createElement("timestamp 1",
format.format(new Date(now))) doc.appendChild
(e) String credential p2pSeminar"
23P2P JXTA Peer Resolver API
III Benutzen des ResolverServices
// Query erstellen ResolverQueryMsg message
null String xml serializeDoc(doc) message
new ResolverQuery(handlerName ,
credential , group.getPeerID().toString() ,
xml , 1) // und versenden löst eine
RunTimeException // aus, sofern der Peer nicht
vorhanden resolver.sendQuery(peerID, message)
24P2P JXTA Überblick
- Einführung
- Welche Protokolle gibt es?
- Peer Discovery Protocol API
- Peer Resolver Protocol API
- Peer Membership Protocol API
- Peer Information Protocol API
- Pipe Binding Protocol API
- Peer Endpoint Protocol API
- Beispiel
25P2P JXTA Peer Membership API
Peer Membership API
- Mechanismus um PeerGroup beizutreten
-
- nicht zum Management einer PeerGroup gedacht
- Peer muss Anforderungen des Membership
Protokolls erfüllen - im Erfolgsfall wird ein credential vergeben
- kein zentrales Verzeichnis aller
Gruppenmitglieder
26P2P JXTA Peer Membership API
AuthenticationCredential und Credential
- Credential -gt Berechtigungsnachweis
(dict.leo.org gesehen am 19.05.2004) - AuthenticationCredential enthält
- Authentifizierungsmethode
- anfängliche Identifizierungsinformationen
- Credential enthält
- Identifizierungsinformationen
27P2P JXTA Peer Membership API
MembershipService
Service
28P2P JXTA Peer Membership API
I Ablauf eines PeerGroup Beitritts
// 1. MembershipService von der PeerGroup //
empfangen MembershipService membership membership
(MembershipService) newGroup.getMembershipSe
rvice() // 2. AuthenticationCredential
erstellen AuthenticationCredential
authCred authCred new AuthenticationCredential
(newGroup,authenticationMethod)
29P2P JXTA Peer Membership API
II Ablauf eines PeerGroup Beitritts
// 3. Authenticator vom MembershipService //
empfangen Authenticator authenticator
(Authenticator)membership.apply(authCred) //
4. Authenticator Objekt ausfüllen authenticator.me
thodXYZ(valueABC)
30P2P JXTA Peer Membership API
III Ablauf eines PeerGroup Beitritts
/ 5. Authenticator mittels isReadyForJoin()
testen und 6. mit Authenticator beim
MembershipService anmelden / if(
authenticator.isReadyForJoin())
finalCredential membership.join(authenticat
or) ? Credential empfangen
31P2P JXTA Überblick
- Einführung
- Welche Protokolle gibt es?
- Peer Discovery Protocol API
- Peer Resolver Protocol API
- Peer Membership Protocol API
- Peer Information Protocol API
- Pipe Binding Protocol API
- Peer Endpoint Protocol API
- Beispiel
32P2P JXTA Peer Information API
Protokollhierarchie von JXTA
Peer Discovery Protokoll (Standard)
Peer Information Protokoll (Standard)
Pipe Binding Protokoll (Standard)
Peer Resolver Protokoll (Core)
Peer Endpoint Protokoll (Core)
Rendezvous Protokoll (Standard)
Core - required components and behaviours for
all JXTA implementations Standard optional
but recommended
33P2P JXTA Peer Information API
Peer Information Protokoll
- - Sobald ein Peer lokalisiert ist, ist es
interessant seinen Status und seine Fähigkeiten
abzufragen ? PIP - - Zwei Nachrichtentypen
- - Peer Info Query Message (Status des Remote
Peers abfragen) - - Peer Info Response Message (Seinen Status einem
anderen Peer - zugänglich machen)
- - Spezielle Implementation des Peer Resolver
Protokolls - - Peer publiziert seine PeerAdvertisement ?
andere Peers lokalisieren diese und ziehen daraus
Informationen über den zugehörigen Peer - - Dient dem Standard JXTA Service PeerInfoService
(optional aber empfohlen) -
34P2P JXTA Peer Information API
PIP Query Message
ltxselement name"PeerInfoQueryMessage"
type"jxtaPeerInfoQueryMessage"/gt ltxscomplexTyp
e name"PeerInfoQueryMessage"gt ltxssequencegt
ltxselement name"sourcePid" type"jxtaJXTAID"/gt
ltxselement name"targetPid"
type"jxtaJXTAID"/gt lt!-- if not present then
the response is the general peerinfo --gt
ltxselement name"request" type"xsanyType"
minOccurs"0"/gt lt/xssequencegt lt/xscomplexTypegt
request Feld kann genutzt werden um einen
speziellen Request zu bezeichenen, wenn nicht ?
Anfrage liefert default Set von Informationen
35P2P JXTA Peer Information API
PIP Response Message
ltxselement name"PeerInfoResponse"
type"jxtaPeerInfoResponse"/gt ltxscomplexType
name"PeerInfoResponseMessage"gt ltxssequencegt
ltxselement name"sourcePid" type"jxtaJXTAID"/
gt ltxselement name"targetPid"
type"jxtaJXTAID"/gt ltxselement
name"uptime" type"xsunsignedLong"
minOccurs"0"/gt ltxselement name"timestamp"
type"xsunsignedLong" minOccurs"0"/gt
ltxselement name"response" type"xsanyType"
minOccurs"0"/gt ltxselement name"traffic"
type"jxtapiptraffic" minOccurs"0"/gt
lt/xssequencegt lt/xscomplexTypegt ltxscomplexType
name"piptraffic"gt ... ltxscomplexType
name"piptrafficinfo"gt .......
36P2P JXTA Peer Information API
PeerInfoService Interface
- Peer Informationen lokalisieren und speichern
in Form des PeerInfoAdvertisements.
37P2P JXTA Peer Information API
PeerInfoAdvertisement
38P2P JXTA Überblick
- Einführung
- Welche Protokolle gibt es?
- Peer Discovery Protocol API
- Peer Resolver Protocol API
- Peer Membership Protocol API
- Peer Information Protocol API
- Pipe Binding Protocol API
- Peer Endpoint Protocol API
- Beispiel
39P2P JXTA Pipe Binding API
JXTA ... Pipes ...
- Virtuelle Kommunikationskanäle zwischen
Computern, beschrieben durch PipeAdvertisements -
Bieten virtuelle Eingangs und
Ausgangsmailboxen, die nicht physisch an eine
spezielle Peer Lokation gebunden sind -
Eindeutig identifiziert durch Pipe ID - Zwei
Enden - Input Pipe (empfangendes Ende) - Output
Pipe (sendendes Ende)
40P2P JXTA Pipe Binding API
Pipe Binding Protokoll
- Regelt den Aufbau eines virtuellen Kanals
zwischen zwei oder mehreren Knoten - JXTA
HTTP Transport, JXTA TCP/IP Transport, JXTA TLS
Transport - Wird verwendet um die Enden einer
Pipe mit den jeweiligen Endpunkten der Knoten
zu verbinden
41P2P JXTA Pipe Binding API
PipeAdvertisement
- Wird vom Pipe Service genutzt, um die Endpunkte
für lokalen Input und Output der Pipe zu
erstellen - Enthält Pipe ID - Muss Pipe Type
enthalten - JxtaUnicast unsicher und nicht
zuverlässig - JxtaUnicastSecure Sicher (nutzt
TLS) - JxtaPropagate senden an mehre - Kann
optionalen symbolischen Namen enthalten
42P2P JXTA Pipe Binding API
Pipe Advertisement Schema
ltxselement name"PipeAdvertisment"
type"jxtaPipeAdvertisment"/gt ltxscomplexType
name"PipeAdvertisement"gt ltxssequencegt
ltxselement name"Id" type"jxtaJXTAID"/gt
ltxselement name"Type" type"xsstring"/gt
ltxselement name"Name" type"xsstring"
minOccurs"0"/gt lt/xssequencegt lt/xscomplexTypegt
43P2P JXTA Pipe Binding API
PipeService
44P2P JXTA Pipe Binding API
Der Pipe Prozess
Ich such mir jemanden zum reden
Ich hab ein offenes Ohr, wer erzählt mir was
- Peer der Information möchte öffnet eine input
Pipe - Peer der Information möchte veröffentlicht seine
Pipe - Peer mit Daten öffnet output Pipe zur input Pipe
- Peer mit output Pipe sendet Daten
- Gruppe veröffentlicht Pipe Advertisement
- Listener Peer erstellt input Pipe aus
Advertisement - Talk Peer erstellt output Pipe, die an den
listener Peer adressiert ist - Talk Peer sendet Nachricht auf die Pipe
- Listener empfängt Nachricht
45P2P JXTA Pipe Binding API
Verbinden von Pipes
- Blind Pipe - Listener Pipe ist immer blind und
akzeptiert Verbindung von jedem Peer - Blind
Output Pipe - Blind Output Pipe with Listener -
Blind Input Pipe - Blind Input Pipe with
Listener - Peer-addressed Pipe - Adressed
Output Pipe? Output Pipes können sowohl blind
als auch explizit adressiert sein
46P2P JXTA Pipe Binding API
Pipes, Pipes, Pipes
- Bidirektionale Pipes - Der BidirectionalPipeServ
ice ist ein optionaler Service, mit dem (welch
Wunder !) bidirektionale Pipes erzeugt werden
können - Reliable Pipes - Mit dem
ReliablePipeService können Nachrichten
zuverlässig über Pipes gesendet werden -
Nachrichten werden in der Reihenfolge empfangen
in der sie auch gesendet wurden - Die
Nachricht erreicht garantiert ihren Empfänger -
Können auch verschlüsselt werden
47P2P JXTA Überblick
- Einführung
- Welche Protokolle gibt es?
- Peer Discovery Protocol API
- Peer Resolver Protocol API
- Peer Membership Protocol API
- Peer Information Protocol API
- Pipe Binding Protocol API
- Peer Endpoint Protocol API
- Beispiel
48P2P JXTA Peer Endpoint API
Peer Endpoint Protocol
- Nachrichtenaustausch zwischen Peers
- wird hauptsächlich von anderen Protokollen
benutzt - direkte Benutzung sinnvoll für
- Implementierung neuer Endpoint-Protokolle
- Implementierung eigener Pipes
- Überwachung bzw. Steuerung des Netzes
- Zugriff über Interface PeerGroup
- EndpointService getEndpointService()
19.05.04
48
49P2P JXTA Peer Endpoint API
Filter Listener
- zum Manipulieren oder Blockieren von Nachrichten
- Registrieren in EndpointService
- void addIncomingMessageFilterListener(
- MessageFilterListener listener,
- String namespace,
- String name)
- Interface MessageFilterListener
- Message filterMessage(Message message,
- EndpointAddress srcAddr,
- EndpointAddress dstAddr)
19.05.04
49
50P2P JXTA Peer Endpoint API
Ping
- boolean ping(EndpointAddress addr)
- - prüft Erreichbarkeit eines Peers
- - ist unabhängig vom benutzten Protokoll
- - unterscheidet sich vom traditionellen
Netzwerk-Ping - einzige Information true oder false
- Verlässlichkeit hängt vom Protokoll ab
19.05.04
50
51P2P JXTA Peer Endpoint API
Endpoint Messenger
- zum Senden von Nachrichten an einen Endpoint -
Messenger getMessenger(EndpointAddress addr) -
Interface Messenger boolean sendMessage(Message
msg) throws IOException void close() -
entspricht OutputPipe (? Pipe Binding)
19.05.04
51
52P2P JXTA Peer Endpoint API
Endpoint Listener
- Registrieren in EndpointService boolean
addIncomingMessageListener( EndpointListener
listener, String serviceName, String
serviceParam) - Interface EndpointListener
void processIncomingMessage( Message
message, EndpointAddress srcAddr, EndpointAd
dress dstAddr)
19.05.04
52
53P2P JXTA Überblick
- Einführung
- Welche Protokolle gibt es?
- Peer Discovery Protocol API
- Peer Resolver Protocol API
- Peer Membership Protocol API
- Peer Information Protocol API
- Pipe Binding Protocol API
- Peer Endpoint Protocol API
- Beispiel
54P2P JXTA Beispiel Peer Group Discovery
Beispielprogramm Peer Group Discovery
- Programmablauf
- Verbinden mit Rendezvous-Peer
- Senden einer DiscoveryRequest-Message
- Auflistung aller Peers der gefundenen PeerGroups
- Quelle
- Sun Microsystems, Project JXTA 2.0
- Java Programmers Guide, 2003, Seiten 39-43
- http//www.jxta.org/docs/JxtaProgGuide_v2.pd
f - http//www.jxta.org/ProgGuideExamples.zip
20.05.04
54
55P2P JXTA Beispiel Peer Group Discovery
Start JXTA I
public class GroupDiscoveryDemo implements
DiscoveryListener static PeerGroup
netPeerGroup null private DiscoveryService
discovery private RendezVousService rdv
private void startJxta() try
netPeerGroup PeerGroupFactory.newNetPeerGroup
() catch ( PeerGroupException e) ...
20.05.04
55
56P2P JXTA Beispiel Peer Group Discovery
Start JXTA II
discovery netPeerGroup.getDiscoveryService()
rdv netPeerGroup.getRendezVousService()
//Wait until we connect to a rendezvous peer
System.out.print("Waiting to connect...")
while (! rdv.isConnectedToRendezVous())
try Thread.sleep(2000) catch
(InterruptedException ex)
System.out.println("connected!")
20.05.04
56
57P2P JXTA Beispiel Peer Group Discovery
Discovery Message
public void run() try // Register
as a DiscoveryListener discovery.addDiscover
yListener(this) while (true)
System.out.println("Sending a Dis... //
look for any peer group
discovery.getRemoteAdvertisements(null,
DiscoveryService.GROUP,null,null,5) ...
// 60 Sekunden warten
20.05.04
57
58P2P JXTA Beispiel Peer Group Discovery
Discovery Listener I
public void discoveryEvent(DiscoveryEvent ev)
DiscoveryResponseMsg res ev.getResponse()
String name "unknown" // Get the responding
peer's advertisement PeerAdvertisement peerAdv
res.getPeerAdvertisement() // some
peers may not respond with peerAdv if
(peerAdv!null) name peerAdv.getName()
System.out.println (" Got a Di..." name)
20.05.04
58
59P2P JXTA Beispiel Peer Group Discovery
Discovery Listener II
// now print out each discovered peer group
PeerGroupAdvertisement adv null Enumeration
enum res.getAdvertisements() if (enum !
null ) while (enum.hasMoreElements())
adv (PeerGroupAdvertisement)
enum.nextElement() System.out.println(...
adv.getName())
20.05.04
59
60P2P JXTA Beispiel Peer Group Discovery
Main
static public void main(String args)
GroupDiscoveryDemo myapp new
GroupDiscoveryDemo() myapp.startJxta()
myapp.run()
20.05.04
60
61P2P JXTA Beispiel Peer Group Discovery
Ausgabe
Waiting to connect to rendezvous...connected! Send
ing a Discovery message Got a Discovery Response
3 elements from peer unknown Peer Group
football Peer Group mygroup Peer Group
baseball Sending a Discovery message Got a
Discovery Response 2 elements from ... Peer
Group testgroup1 Peer Group soccer
20.05.04
61
62P2P JXTA Quellen
- Daniel Brookshier, Darren Govoni, Navaneeth
Krishnan, Juan Carlos Soto JXTA Java P2P
ProgrammingSams Publishing, March 22,
2002http//java.sun.com/developer/Books/networkin
g/jxta/jxtap2pch03.pdf - Oliver Steinhauer JXTA Seminar, FU
Gießen-Friedberg, SS03 - Kai Wolter JXTA, Universität Paderborn, 2002
- Brendon J. Wilson, JXTA, New Riders, 2002
- www.developer.com
- www.jxta.org
- www.net-lexikon.de
63P2P Seminar JXTA im Detail
Nicole Hänelt, Mike Rohland, Julia Schenk, Rafael
Grote