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 ...
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