Class CompositeAgent

  • All Implemented Interfaces:
    Agent

    public class CompositeAgent
    extends java.lang.Object
    implements Agent
    Group several Agents into one composite, so they can be scheduled as a unit.
    • Constructor Summary

      Constructors 
      Constructor Description
      CompositeAgent​(java.util.List<? extends Agent> agents)
      Construct a new composite with a given list Agents to begin with.
      CompositeAgent​(Agent... agents)
      Construct a new composite with a given list Agents to begin with.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      int doWork()
      An agent should implement this method to do its work.
      void onClose()
      To be overridden by Agents that need to do resource cleanup on close.
      void onStart()
      To be overridden by Agents that need to do resource init on start.
      java.lang.String roleName()
      Get the name of this agent's role.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • agents

        private final Agent[] agents
      • roleName

        private final java.lang.String roleName
      • agentIndex

        private int agentIndex
    • Constructor Detail

      • CompositeAgent

        public CompositeAgent​(java.util.List<? extends Agent> agents)
        Construct a new composite with a given list Agents to begin with.
        Parameters:
        agents - the parts of this composite, at least one agent and no null agents allowed
        Throws:
        java.lang.IllegalArgumentException - if an empty array of agents is provided
        java.lang.NullPointerException - if the array or any element is null
      • CompositeAgent

        public CompositeAgent​(Agent... agents)
        Construct a new composite with a given list Agents to begin with.
        Parameters:
        agents - the parts of this composite, at least one agent and no null agents allowed
        Throws:
        java.lang.IllegalArgumentException - if an empty array of agents is provided, or single agent provided
        java.lang.NullPointerException - if the array or any element is null
    • Method Detail

      • roleName

        public java.lang.String roleName()
        Get the name of this agent's role.
        Specified by:
        roleName in interface Agent
        Returns:
        the name of this agent's role.
      • onStart

        public void onStart()
        To be overridden by Agents that need to do resource init on start.

        This method will be called by the agent thread once on start.

        Note that one agent throwing an exception on start will not prevent other agents from being started.

        Specified by:
        onStart in interface Agent
        Throws:
        java.lang.RuntimeException - if any sub-agent throws an exception onStart. The agents exceptions are collected as suppressed exceptions in the thrown exception.
      • doWork

        public int doWork()
                   throws java.lang.Exception
        An agent should implement this method to do its work.

        The return value is used for implementing a backoff strategy that can be employed when no work is currently available for the agent to process.

        If the Agent wished to terminate and close then a AgentTerminationException can be thrown.

        Specified by:
        doWork in interface Agent
        Returns:
        0 to indicate no work was currently available, a positive value otherwise.
        Throws:
        java.lang.Exception - if an error has occurred
      • onClose

        public void onClose()
        To be overridden by Agents that need to do resource cleanup on close.

        This method will be called after the agent thread has terminated or if the agent is closed before it runs.

        Note that one agent throwing an exception on close will not prevent other agents from being closed.

        Specified by:
        onClose in interface Agent
        Throws:
        java.lang.RuntimeException - if any sub-agent throws an exception onClose. The agents exceptions are collected as suppressed exceptions in the thrown exception.