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.

5.1 Projekt systemu 91<br />

4 MyPastContent myObject =<br />

5 new MyPastContent(Idf.buildId(str.<strong>to</strong>String()), str);<br />

6<br />

7 // Wprowadzamy obiekt do sieci<br />

8 past.insert(myObject, new Continuation() {<br />

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

10 System.out.println("Got result " + o);<br />

11 }<br />

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

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

14 }<br />

15 });<br />

16<br />

17 Thread.sleep(1000);<br />

18<br />

19 // Wyszukujemy obiekt<br />

20 past.lookup(myObject.getId(), new Continuation() {<br />

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

22 System.out.println("Got result " + o);<br />

23<br />

24 }<br />

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

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

27 }<br />

28 });<br />

Wprowadzenie zawar<strong>to</strong>ści do Past jest trochę trudniejsze, gdyż użycie operacji<br />

insert skutkuje utworzeniem dodatkowego wątku przetważania poprzez użycie<br />

anonimowej klasy wewnętrznej Continuation, który realizuje zlecenie działając<br />

„w tle”, czyli asynchronicznie z punktu widzenia użytkownika. W pierwszej kolejności<br />

utworzony zostaje obiekt klasy MyPastContent, którego identyfika<strong>to</strong>r<br />

jest zbudowany przez obiekt fabryki identyfika<strong>to</strong>rów Idf typu NodeIdFac<strong>to</strong>ry <strong>na</strong><br />

podstawie ciągu z<strong>na</strong>ków str. Następnie wywoływa<strong>na</strong> zainicjowanej instancji węzła<br />

past. Wywoływanie podstawowych operacji nie jest wielce skomplikowane,<br />

gdyż oprogramowanie FreePastry ma s<strong>to</strong>sunkowo intuicyjny i prosty interfejs<br />

programistyczny.<br />

Komponenty<br />

Pas<strong>to</strong>r - aplikacja działająca w oparciu o sieć Pastry dostarczająca me<strong>to</strong>dy<br />

invoke i dziedzicząca inne operacje po GCPast.<br />

Pas<strong>to</strong>rContent - specjalny rodzaj obiektu, który dziedziczy po PastContent,<br />

ale umożliwia dodatkowo wykonywanie me<strong>to</strong>d.<br />

Pas<strong>to</strong>rContentHandle - uchwyt do obiektu Pas<strong>to</strong>rContent, np. pozwala<br />

określić węzeł, z którego pochodzi.<br />

Messanger - interfejs umożliwiający rozgłaszanie komunikatów z zachowaniem<br />

warunku przyczynowości.<br />

Replica<strong>to</strong>r - aplikacja działająca w oparciu o sieć Pastry, podobnie jak<br />

Pas<strong>to</strong>r. Jej zadaniem jest wykonywanie i obsługa zleceń zgłaszanych przez<br />

aplikację Pas<strong>to</strong>r.

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

Saved successfully!

Ooh no, something went wrong!