EclipseLink 1.2.0, build 'v20091016-r5565' API Reference

org.eclipse.persistence.sessions.coordination
Class RemoteCommandManager

java.lang.Object
  extended by org.eclipse.persistence.sessions.coordination.RemoteCommandManager
All Implemented Interfaces:
CommandManager

public class RemoteCommandManager
extends java.lang.Object
implements CommandManager

Purpose: Provide a CommandManager implementation for caceh coordination.

Description: A RemoteCommandManager (or RCM) instance is the primary component of an RCM service instance. It manages the other components of the service, and directs the overall service operation. Its ServiceId uniquely distinguishes it from other service instances in the cluster.

Each RCM has a logical channel to which it subscribes and publishes. This channel determines which other instances in the cluster the service instance sends and receives remote commands to/from. All RCM's on the same channel should have the same discovery manager settings (be communicating on the same multicast) so that the discovery managers may be able to discover one another. RCM's on different channels may operate on the same or on different multicast groups.

An RCM instance knows about other instances in the cluster through its DiscoveryManager. Its TransportManager is responsible for setting up the connections to other instances once they are discovered.

An RCM is instructed to "propagate", or execute on all remote service instances in the cluster that subscribe to the same channel, a remote command by its CommandProcessor. Likewise, when an RCM receives a remote command to be executed then it passes the command off to the CommandProcessor for the processing of the command to occur. CommandProcessors pass commands to the RCM as an Object (in a format that may be specific to the application) and the RCM uses its CommandConverter to convert it to a EclipseLink Command object before sending the Command off to the cluster. Similarly, when a EclipseLink Command object is received then the RCM invokes its CommandConverter to convert the object into the application format that will be passed to the CommandProcessor to process the command.

See Also:
CommandManager, Command, CommandProcessor, CommandConverter, CommandTransporter, DiscoveryManager
Author:
Steven Vo
Since:
OracleAS TopLink 10g (9.0.4)

Field Summary
protected  CommandConverter commandConverter
          Used for converting commands between EclipseLink Command and app command formats
protected  CommandProcessor commandProcessor
          Invoked to process a command when it is received from the cluster
static boolean DEFAULT_ASYNCHRONOUS_MODE
           
static java.lang.String DEFAULT_CHANNEL
           
protected  DiscoveryManager discoveryManager
          Manages the detection of new services as they join the cluster
protected  boolean isAsynchronous
          Determines whether propagation should be synchronous or asynchronous
protected  boolean isEclipseLinkSession
          Determines whether profiling command should be send
protected  boolean isStopped
           
protected  ServerPlatform serverPlatform
          Uniquely identifies ServerPlatform in the cluster
protected  ServiceId serviceId
          Uniquely identifies this service in the cluster
protected  TransportManager transportManager
          Manages the transport level connections between command managers
 
Constructor Summary
RemoteCommandManager(CommandProcessor commandProcessor)
           
RemoteCommandManager(CommandProcessor commandProcessor, TransportManager transportManager)
           
 
Method Summary
 java.lang.String getChannel()
          PUBLIC: Return the service channel for this command manager.
 CommandConverter getCommandConverter()
          PUBLIC: Return the converter instance used to convert between EclipseLink Command objects and an application command format.
 CommandProcessor getCommandProcessor()
          PUBLIC: Return the command processor that processes commands received from the cluster.
 DiscoveryManager getDiscoveryManager()
          PUBLIC: Return the discovery manager that detects the arrival of new cluster members
 ServerPlatform getServerPlatform()
          INTERNAL: Return the serverPlatform that identifies the application server
 ServiceId getServiceId()
          INTERNAL: Return the service info that identifies this service instance
 TransportManager getTransportManager()
          PUBLIC: Return the transport manager that manages sending and receiving of remote commands.
 java.lang.String getUrl()
          PUBLIC: Return the URL for this command manager.
 void handleException(java.lang.RuntimeException exception)
          INTERNAL: Delegate to the command procesor to handle the exception.
 void initialize()
          PUBLIC: Initialize the remote command manager.
 boolean isCommandProcessorASession()
          INTERNAL: Return whether this command manager should process profile commands
 boolean isStopped()
          PUBLIC: Indicates whether the RCM has been stopped: either initialize hasn't been called or shutdown has been called.
 void logDebug(java.lang.String message, java.lang.Object[] args)
          INTERNAL: Convenience logging methods.
 void logDebugWithoutLevelCheck(java.lang.String message, java.lang.Object[] args)
           
 void logError(java.lang.String message, java.lang.Object[] args)
           
 void logInfo(java.lang.String message, java.lang.Object[] args)
           
 void logMessage(int logLevel, java.lang.String message, java.lang.Object[] args)
          INTERNAL:
 void logMessageWithoutLevelCheck(int logLevel, java.lang.String message, java.lang.Object[] args)
          INTERNAL: Use this method in case the necessary logLevel has been confirmed by calling commandProcessor.shouldLogMessages method
 void logWarning(java.lang.String message, java.lang.Object[] args)
           
 void logWarningWithoutLevelCheck(java.lang.String message, java.lang.Object[] args)
           
 void newServiceDiscovered(ServiceId service)
          INTERNAL: A new service has been detected by the discovery manager.
 void processCommandFromRemoteConnection(Command command)
          INTERNAL: Delegate to command processor
 void propagateCommand(java.lang.Object command)
          ADVANCED: Propagate a remote command to all remote RCM services participating in the EclipseLink cluster.
 void replaceLocalHostIPAddress(java.lang.String ipAddress)
          ADVANCED: Allow user to replace the $HOST subString of the local host URL with the user user input at runtime.
 void replaceTransportPortNumber(java.lang.String portNumber)
          ADVANCED: Allow user to replace the $PORT subString of the local host URL with the user user input at runtime.
 void setChannel(java.lang.String channel)
          ADVANCED: Set the service channel for this command manager.
 void setCommandConverter(CommandConverter newCommandConverter)
          ADVANCED: Set the converter instance that will be invoked by this CommandProcessor to convert commands from their application command format into EclipseLink Command objects before being propagated to remote command manager services.
 void setCommandProcessor(CommandProcessor newCommandProcessor)
          ADVANCED: Set the command processor that will be invoked to process commands.
 void setServerPlatform(ServerPlatform theServerPlatform)
          PUBLIC: The ServerPlatform must be set manually when the RemoteCommandManager'CommandProcessor is not EclipseLink Session.
 void setShouldPropagateAsynchronously(boolean asyncMode)
          ADVANCED: Set whether this command manager should propagate commands synchronously or asynchronously.
 void setTransportManager(TransportManager newTransportManager)
          ADVANCED: Set a specific transport manager to manage sending and receiving of remote commands.
 void setUrl(java.lang.String url)
          ADVANCED: Set the URL for this command manager.
 boolean shouldLogDebugMessage()
           
 boolean shouldLogMessage(int logLevel)
          INTERNAL:
 boolean shouldLogWarningMessage()
           
 boolean shouldPropagateAsynchronously()
          PUBLIC: Return whether this command manager should propagate commands synchronously or asynchronously.
 void shutdown()
          PUBLIC: Shut down the remote command manager.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_CHANNEL

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

DEFAULT_ASYNCHRONOUS_MODE

public static final boolean DEFAULT_ASYNCHRONOUS_MODE
See Also:
Constant Field Values

serviceId

protected ServiceId serviceId
Uniquely identifies this service in the cluster


discoveryManager

protected DiscoveryManager discoveryManager
Manages the detection of new services as they join the cluster


transportManager

protected TransportManager transportManager
Manages the transport level connections between command managers


commandProcessor

protected CommandProcessor commandProcessor
Invoked to process a command when it is received from the cluster


commandConverter

protected CommandConverter commandConverter
Used for converting commands between EclipseLink Command and app command formats


isAsynchronous

protected boolean isAsynchronous
Determines whether propagation should be synchronous or asynchronous


isEclipseLinkSession

protected boolean isEclipseLinkSession
Determines whether profiling command should be send


serverPlatform

protected ServerPlatform serverPlatform
Uniquely identifies ServerPlatform in the cluster


isStopped

protected boolean isStopped
Constructor Detail

RemoteCommandManager

public RemoteCommandManager(CommandProcessor commandProcessor)

RemoteCommandManager

public RemoteCommandManager(CommandProcessor commandProcessor,
                            TransportManager transportManager)
Method Detail

initialize

public void initialize()
PUBLIC: Initialize the remote command manager. This will also trigger the DiscoveryManager to start establishing the EclipseLink cluster.

Specified by:
initialize in interface CommandManager

isStopped

public boolean isStopped()
PUBLIC: Indicates whether the RCM has been stopped: either initialize hasn't been called or shutdown has been called.


shutdown

public void shutdown()
PUBLIC: Shut down the remote command manager. This will also trigger the DiscoveryManager to stop. NOTE: Although this call initiates the shutdown process, no guarantees are made as to when it will actually complete.

Specified by:
shutdown in interface CommandManager

propagateCommand

public void propagateCommand(java.lang.Object command)
ADVANCED: Propagate a remote command to all remote RCM services participating in the EclipseLink cluster.

Specified by:
propagateCommand in interface CommandManager
Parameters:
command - An object representing a EclipseLink command

processCommandFromRemoteConnection

public void processCommandFromRemoteConnection(Command command)
INTERNAL: Delegate to command processor


getCommandProcessor

public CommandProcessor getCommandProcessor()
Description copied from interface: CommandManager
PUBLIC: Return the command processor that processes commands received from the cluster.

Specified by:
getCommandProcessor in interface CommandManager
Returns:
An implementation instance of CommandProcessor

setCommandProcessor

public void setCommandProcessor(CommandProcessor newCommandProcessor)
Description copied from interface: CommandManager
ADVANCED: Set the command processor that will be invoked to process commands. EclipseLink applications can implement this interface in order to receive remote commands from a EclipseLink cluster.

Specified by:
setCommandProcessor in interface CommandManager
Parameters:
newCommandProcessor - The intended processor of remote commands

getTransportManager

public TransportManager getTransportManager()
Description copied from interface: CommandManager
PUBLIC: Return the transport manager that manages sending and receiving of remote commands.

Specified by:
getTransportManager in interface CommandManager
Returns:
The TransportManager instance being used by this CommandManager

setTransportManager

public void setTransportManager(TransportManager newTransportManager)
Description copied from interface: CommandManager
ADVANCED: Set a specific transport manager to manage sending and receiving of remote commands.

Specified by:
setTransportManager in interface CommandManager
Parameters:
newTransportManager - An instance of the desired transport manager type

handleException

public void handleException(java.lang.RuntimeException exception)
INTERNAL: Delegate to the command procesor to handle the exception.


newServiceDiscovered

public void newServiceDiscovered(ServiceId service)
INTERNAL: A new service has been detected by the discovery manager. Take the appropriate action to connect to the service.


getDiscoveryManager

public DiscoveryManager getDiscoveryManager()
PUBLIC: Return the discovery manager that detects the arrival of new cluster members

Specified by:
getDiscoveryManager in interface CommandManager
Returns:
The DiscoveryManager instance being used by this CommandManager

getCommandConverter

public CommandConverter getCommandConverter()
PUBLIC: Return the converter instance used to convert between EclipseLink Command objects and an application command format.

Specified by:
getCommandConverter in interface CommandManager
Returns:
The converter being used by this CommandManager

setCommandConverter

public void setCommandConverter(CommandConverter newCommandConverter)
ADVANCED: Set the converter instance that will be invoked by this CommandProcessor to convert commands from their application command format into EclipseLink Command objects before being propagated to remote command manager services. The converter will also be invoked to convert EclipseLink Command objects into application format before being sent to the CommandProcessor for execution.

Specified by:
setCommandConverter in interface CommandManager
Parameters:
newCommandConverter - The converter to be used by this CommandManager

shouldLogMessage

public boolean shouldLogMessage(int logLevel)
INTERNAL:


shouldLogDebugMessage

public boolean shouldLogDebugMessage()

shouldLogWarningMessage

public boolean shouldLogWarningMessage()

logMessage

public void logMessage(int logLevel,
                       java.lang.String message,
                       java.lang.Object[] args)
INTERNAL:


logMessageWithoutLevelCheck

public void logMessageWithoutLevelCheck(int logLevel,
                                        java.lang.String message,
                                        java.lang.Object[] args)
INTERNAL: Use this method in case the necessary logLevel has been confirmed by calling commandProcessor.shouldLogMessages method


logDebug

public void logDebug(java.lang.String message,
                     java.lang.Object[] args)
INTERNAL: Convenience logging methods.


logDebugWithoutLevelCheck

public void logDebugWithoutLevelCheck(java.lang.String message,
                                      java.lang.Object[] args)

logInfo

public void logInfo(java.lang.String message,
                    java.lang.Object[] args)

logWarning

public void logWarning(java.lang.String message,
                       java.lang.Object[] args)

logWarningWithoutLevelCheck

public void logWarningWithoutLevelCheck(java.lang.String message,
                                        java.lang.Object[] args)

logError

public void logError(java.lang.String message,
                     java.lang.Object[] args)

getServiceId

public ServiceId getServiceId()
INTERNAL: Return the service info that identifies this service instance


getChannel

public java.lang.String getChannel()
PUBLIC: Return the service channel for this command manager. All command managers with the same service channel will send and receive commands from each other. Commands sent on other service channels will not be exchanged with this command manager.

Specified by:
getChannel in interface CommandManager
Returns:
The service channel String subscribed to by this CommandManager

setChannel

public void setChannel(java.lang.String channel)
ADVANCED: Set the service channel for this command manager. All command managers with the same service channel will send and receive commands from each other. Commands sent on other service channels will not be exchanged with this command manager.

Specified by:
setChannel in interface CommandManager
Parameters:
channel - The service channel subscribed to by this CommandManager

isCommandProcessorASession

public boolean isCommandProcessorASession()
INTERNAL: Return whether this command manager should process profile commands

Specified by:
isCommandProcessorASession in interface CommandManager

getUrl

public java.lang.String getUrl()
PUBLIC: Return the URL for this command manager.

Specified by:
getUrl in interface CommandManager
Returns:
The URL String for this CommandManager

setUrl

public void setUrl(java.lang.String url)
ADVANCED: Set the URL for this command manager.

Specified by:
setUrl in interface CommandManager
Parameters:
url - The URL String for this CommandManager

shouldPropagateAsynchronously

public boolean shouldPropagateAsynchronously()
PUBLIC: Return whether this command manager should propagate commands synchronously or asynchronously. If set to synchronous propagation then propagateCommand() will not return to the caller until the command has been executed on all of the services in the cluster. In asynchronous mode the command manager will create a separate thread for each of the remote service executions, and then promptly return to the caller.

Specified by:
shouldPropagateAsynchronously in interface CommandManager

setShouldPropagateAsynchronously

public void setShouldPropagateAsynchronously(boolean asyncMode)
ADVANCED: Set whether this command manager should propagate commands synchronously or asynchronously. If set to synchronous propagation then propagateCommand() will not return to the caller until the command has been executed on all of the services in the cluster. In asynchronous mode the command manager will create a separate thread for each of the remote service executions, and then promptly return to the caller.

Specified by:
setShouldPropagateAsynchronously in interface CommandManager

replaceLocalHostIPAddress

public void replaceLocalHostIPAddress(java.lang.String ipAddress)
ADVANCED: Allow user to replace the $HOST subString of the local host URL with the user user input at runtime. By default, EclipseLink will try to discovery the local host IP and may fail due to security or network restrictions. In this case, user can call this API to specify the IP address or host name during pre-login session event or before session login. Example: If input is 145.23.127.79, the local host URL of ormi://$HOST:2971:/app_name will become ormi://145.23.127.79:2971:/app_name


replaceTransportPortNumber

public void replaceTransportPortNumber(java.lang.String portNumber)
ADVANCED: Allow user to replace the $PORT subString of the local host URL with the user user input at runtime. In this case, user can call this API to specify the port number for a specific transport during pre-login session event or before session login. Example: If input is 7799, the local host URL of ormi://145.23.127.79:$PORT/app_name will become ormi://145.23.127.79:7799/app_name


getServerPlatform

public ServerPlatform getServerPlatform()
INTERNAL: Return the serverPlatform that identifies the application server


setServerPlatform

public void setServerPlatform(ServerPlatform theServerPlatform)
PUBLIC: The ServerPlatform must be set manually when the RemoteCommandManager'CommandProcessor is not EclipseLink Session. When the CommandProcessor is a EclipseLink Session, the ServerPlatform is automatically gotten from the Session.


EclipseLink 1.2.0, build 'v20091016-r5565' API Reference