Si crei un oggetto di tipo ADSLImpl e si effettui il bind (o il rebind) dell'oggetto presso un rmiregistry attivo (si veda la Figura 11).
Tutto questo lo si realizzi, ad esempio, mediante il main di una classe di nome ProvaADSL del tipo:public class ProvaADSL { public static void main(String[] args) { ... ADSLImpl adsl = new ADSLImpl(); try { // la riga seguente e' in alternativa con l'attivazione // a prompt del rmiregistry java.rmi.registry.LocateRegistry.createRegistry(2000); Naming.rebind("rmi://127.0.0.1:2000/ADSL", adsl); } catch (Exception e) { System.err.println("Failed to bind to RMI Registry"); System.exit(1); } ... } }
A questo punto, in un'altra o più classi, ad esempio ProvaRemoteMessageBoxUno, ProvaRemoteMessageBoxDue, si effettui il lookup presso l'rmiregistry dell'oggetto ADSL creato in ProvaADSL, si veda la Figura 12,
quindi si crei un oggetto di tipo MessageBox (che è anche un oggetto di tipo RemoteMessageBox) e lo si iscriva presso l'ADSL attraverso l'invocazione del metodo remoto insertRemoteMessageBox, si veda la Figura 13) Il codice potrebbe essere del tipo:public class ProvaRemoteMessageBoxUno { public static void main(String[] args) { ... ADSL adsl; AgentID myID; MessageBox box1; try { myID = new AgentID(); ... adsl = (ADSL)Naming.lookup("rmi://127.0.0.1:2000/ADSL"); box1 = new MessageBox(); box1.setOwner(myID); ... adsl.insertRemoteMessageBox(box1); } catch(Exception e) { System.out.println("Failed rmi" + e); } ... } }
Ora è possibile da uno dei vari programmi richiedere mediante il metodo getRemoteMessageBox(es) uno o più oggetti di tipo RemoteMessageBox disponibili remotamente (si veda la Figura 14),
quindi invocare su di esso il metodo writeMessage per inserire un oggetto di tipo Message sulla casella remota (si veda la Figura 15). Si legga quindi la propria casella per verificare se sono arrivati messaggi inviati da altri programmi (esempio, ProvaRemoteMessageBoxDue). Infine si cancelli dal ADSL l'oggetto MessageBox iscritto precedentemente (questo per simulare il momento che l'agente viene tolto dalla piattaforma), si veda la Figura 16.Il codice dovrebbe assomigliare al seguente:
public class ProvaRemoteMessageBoxUno { public static void main(String[] args) { ... ADSL adsl; AgentID myID; MessageBox box1; try { myID = new AgentID(); ... adsl = (ADSL)Naming.lookup("rmi://127.0.0.1:2000/ADSL"); box1 = new MessageBox(); box1.setOwner(myID); ... adsl.insertRemoteMessageBox(box1); ... Message msg = new Message(); ... AgentID agentRemoteID = new AgentID(); ... RemoteMessageBox remoteBox2 = adsl.getRemoteMessageBox(agentRemoteID); remoteBox2.writeMessage(msg); ... Message myMsg = box1.readMessage(); System.out.println(myMsg); ... adsl.removeRemoteMessageBox(myID); ... } catch(Exception e) { System.out.println("Failed rmi" + e); } ... } }A questo punto si proceda con la compilazione di tutti i file sorgenti
> javac *.javala creazione dei file stub per MessageBox e ADSLImpl (non necessaria con Java2 5.0!)
> rmic -v1.2 MessageBox > rmic -v1.2 ADSLImplE si proceda con l'esecuzione, si avvii lo rmiregistry e ProvaADSL
> rmiregistry 2000 & > java ProvaADSL(il comando "&" è per UNIX, per Windows si usino più finestre DOS diverse), entrambi i comandi dati attiveranno un processo che terminerà solo mediante un CTRL-C esplicito. Quindi si lancino da altri due finestre di comando i programi ProvaRemoteMessageBoxUno e ProvaMessageBoxDue
> java ProvaRemoteMessageBoxUno
baldoni 2005-01-13