ServerAgent
La classe ServerAgent fa da tramite
nelle comunicazioni tra un MainServer e l'altro. In realtà
tale comunicazione è unidirezionale nel senso che ogni ServerAgent
non comunica con un ServerAgent remoto, ma comunica direttamente
con il MainServer remoto.

Un oggetto di classe ServerAgent
viene creato ogni volta che un server si connette ad un altro,
cioè al completamento del 2PC per l'ingresso di un
server, quando una chiamata addServer è
andata a buon fine. In realtà, come risulta chiaro
dalla figura, quando un server si connette vengono creati
due ServerAgent , rispettivamente l'agente del
primo server presso il secondo nodo, e l'agente del secondo
server presso il primo nodo. Il costruttore di questa classe
è il seguente:
public ServerAgent(MainServer localServer, String remoteAddress,
IServerAccess remoteServer);
da cui si può notare che ogni ServerAgent mantiene
un riferimento al MainServer locale (quello del nodo in
cui si trova) ed il nome ed il riferimento al server remoto a cui si
riferisce.
Il ServerAgent deve essere in grado di ricevere eventi
dal MainServer locale e gestirli effettuando le opportune
chiamate sul MainServer remoto. Per fare ciò è
necessario che esso implementi l'interfaccia IEventHandler .
Inoltre al suo interno avrà una classe apposita per la gestione
di tali eventi:
class ServerAgentEventHandler extends EventHandler
Per maggiori dettagli implementativi riguardanti la gestione degli
eventi si veda la classe ClientAgent .
Nel caso si verifichino delle eccezioni durante
una chiamata remota, il ServerAgent provvederà ad
avvertire il suo MainServer chiamando il metodo:
localServer.serverDisconnected(remoteAddress);
e sarà poi esso ad occuparsi della disconnessione.
|