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