Parte IV: l'Agent Directory Service Layer

Figure: Diagramma delle classi della quarta parte del progetto.
Image JAM-Parte-IV
L'ADSL ha lo scopo di ``pubblicare'' i RemoteMessageBox degli agenti presenti nella piattaforma in un dato momento. Rappresenta una sorta di rmiregistry in sui è possibile effettuare operazioni di ricerca ``avanzate''. Un agente quando viene creato deve registrare la propria RemoteMessageBox come oggetto remoto (iscriverlo presso un rmiregistry concordato a priori) e quindi richiedere all'ADSL l'iscrizione presso di esso. Quando un agente A vuole a inviare un messaggio ad un agente B si rivolge all'ADSL specificando l'identificatore dell'agente B, l'ADSL restituisce restituisce il RemoteMessageBox di B, sul quale A può invocare la writeMessage. In modo analogo si può fare quando si vuole inviare uno stesso messaggio a tutti gli agenti o a tutti quelli di una specifica categoria.

Si definisca una interfaccia ``remota'' ADSL contenente i metodi:

ALTERNATIVA! Si potrebbe anche realizzare un solo metodo
RemoteMessageBox[] getRemoteMessageBox(AgentID agentID) throw ...
usando la stessa convenzione usata per la realizzazione di Message4You, Message4Some e Message4All vista nella Sezione 3.1, ossia una categoria viene rappresentata da un oggetto di tipo AgentID con il campo name uguale a null, mentre il reperimento di tutti gli agenti presenti in un dato momento con un oggetto di tipo AgentID con entrambi i campi a null. Si noti che questo permetterebbe una discreta semplificazione del codice sia qui che nella classe JAMAgent successiva.

Si definisca quindi la classe ADSLImpl che implementa l'interfaccia remota ADSL e contenente il campo:

Si scelga l'implementazione più opportuna per messageBoxes. Si tenga presente che messageBoxes è una risorsa condivisa, più agenti possono richiedere inserimenti/cancellazioni/interrogazioni contemporaneamente. Si realizzino le implementazioni dei metodi get, insert e remove in maniera opportuna.



Subsections
baldoni 2005-01-13