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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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

Wywołanie me<strong>to</strong>dy obiektu w Pas<strong>to</strong>rze odbywa się podobnie, jak w Past.<br />

Klient określa id obiektu, który będzie wywołany, buduje obiekt zlecenia, które<br />

przyjmuje jako parametr <strong>na</strong>zwę me<strong>to</strong>dy do wywołania oraz argumenty wyołania.<br />

Klient podczas wywołania operacji invoke tworzy obiekt kontynuacji (Continuation)<br />

i czeka <strong>na</strong> odpowiedź.<br />

Listing 5.3: Utworzenie węzła Pas<strong>to</strong>ra oraz wywołanie obiektu.<br />

1 // Tworzymy nową fabrykę identyfika<strong>to</strong>rów<br />

2 PastryIdFac<strong>to</strong>ry f = new PastryIdFac<strong>to</strong>ry();<br />

3<br />

4 // Inicjujemy zarządcę przestrzenią dyskową<br />

5 S<strong>to</strong>rageMa<strong>na</strong>gerImpl s<strong>to</strong>rage = new S<strong>to</strong>rageMa<strong>na</strong>gerImpl(f,<br />

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

7 new LRUCache(new MemoryS<strong>to</strong>rage(f), 100000));<br />

8<br />

9 // Tworzymy węzeł aplikacji Pas<strong>to</strong>r używając węzła - node sieci Pastry<br />

10 Pas<strong>to</strong>r pas<strong>to</strong>r = new Pas<strong>to</strong>rImpl(node, s<strong>to</strong>rage, REPLICATION_FACTOR,<br />

11 INSTANCE, new PastPolicy.DefaultPastPolicy(),<br />

12 GCPast.INFINITY_EXPIRATION);;<br />

13<br />

14 // Tworzymy obiekt Obj i wywołujemy lokalnie me<strong>to</strong>dę setString<br />

15 Obj o = new Obj();<br />

16 o.setString("Alice has a kitty.");<br />

17<br />

18 // Tworzymy obiekt aplikacji Pas<strong>to</strong>r<br />

19 Pas<strong>to</strong>rContent myObject = new Pas<strong>to</strong>rContent(f.buildId("Nowy obiekt"), o);<br />

20<br />

21 // Obiekt zostaje umieszczony w sieci<br />

22 pas<strong>to</strong>r.insert(myObject, new Continuation() {<br />

23 public void receiveResult(Object o) {<br />

24 System.out.println("Got result " + o.<strong>to</strong>String());<br />

25 }<br />

26 public void receiveException(Exception e) {<br />

27 System.out.println("Oops! An error occurred: " + e);<br />

28 }<br />

29 });<br />

30<br />

31 Thread.sleep(2000);<br />

32<br />

33 // Tworzymy nowe parametry wywołania<br />

34 Object[] params = new Object[] { new String("Kitty has Alice.") };<br />

35<br />

36 // Tworzymy obiekt zlecenia wywołania me<strong>to</strong>dy setString<br />

37 Command cmd = new CommandContent(1, "setString", params);<br />

38<br />

39 // Wywołujemy me<strong>to</strong>dę obiektu uprzednio umieszczonego w sieci.<br />

40 // W wyniku powinniśmy otrzymać <strong>na</strong>pis "Alice has a kitty.", gdyż<br />

41 // me<strong>to</strong>da setString zwraca uprzednio zapamiętany ciąg z<strong>na</strong>ków.<br />

42 pas<strong>to</strong>r.invoke(f.buildId("Nowy obiekt"), cmd, new Continuation() {<br />

43 public void receiveResult(Object o) {<br />

44 System.out.println("Got result " + o.<strong>to</strong>String());<br />

45 }<br />

46 public void receiveException(Exception e) {<br />

47 System.out.println("Oops! An error occurred: " + e);<br />

48 }<br />

49 });<br />

Przykład utworzenia węzła Pas<strong>to</strong>r’a oraz wywołanie obiektu umieszczono <strong>na</strong><br />

listigu 5.3.<br />

5.1.4 Zarządzanie dostępem<br />

Zarządzanie uprawnieniami klientów moż<strong>na</strong> zrealizować używając kryp<strong>to</strong>grafii<br />

z kluczem publicznym. Nie jest <strong>to</strong> może idealne rozwiązanie ze względu <strong>na</strong>

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

Saved successfully!

Ooh no, something went wrong!