Project JXTA juxtapose(umieszczać obok siebie)


1. Wprowadzenie peer-to-peer


Wszyscy pewnie orientują się w zasadach działania serwisów typu peer-to-peer. W skrócie serwisy te umożliwiają wyszukiwanie i współdzielenie zasobów bezpośrednio pomiędzy użytkownikami, a nie jak to typowo jest realizowane z centralnego serwera. Na tego typu rozwiązaniu oparte są najpopularniejsze wyszukiwarki plików mp3 jak Napster, Audio Galaxy oraz różnych plików np. Kaaza. Żaden z tych systemów nie jest kompetybilny z innym (tj użytkownik Napstera nie może korzystać z plików udostępnianych przez użytkowników Kaazy itp). W każdym natomiast zostało stworzone od zera oprogramowanie budujące i kontrolujące sieć peer.
Założeniem projektu JXTA jest stworzenie wspólnej platformy umożliwiającej łatwe i szybkie budowanie rozproszonych serwisów i aplikacji, w których każde urządzenie jest adresowane jako peer. JXTA jest niezależne od platformy oraz od urządzenia na jakim może być zaimplementowane np. telefony.

Co daje technologia peer-to-peer?


Dzisiejsze aplikacje internetowe wykorzystywane sa głównie do wyszukiwania lub oferowanioa zasobów chodzi głównie o media files w przyszłości można znaleźć inne zastosowania tej technologii:



2. Projekt JXTA

Co to jest JXTA?

Założeniem JXTA było stworzenie platformy z podstawymi funkcjami do stworzenia sieci P2P. JXTA zostało stworzone by umożliwić węzłom (peer) dostarczanie różnych P2P serwisów, które mogłyby się ze sobą komunikować. Jest to otwarta platforma, dzięki której można stworzyć własny system P2P.

Co można dzięki niemu osiągnąć?

Ponieważ protokoły zdefiniowane przez JXTA są nieniezależne od języka programowania, protokołów transportowych, urządzeń dzięki temu zupełnie różne urządzenia mogą ze sobą współdziałać. Używając JXTA można mapisać aplikację która potrafi:


3. Architektura platformy

Ogólny schemat

Projekt JXTA tworzy virtualną sieć, system peer-to-peer poprzez stworzenie niezbędnej funkcjonalności, z kórej jak z klocków będą zbudowane pozostałe elementy systemu.


Pojęcia

Architektura sieci

JXTA jest to wirtualna sieć polączonych węzłów nałożona na istniejącą dotychczas sieć połaczeń. Połaczenia w sieci mogą się zmieniać więc wiadomości wędrujące pomiędzy węzłami niedeterministycznymi szlakami.

Protokoły

JXTA a bezpieczeństwo

Technologia JXTA jesrt platformą skupioną na mechanizmach nie na zasadach postępowania. Na przykład używane w JXTA UUID (unique user id), nie mają żadnego znaczenia bez dodatkowego nazewnictwa, serwisów łaczących nazwy. Dlatego JXTA nie definiuje żadnego modelu bezpieczeństwa. Jeśli UUID zostaje dołączony do czegoś autentyczność tego przyłączenia może być zagwarantowane poprzez dodanie podpisu cyfrowego.
JXTA nie narzuca żadnych konkretnych metod kryptograficznych. Wszystko zależy od twórców aplikacji korzystających z systemu. Na przykład każda wiadomość posiada pole na świadectwo wierzytelności ale jak z niego korzystać zależy już od twórców aplikacji.



4. Omówienie zaimplementowanej wersji 1.0

Discovery mechanism

- rozgłaszanie tj. wyszukiwanie w sieci lokalnej
- odkrywanie poprzez odczytywanie informacji o peers z otrzymanych wiadomości od innych - kaskadowe odkrywanie: jeśl;i peer znajdzie inne peer to następnie to pierwsze z uprawnieniami drugiego może odkrywać peers przed nim. - poprzez tzw rendezvous peers

Zakresy propagacji zapytań

Specyfikacja JXTA nie określa w jakim zakresie wiadomości mają być przekazywane do innych (czy tylko w lokalnym zakresie czy także na drugi koniec świata). Aktualna implementacja korzysta z peer groups gdzie wiadomości ograniczone są do lokalnej grupy. Planowanym rozwiązaniem jest też dodanie pola, które określałoby zakres wiadomości.

XML

Specyfikacja nie nerzuca by wszystkie węzły potrafiły odcztać każdą wiadomość na telefony mogą umieć odczytać ograniczony zestaw wiadomości, także w obecnej implementacji obsługiwane są tylko najprostsze wiadomości.

Bezpieczeństwo

Wersja 1.0 dostarcza:

Peer Monitoring and Metering

Znaczy to zdolność do śledzenia statusu węzłów, ich zachowania, odpowiedzi na akcje, kontrolowania czasu odpowiedzi.




5. Przykład użycia zaimplementowanych bibliotek

Hello world Example

Aby zainstalować JXTA na swoim domowym sprzęcie należy sciągnąć pliki .jar ze strony www.jxta.org i postępować zgodnie z zaleceniami zawertymi w procedurze instalacyjnej. Przykład ten pokazuje jak aplikacja może skorzystać z platformy JXTA. Aplikacja ta instancjonuje platformę JXTA i wypisuje informację o nazwie peer group, peer group ID, peer name, peer ID

Przykładowy wynik działania aplikacji:
Starting JXTA ....
Hello from JXTA group NetPeerGroup
	Group ID = urn:jxta:jxta-NetGroup
	Peer name = suzi
	Peer ID = urn:jxta:uuid-59616261646162614A78746150325033F3B
C76FF13C2414CBC0AB663666DA53903

Metoda startJXTA() instancjonuje platformę JXTA i potem tworzy i zwraca PeerGroup obiekt zawierający domyżlną grupę net peer group. Obiekt ten zawiera domyślne implementacje serwisów DiscoveryService, MembershipService i RendezvousService, a także ID i nazwę grupy.

Kod:

1 import java.io.InputStream;
2
3 import net.jxta.peergroup.PeerGroup;
4 import net.jxta.peergroup.PeerGroupFactory;
5 import net.jxta.exception.PeerGroupException;
6
7 /**
8 * This is a simple example of how an application would start jxta
9 */
10
11 public class SimpleJxtaApp {
12
13	static PeerGroup netPeerGroup = null;
14
15	public static void main(String args[]) {
16		System.out.println ("Starting JXTA ....");
17		SimpleJxtaApp myapp = new SimpleJxtaApp();
18		myapp.startJxta();
19		System.out.println ("Hello from JXTA group " +
20		netPeerGroup.getPeerGroupName() );
21		System.out.println (" Group ID = " +
22		netPeerGroup.getPeerGroupID().toString());
23		System.out.println (" Peer name = " +
24		netPeerGroup.getPeerName());
25		System.out.println (" Peer ID = " +
26		netPeerGroup.getPeerID().toString());
27		System.exit(0);
28	}
29
30	public SimpleJxtaApp() { }
31
32	private void startJxta() {
33		try {
34			// create and start the default JXTA NetPeerGroup
35			netPeerGroup = PeerGroupFactory.newNetPeerGroup();
36		}
37		catch (PeerGroupException e) {
38			// could not instantiate the group, print the stack and exit
39			System.out.println("fatal error : group creation failure");
40			e.printStackTrace();
41			System.exit(1);
42		}
43	}
44 }