fr.dyade.aaa.agent
Class AgentServer

java.lang.Object
  extended byfr.dyade.aaa.agent.AgentServer

public final class AgentServer
extends java.lang.Object

The AgentServer class manages the global configuration of an agent server. It reads the configuration file, then it creates and configure Engine, Channel, Networks. This class contains the main method for AgentServer, for example to acivate a server you have to run this class with two parameters: the server id. and the path of the root of persistancy. You can also use a specialized main calling methods initi and start.


To start the agents server an XML configuration file describing the architecture of the agent platform is needed. By default, this file is the a3servers.xml file and it should be located inside the running directory where the server is launched. Each server must use the same configuration file.

The configuration file contains a config element, that is essentially made up of domains elements, and servers (servers elements):

Each server that is part of two domains is named a "router", be careful, it should have only one route between two domains. If it is not true the configuration failed.


A simple example of a3servers.xml follows:

 <?xml version="1.0"?>
 <!DOCTYPE config SYSTEM "a3config.dtd">
 
 <config>
   <domain name="D1"/>
   <domain name="D2" class="fr.dyade.aaa.agent.PoolCnxNetwork"/>

   <property name="D2.nbMaxCnx" value="1"\>

   <server id="0" name="S0" hostname="acores">
     <network domain="D1" port="16300"/>
     <service class=\"fr.dyade.aaa.ns.NameService\" args=\"\"/>
     <property name="A3DEBUG_PROXY" value="true"\>
   </server>

   <server id="2" name="S2" hostname="bermudes">
     <network domain="D1" port="16310"/>
     <network domain="D2" port="16312"/>
   </server>
 
   <server id="3" name="S3" hostname="baleares">
     <network domain="D2" port="16320"/>
   </server>
 </config>
 

This file described a 2 domains configuration D1 and D2, D1 with default network protocol and D2 with the PoolCnxNetwork one, and 4 servers:

At the beginning of the file, there is a global property that defines the maximum number of connection handled by each server of domain D2.

See Also:
Engine, Channel, Network, MessageQueue, Transaction

Field Summary
static java.lang.String A3CMLWRP_PROPERTY
           
static java.lang.String ADMIN_DOMAIN
           
static java.lang.String ADMIN_SERVER
           
static java.lang.String CFG_DIR_PROPERTY
           
static java.lang.String CFG_FILE_PROPERTY
           
static java.lang.String CFG_NAME_PROPERTY
           
static java.lang.String DEFAULT_A3CMLWRP
           
static java.lang.String DEFAULT_CFG_DIR
           
static java.lang.String DEFAULT_CFG_FILE
           
static java.lang.String DEFAULT_CFG_NAME
           
static java.lang.String DEFAULT_SER_CFG_FILE
           
static java.lang.String ENDSTRING
           
static java.lang.String ERRORSTRING
           
static short NULL_ID
           
static java.lang.String OKSTRING
           
 
Constructor Summary
AgentServer()
           
 
Method Summary
static java.util.Enumeration elementsServerDesc()
           
static A3CMLConfig getAppConfig(java.lang.String[] domains)
          Gets configuration of agent servers for a domain from the current A3CMLConfig object.
static A3CMLConfig getConfig()
          Returns the agent server configuration.
static fr.dyade.aaa.agent.Engine getEngine()
           
static java.lang.String getHostname(short sid)
          Get the host name of an agent server.
static java.lang.Integer getInteger(java.lang.String key)
          Determines the integer value of the server property with the specified name.
static java.lang.Integer getInteger(java.lang.String key, int value)
          Determines the integer value of the server property with the specified name.
static java.lang.String getName()
           
static java.lang.String getProperty(java.lang.String key)
          Searches for the property with the specified key in the server property list.
static java.lang.String getProperty(java.lang.String key, java.lang.String value)
          Searches for the property with the specified key in the server property list.
static short getServerId()
           
static short getServerIdByName(java.lang.String name)
          Returns the identifier of the agent server which name is specified.
static java.util.Enumeration getServersIds()
           
static java.lang.String getServiceArgs(short sid, java.lang.String classname)
          Get the argument strings for a particular service.
static java.lang.String getServiceArgs(java.lang.String hostname, java.lang.String classname)
          Get the argument strings for a particular service running on a server identified by its host.
static int getStatus()
           
static java.lang.String getStatusInfo()
           
static java.lang.ThreadGroup getThreadGroup()
           
static Transaction getTransaction()
          Returns the agent server transaction context.
static void init(short sid, java.lang.String path, org.objectweb.util.monolog.api.LoggerFactory loggerFactory)
          Initializes this agent server.
static int init(java.lang.String[] args)
          Parses agent server arguments, then initializes this agent server.
static void main(java.lang.String[] args)
          Main for a standard agent server.
static void setConfig(A3CMLConfig a3config)
          Set the agent server configuration.
static java.lang.String start()
          Causes this AgentServer to begin its execution.
static void stop()
          Forces this AgentServer to stop executing.
static void stop(boolean sync)
          Forces this AgentServer to stop executing.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

NULL_ID

public static final short NULL_ID
See Also:
Constant Field Values

ADMIN_DOMAIN

public static final java.lang.String ADMIN_DOMAIN
See Also:
Constant Field Values

ADMIN_SERVER

public static final java.lang.String ADMIN_SERVER
See Also:
Constant Field Values

CFG_DIR_PROPERTY

public static final java.lang.String CFG_DIR_PROPERTY
See Also:
Constant Field Values

DEFAULT_CFG_DIR

public static final java.lang.String DEFAULT_CFG_DIR

CFG_FILE_PROPERTY

public static final java.lang.String CFG_FILE_PROPERTY
See Also:
Constant Field Values

DEFAULT_CFG_FILE

public static final java.lang.String DEFAULT_CFG_FILE
See Also:
Constant Field Values

DEFAULT_SER_CFG_FILE

public static final java.lang.String DEFAULT_SER_CFG_FILE
See Also:
Constant Field Values

CFG_NAME_PROPERTY

public static final java.lang.String CFG_NAME_PROPERTY
See Also:
Constant Field Values

DEFAULT_CFG_NAME

public static final java.lang.String DEFAULT_CFG_NAME
See Also:
Constant Field Values

A3CMLWRP_PROPERTY

public static final java.lang.String A3CMLWRP_PROPERTY
See Also:
Constant Field Values

DEFAULT_A3CMLWRP

public static final java.lang.String DEFAULT_A3CMLWRP
See Also:
Constant Field Values

OKSTRING

public static final java.lang.String OKSTRING
See Also:
Constant Field Values

ERRORSTRING

public static final java.lang.String ERRORSTRING
See Also:
Constant Field Values

ENDSTRING

public static final java.lang.String ENDSTRING
See Also:
Constant Field Values
Constructor Detail

AgentServer

public AgentServer()
Method Detail

getThreadGroup

public static java.lang.ThreadGroup getThreadGroup()

getEngine

public static fr.dyade.aaa.agent.Engine getEngine()

setConfig

public static final void setConfig(A3CMLConfig a3config)
                            throws java.lang.Exception
Set the agent server configuration. Be careful, this method cannot be called after initialization.

Parameters:
a3config - A3CMLConfig
Throws:
java.lang.Exception - Server is already initialized.

getConfig

public static final A3CMLConfig getConfig()
                                   throws java.lang.Exception
Returns the agent server configuration.

Returns:
agent server configuration (A3CMLConfig)
Throws:
java.lang.Exception

getAppConfig

public static A3CMLConfig getAppConfig(java.lang.String[] domains)
                                throws java.lang.Exception
Gets configuration of agent servers for a domain from the current A3CMLConfig object. This method fills the object graph configuration in a A3CMLConfig object.

Parameters:
domains - list of domain's names
Returns:
a A3CMLConfig object.
Throws:
java.lang.Exception

getServerId

public static final short getServerId()

getName

public static final java.lang.String getName()

getServerIdByName

public static short getServerIdByName(java.lang.String name)
                               throws java.lang.Exception
Returns the identifier of the agent server which name is specified.

Parameters:
name - the name of the agent server
Returns:
the identifier of the agent server
Throws:
java.lang.Exception - if the server name is unknown.

getTransaction

public static Transaction getTransaction()
Returns the agent server transaction context.


getProperty

public static java.lang.String getProperty(java.lang.String key)
Searches for the property with the specified key in the server property list.

Parameters:
key - the hashtable key.
Returns:
the value with the specified key value.

getProperty

public static java.lang.String getProperty(java.lang.String key,
                                           java.lang.String value)
Searches for the property with the specified key in the server property list.

Parameters:
key - the hashtable key.
value - a default value.
Returns:
the value with the specified key value.

getInteger

public static java.lang.Integer getInteger(java.lang.String key)
Determines the integer value of the server property with the specified name.

Parameters:
key - property name.
Returns:
the Integer value of the property.
See Also:
java.lang.Integer.getInteger

getInteger

public static java.lang.Integer getInteger(java.lang.String key,
                                           int value)
Determines the integer value of the server property with the specified name.

Parameters:
key - property name.
value - a default value.
Returns:
the Integer value of the property.
See Also:
java.lang.Integer.getInteger

elementsServerDesc

public static java.util.Enumeration elementsServerDesc()
                                                throws java.lang.Exception
Throws:
java.lang.Exception

getServersIds

public static java.util.Enumeration getServersIds()

getHostname

public static final java.lang.String getHostname(short sid)
                                          throws UnknownServerException
Get the host name of an agent server.

Returns:
server host name as declared in configuration file
Throws:
UnknownServerException

getServiceArgs

public static final java.lang.String getServiceArgs(short sid,
                                                    java.lang.String classname)
                                             throws java.lang.Exception
Get the argument strings for a particular service. The information provides from the A3 configuration file, so it's only available if this file contains service's informations for all nodes.

Parameters:
classname - the service class name
Returns:
the arguments as declared in configuration file
Throws:
UnknownServerException - The specified server does not exist.
UnknownServiceException - The specified service is not declared on this server.
java.lang.Exception - Probably there is no configuration defined.
See Also:
A3CMLConfig.getServiceArgs(short,String)

getServiceArgs

public static final java.lang.String getServiceArgs(java.lang.String hostname,
                                                    java.lang.String classname)
                                             throws java.lang.Exception
Get the argument strings for a particular service running on a server identified by its host. The information provides from the A3 configuration file, so it's only available if this file contains service's informations for all nodes.

Parameters:
hostname - hostname
classname - the service class name
Returns:
the arguments as declared in configuration file
Throws:
UnknownServiceException - The specified service is not declared on this server.
java.lang.Exception - Probably there is no configuration defined.
See Also:
A3CMLConfig.getServiceArgs(String, String)

getStatus

public static int getStatus()

getStatusInfo

public static java.lang.String getStatusInfo()

init

public static int init(java.lang.String[] args)
                throws java.lang.Exception
Parses agent server arguments, then initializes this agent server. The start function is then called to start this agent server execution. Between the init and start calls, agents may be created and deployed, and notifications may be sent using the Channel sendTo function.

Parameters:
args - lauching arguments, the first one is the server id and the second one the persistency directory.
Returns:
number of arguments consumed in args
Throws:
java.lang.Exception - unspecialized exception

init

public static void init(short sid,
                        java.lang.String path,
                        org.objectweb.util.monolog.api.LoggerFactory loggerFactory)
                 throws java.lang.Exception
Initializes this agent server. start function is then called to start this agent server execution. Between the init and start calls, agents may be created and deployed, and notifications may be sent using the Channel sendTo function.

Parameters:
sid - the server id
path - the persistency directory.
loggerFactory - the monolog LoggerFactory;
Throws:
java.lang.Exception - unspecialized exception

start

public static java.lang.String start()
                              throws java.lang.Exception
Causes this AgentServer to begin its execution. This method starts all MessageConsumer (i.e. the engine and the network components).

Throws:
java.lang.Exception

stop

public static void stop(boolean sync)
Forces this AgentServer to stop executing. This method stops all consumers and services. Be careful, if you specify a synchronous process, this method wait for all server's thread to terminate; so if this method is called from a server's thread it should result a dead-lock.

Parameters:
sync - If true the stop is precessed synchronous, otherwise a thread is created and the method returns.

stop

public static void stop()
Forces this AgentServer to stop executing. This method stops all consumers and services. Be careful, the stop process is now synchronous and wait for all server's thread to terminate ; If this method is called from a server's thread it should result a dead-lock.


main

public static void main(java.lang.String[] args)
                 throws java.lang.Exception
Main for a standard agent server. The start arguments include in first position the identifier of the agent server to start, and in second position the directory name where the agent server stores its persistent data.

Parameters:
args - start arguments
Throws:
java.lang.Exception - unspecialized exception


Copyright ? 2004 Scalagent - All rights reserved