JAMAgentMonitor osservatore di JAMAgent

La classe JAMAgentMonitor che realizza l'interfaccia grafica per le classi che estenderanno JAMAgent deve visualizzare una stringa di log per ogni operazione effettuata e che si desidera monitorare presso una opportuna JTextArea ( devono essere monitorate almeno le esecuzioni delle send e delle receive), si veda la Figura 18.

Per realizzare questo si faccia in modo che JAMAgentMonitor risulti un osservatore dell'oggetto di tipo JAMAgent contenuto nel campo agent di JAMAgentMonitor passato come parametro e quindi si modifichi la classe JAMAgent in modo da rendere gli oggetti creati osservabili. In particolare, devono essere osservate almeno ogni richiesta di esecuzione dei metodi send e receive (ogni receive!). Queste richieste di esecuzione devono far comparire un'opporturno messaggio sulla ``Connection console'', ad esempio:

SEND message REQUEST to ...
SEND message INFORM to ...
RECEIVE message INFORM from ...
Per realizzare questo l'interfaccia JAMAgentMonitor deve implementare la classe Observer e quindi registrare le proprie istanze come osservatori dell'oggetto agent, un semplice modo è farlo nel costruttore stesso di JAMAgentMonitor:
class JAMAgentMonitor extend ... implements Observer {
  [...]
  private JAMAgent agent;
  [...]
  public JAMAgentMonitor(JAMAgent ag) {
    [...]
    agent = ag;
    agent.addObserver(this);
  }
  [...]
}
e quindi la classe JAMAgentMonitor dovrà implementare il metodo
public void update(Observable ob, Object extra_arg)
specificato nell'interfaccia Observer. Il metodo update di occuperà di aggiornare la Connection console dove la stringa di log sarà ricevuta attraverso extra_arg.

La classe JAMAgent deve essere modificata in modo da estendere la classe Observable. Quindi ogni metodo che si desidera monitorare nella Console connection dovrà essere modificato con l'aggiunta delle invocazioni dei metodi setChanged e notifyObservers

class JAMAgent extend Observable {
  [...]
  public vodi send(Message message) {
    [...]
    String log = ...;
    setChanged();
    notifyObservers(log);
  }
  [...]
}

baldoni 2005-01-13