SOMA.agent
Class Agent

java.lang.Object
  extended bySOMA.agent.Agent
All Implemented Interfaces:
java.io.Serializable
Direct Known Subclasses:
PlanVisitorAgent, PRMAgent, TheAgent

public abstract class Agent
extends java.lang.Object
implements java.io.Serializable

Classe astratta che rappresenta un agente.

Per creare un agente e' necessario sottoclassare la classe Agent ridefinendo i metodi run() e, se necessario, putArgument( Object obj ).

Il place mette a disposizione dell'agente un insieme di risorse, i cui riferimenti si trovano nel campo agentSystem.

Il place associa ad ogni agente un worker che permette di mandare in esecuzione l'agente stesso.


Author:
Livio Profiri
See Also:
AgentSystem, AgentWorker, Serialized Form

Field Summary
 AgentSystem agentSystem
          Interfaccia fra agente e sistema.
 Mailbox mailbox
           
 java.lang.String start
           
 boolean traceable
           
(package private)  AgentWorker worker
          Riferiomento al worker dell'agente.
 
Constructor Summary
Agent()
          Costruttore vuoto.
 
Method Summary
 AgentID getID()
          Restituisce l'identificatore dell'agente.
 void go(PlaceID destination, java.lang.String method)
          Metodo di migrazione verso un altro place.
 void idle(java.lang.String method)
          Metodo di messa in attesa di un agente.
 void putArgument(java.lang.Object obj)
          Permette di definire lo stato iniziale dell'agente.
abstract  void run()
          Metodo mandato in esecuzione all'avvio di un agente.
 void setID(AgentID myID)
          Permette di specificare l'ID di un agente.
 void setTraceable(boolean traceable)
          Rende rintracciabile o meno l'agente.
 boolean signatureCode(ProfileManager profile)
          Il seguente metodo firma l'agente.
 boolean signatureState(ProfileManager profile)
           
 void stop()
          Ridefinire questo metodo per liberare le risorse dell'agente e lasciarlo in uno stato consistente, nel caso sia necessario interromperlo.
 java.lang.String toString()
          Fornisce una rappresentazione in forma di stringa dell'agente.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

start

public java.lang.String start

agentSystem

public transient AgentSystem agentSystem

Interfaccia fra agente e sistema.

agentSystem contiene i riferimenti agli oggetti cui l'agente ha accesso. In questo modo e' garantita la protezione del sistema da possibili attacchi di agenti ostili, a cui non verranno forniti riferimenti a risorse critiche.

Questo campo e' transient perche' viene asegnato all'agente dal place in cui si trova.


mailbox

public Mailbox mailbox

traceable

public boolean traceable
See Also:
setTraceable( boolean )

worker

transient AgentWorker worker
Riferiomento al worker dell'agente.

Attenzione: il campo worker ha visibilità di package perché non deve essere visto dalle sottoclassi di Agent che si trovano in un altro package, ossia dagli agenti creati dall'utente.
Questo campo e' transient perche' viene asegnato all'agente dal place in cui si trova.

Constructor Detail

Agent

public Agent()
Costruttore vuoto.

Method Detail

setID

public void setID(AgentID myID)

Permette di specificare l'ID di un agente.

L'implementazione permette di specificare l'ID di un agente una sola volta. Quest'operazione è fatta dal sistema al momento della creazione di un agente: SOMA.agent.mobility.AgentManager#createAgent( String agentName, Object argument ). Se si fosse usato un costruttore, anche tutte le sottoclassi lo avrebbero dovuto fornire.


getID

public AgentID getID()
Restituisce l'identificatore dell'agente.


setTraceable

public void setTraceable(boolean traceable)
Rende rintracciabile o meno l'agente.

Se l'agente e' rintracciabile e non ha ancora una mailbox, viene creata.

Attenzione: traceable e' public, quindi e' comunque possibile cambiarne il valore.


putArgument

public void putArgument(java.lang.Object obj)
Permette di definire lo stato iniziale dell'agente.
Questo metodo è vuoto in nella classe Agent e deve essere ridefinito dalle sottoclassi che implementano agenti, in maniera analoga a run().

Parameters:
obj - Un oggetto contenente informazioni di inizializzazione. Ovviamente l'oggetto può anche contenere una struttura dati complessa.

run

public abstract void run()
Metodo mandato in esecuzione all'avvio di un agente.
Questo metodo astratto va ridefinito nell'implementazione di ogni agente.


go

public void go(PlaceID destination,
               java.lang.String method)
        throws CantGoException

Metodo di migrazione verso un altro place.

Viene invocato il metodo AgentSystem.go( Agent agent, PlaceID destination ).

Parameters:
destination - Il place di destinazione, che può appartenere ad un dominio qualsiasi.
method - Il metodo con cui verra' riattivato l'agente, vedi start

Attenzione: se un agente ha il riferimento ad un altro agente può chiamarne il metodo di migrazione, come ogni altro metodo. In sostanza ne può assumere il controllo completo. E' quindi estremamente opportuno mantenere nascosti ad ogni agente i riferiemnti ad altri agenti.

Throws:
CantGoException

idle

public void idle(java.lang.String method)

Metodo di messa in attesa di un agente.


stop

public void stop()
Ridefinire questo metodo per liberare le risorse dell'agente e lasciarlo in uno stato consistente, nel caso sia necessario interromperlo.

Ricordarsi aggiornare la variabile start con il nome del metodo da lanciare al prossimo avvio dell'agente.


toString

public java.lang.String toString()
Fornisce una rappresentazione in forma di stringa dell'agente.


signatureCode

public final boolean signatureCode(ProfileManager profile)
Il seguente metodo firma l'agente.


signatureState

public final boolean signatureState(ProfileManager profile)


Copyright © 2004 Luca Foschini