Sunteți pe pagina 1din 10

JavaSpaces

alternativa pentru implementarea modelului replicated workers in sisteme distribuite

Sisteme distribuite metode convenionale


Structurile

de date sunt n spatele unui proces Mai multe procese nu pot accesa n acelai timp datele Procesele folosesc mesaje pentru a comunica Procesele invoc metode ale unor obiecte aflate pe alte maini

JavaSpaces
Structuri

de date distribuite

Spaii Colecii de obiecte

Procesele

unei aplicaii comunic prin schimbul de obiecte ale unuia sau mai multor spaii

Spaiu
Memorie Persistent Cutare

partajat accesibil prin reea

asociativ Permite schimbul de coninut executabil

JavaSpaces API: interfaa Entry


Un

obiect, pentru a putea fi stocat ntr-un spaiu, trebuie s implementeze interfaa Entry Convenii:

Constructor public fr argumente Variabilele trebuie s fie publice Variabilele trebuie s reprezinte referine ctre obiecte i nu tipuri primitive

Exemplu:
import net.jini.core.entry.Entry; public class Message implements Entry { public String content; public Message() { } }

JavaSpaces API: interfaa JavaSpace (I)

write - scrie un obiect in JavaSpace

Lease write(Entry e, Transaction txn, long lease);

read ntoarce un obiect din spaiu


take la fel ca read, numai c terge obiectul din spaiu notify ia ca argumente un template i un obiect i cere spaiului s notifice obiectul respectiv cnd un obiect care face match cu template-ul este adugat n spaiu

Entry read(Entry tmpl, Transaction txn, long timeout); Entry take(Entry tmpl, Transaction txn, long timeout);

EventRegistration notify(Entry tmpl, Transaction txn, RemoteEventListener listener, long lease, MarshalledObject handback);

JavaSpaces API: interfaa JavaSpace (II)


Cele

patru metode ofer capacitile de baz necesare n sistemele distribuite:


caching = write + read procesare paralel = write + take schimbul de mesaje = write + notify

Replicated Workers

Master
public class Master { for (int i=0; i<nTasks; i++) { Task task = new Task(); space.write(task, );
}

for (int i=0; i<nTasks; i++) { Result template = new Result(); Result result =space.take(template, ); // combine results } }

Worker
public class Worker { while(true){ Task template = new Task(...); Task task = (Task)space.take(template, ...); Result result = compute(task); space.write(result, ...); } }

S-ar putea să vă placă și