Class RemoteCommandManager
- java.lang.Object
-
- 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 cache 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
,DiscoveryManager
- Author:
- Steven Vo
- Since:
- OracleAS TopLink 10g (9.0.4)
-
-
Field Summary
Fields Modifier and Type Field Description protected CommandConverter
commandConverter
Used for converting commands between EclipseLink Command and app command formatsprotected CommandProcessor
commandProcessor
Invoked to process a command when it is received from the clusterstatic boolean
DEFAULT_ASYNCHRONOUS_MODE
static java.lang.String
DEFAULT_CHANNEL
protected DiscoveryManager
discoveryManager
Manages the detection of new services as they join the clusterprotected boolean
isAsynchronous
Determines whether propagation should be synchronous or asynchronousprotected boolean
isEclipseLinkSession
Determines whether profiling command should be sendprotected boolean
isStopped
protected Serializer
serializer
Set the Serializer to use for serialization of commands.protected ServerPlatform
serverPlatform
Uniquely identifies ServerPlatform in the clusterprotected ServiceId
serviceId
Uniquely identifies this service in the clusterprotected TransportManager
transportManager
Manages the transport level connections between command managers
-
Constructor Summary
Constructors Constructor Description RemoteCommandManager(CommandProcessor commandProcessor)
RemoteCommandManager(CommandProcessor commandProcessor, TransportManager transportManager)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description 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 membersSerializer
getSerializer()
PUBLIC: Return the Serializer to use for serialization of commands.ServerPlatform
getServerPlatform()
INTERNAL: Return the serverPlatform that identifies the application serverServiceId
getServiceId()
INTERNAL: Return the service info that identifies this service instanceTransportManager
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 commandsboolean
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 methodvoid
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(byte[] commandBytes)
INTERNAL: Deserialize the command and execute it.void
processCommandFromRemoteConnection(Command command)
INTERNAL: Delegate to command processorvoid
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
setSerializer(Serializer serializer)
PUBLIC: Set the Serializer to use for serialization of 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.
-
-
-
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
-
serializer
protected Serializer serializer
Set the Serializer to use for serialization of commands.
-
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 interfaceCommandManager
-
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 interfaceCommandManager
-
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 interfaceCommandManager
- Parameters:
command
- An object representing a EclipseLink command
-
processCommandFromRemoteConnection
public void processCommandFromRemoteConnection(byte[] commandBytes)
INTERNAL: Deserialize the command and execute it.
-
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 interfaceCommandManager
- 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 interfaceCommandManager
- 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 interfaceCommandManager
- 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 interfaceCommandManager
- 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 interfaceCommandManager
- 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 interfaceCommandManager
- 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 interfaceCommandManager
- 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 interfaceCommandManager
- 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 interfaceCommandManager
- 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 interfaceCommandManager
-
getUrl
public java.lang.String getUrl()
PUBLIC: Return the URL for this command manager.- Specified by:
getUrl
in interfaceCommandManager
- 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 interfaceCommandManager
- 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 interfaceCommandManager
-
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 interfaceCommandManager
-
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.
-
getSerializer
public Serializer getSerializer()
PUBLIC: Return the Serializer to use for serialization of commands.
-
setSerializer
public void setSerializer(Serializer serializer)
PUBLIC: Set the Serializer to use for serialization of commands.
-
-