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