Lo scopo dell'ADSL è quello di evitare di effettuare presso ogni agente la lookup delle caselle di ogni altro agente presente nel sistema e questo al fine di ottenere una maggiore dinamcità della piattaforma. La lookup nell'esempio esposto è effettuato infatti sul solo oggetto di tipo ADSL. Al fine di ottenere un corretto funzionamento della piattaforma è comunque il fatto che gli oggetti MessageBox siano dichiarati anche remoti e iscritti presso un rmiregistry. Infatti, se gli oggetti MessageBox non fossero remoti, l'effetto di passarli come parametro del metodo insertRemoteMessageBox o come valore di ritorno dei metodi getRemoteMessageBox(es) creerebbe una copia presso l'ADSL anzichè un riferimento all'aggetto stesso e quindi non si avrebbe l'effetto desiderato (si veda anche [3, Sezione 5.2]).
Altro punto importante da notare è relativo alla realizzazione dei metodi della classe ADSLImpl, questi sono insertRemoteMessageBox, getRemoteMessageBox(es) e removeRemoteMessageBox. In tutti questi metodi si deve cercare un certo RemoteMessageBox dato un oggetto di tipo AgentID, o perchè deve essere verificato se un certo RemoteMessageBox è già presente prima di inserirne uno nuovo (insertRemoteMessageBox), o perchè deve essere restituito dal metodo stesso come valore di ritorno (getRemoteMessageBox) o perchè ne è stata richiesta la cancellazione (removeRemoteMessageBox). È importante assicurarsi che le realizzazioni di questi metodi utilizzino il metodo equals definito in AgentID per un corretto funzionamento.
Si osservi come l'oggetto di tipo ADSL funga da vero e proprio rmiregistry esteso. Infatti non è necessario effetture alcuna rebind o lookup degli oggetti di tipo MessageBox per condividerne i riferimenti remoti (ma questi comunque debbono essere dichiarati remoti per poter passare il solo riferimento remoto come parametro o valore restituto della insertRemoteMessageBox e getRemoteMessageBox, rispettivamente, e non come copia).
baldoni 2005-01-13