10.03.2015 Views

Odporność na błędy bizantyjskie w systemach peer-to-peer - Instytut ...

Odporność na błędy bizantyjskie w systemach peer-to-peer - Instytut ...

Odporność na błędy bizantyjskie w systemach peer-to-peer - Instytut ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

90 Rozdział 5. Projekt systemu Pas<strong>to</strong>r<br />

i <strong>to</strong> zagadnienie mogłoby stanowić oddzielne opracowanie. Dokumentację w<br />

postaci plików Javadoc do biblioteki FreePastry czytelnik z<strong>na</strong>jdzie <strong>na</strong> załączonej<br />

płycie CD. Jedynie w celach ilustracji został podany przykład wraz z komentarzem,<br />

utworzenia węzła sieci Pastry (listing 5.1), oraz zarejestrowania zawar<strong>to</strong>ści<br />

w Past (listing 5.2).<br />

Listing 5.1: Tworzenie instancji węzła w Past.<br />

1 // Nazwa instancji aplikacji<br />

2 String instance = new String("PastTesT");<br />

3<br />

4 // Liczba replik dla obiektu Past<br />

5 int replicas = 3;<br />

6<br />

7 // Port przyłączenia<br />

8 int bindport = 6666;<br />

9<br />

10 // Adres przyłączenia<br />

11 InetSocketAddress bootaddress =<br />

12 new InetSocketAddress("127.0.0.1", bindport);<br />

13<br />

14 // Klasa budowy losowych identyfika<strong>to</strong>rów<br />

15 PastryIdFac<strong>to</strong>ry nidFac<strong>to</strong>ry =<br />

16 new RandomNodeIdFac<strong>to</strong>ry();<br />

17<br />

18 // Klasa budowy węzłów dla połączeń sieciowych<br />

19 PastryNodeFac<strong>to</strong>ry fac<strong>to</strong>ry =<br />

20 new SocketPastryNodeFac<strong>to</strong>ry(nidFac<strong>to</strong>ry, bindport);<br />

21<br />

22 // Uchwyt do węzła przyłączenia<br />

23 NodeHandle bootHandle =<br />

24 ((SocketPastryNodeFac<strong>to</strong>ry)fac<strong>to</strong>ry).getNodeHandle(bootaddress);<br />

25<br />

26 // Utworzenie nowego węzła<br />

27 PastryNode node = fac<strong>to</strong>ry.newNode((NodeHandle) bootHandle);<br />

28<br />

29 // Klasa tworzenia identyfika<strong>to</strong>rów węzłów<br />

30 NodeIdFac<strong>to</strong>ry Idf = new PastryIdFac<strong>to</strong>ry();<br />

31<br />

32 // Utworzenie zarządcy obiektami przestrzeni ok. 1MB<br />

33 S<strong>to</strong>rageMa<strong>na</strong>gerImpl s<strong>to</strong>rage =<br />

34 new S<strong>to</strong>rageMa<strong>na</strong>gerImpl(Idf,<br />

35 new PersistentS<strong>to</strong>rage(Idf, "root", ".", 1000000),<br />

36 new LRUCache(new MemoryS<strong>to</strong>rage(Idf), 100000));<br />

37<br />

38 // Utworzenie obiektu aplikacji Past<br />

39 Past past = new PastImpl(node, s<strong>to</strong>rage, replicas, instance);<br />

Utworzenie węzła inicjuje wywołanie me<strong>to</strong>dy getNodeHandle(bootaddress)<br />

klasy SocketNodeFac<strong>to</strong>ry, co ma <strong>na</strong> celu pobranie uchwytu do węzła przyłączającego.<br />

Gdy węzeł przyłączający nie odpowie uchwyt bootHandle będzie<br />

miał war<strong>to</strong>ść null, wtedy zostanie utworzo<strong>na</strong> nowa sieci Pastry poprzez wywoałnie<br />

me<strong>to</strong>dy newNode(bootHandle). W innym przypadku węzeł zostanie<br />

przyłączony poprzez węzeł o adresie bootaddress do istniejącej sieci. Kolejnym<br />

krokiem jest utworzenie zarządcy przestrzeni trwałej S<strong>to</strong>rageMa<strong>na</strong>gerImpl o<br />

wielkości około 1MB. W końcu do życia powołuje się instancję węzła aplikacji<br />

Past.<br />

Listing 5.2: Wprowadzanie obiektu do Past.<br />

1 // Tworzymy obiekt o, który zostanie wprowadzony do sieci<br />

2 String str = new String("Nowy obiekt");<br />

3

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!