org.opends.server.protocols.jmx
Class JmxConnectionHandler

java.lang.Object
  extended by java.lang.Thread
      extended by org.opends.server.api.DirectoryThread
          extended by org.opends.server.api.ConnectionHandler<JMXConnectionHandlerCfg>
              extended by org.opends.server.protocols.jmx.JmxConnectionHandler
All Implemented Interfaces:
java.lang.Runnable, ConfigurationChangeListener<JMXConnectionHandlerCfg>, AlertGenerator, ServerShutdownListener

public final class JmxConnectionHandler
extends ConnectionHandler<JMXConnectionHandlerCfg>
implements ServerShutdownListener, AlertGenerator, ConfigurationChangeListener<JMXConnectionHandlerCfg>

This class defines a connection handler that will be used for communicating with administrative clients over JMX. The connection handler is responsible for accepting new connections, reading requests from the clients and parsing them as operations. A single request handler should be used.


Nested Class Summary
 
Nested classes/interfaces inherited from class java.lang.Thread
java.lang.Thread.State, java.lang.Thread.UncaughtExceptionHandler
 
Field Summary
static java.lang.String TRUST_MANAGER_ARRAY_KEY
          Key that may be placed into a JMX connection environment map to provide a custom javax.net.ssl.TrustManager array for a connection.
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
JmxConnectionHandler()
          Creates a new instance of this JMX connection handler.
 
Method Summary
 ConfigChangeResult applyConfigurationChange(JMXConnectionHandlerCfg config)
          Applies the configuration changes to this change listener.
 void finalizeConnectionHandler(Message finalizeReason, boolean closeConnections)
          Closes this connection handler so that it will no longer accept new client connections.
 java.util.LinkedHashMap<java.lang.String,java.lang.String> getAlerts()
          Retrieves information about the set of alerts that this generator may produce.
 java.lang.String getClassName()
          Retrieves the fully-qualified name of the Java class for this alert generator implementation.
 java.util.Collection<ClientConnection> getClientConnections()
          Retrieves the set of active client connections that have been established through this connection handler.
 DN getComponentEntryDN()
          Retrieves the DN of the configuration entry with which this alert generator is associated.
 java.lang.String getConnectionHandlerName()
          Retrieves a name that may be used to refer to this connection handler.
 DN getKeyManagerProviderDN()
          Retrieves the DN of the key manager provider that should be used for operations associated with this connection handler which need access to a key manager.
 java.util.Collection<HostPort> getListeners()
          Retrieves information about the listener(s) that will be used to accept client connections.
 int getListenPort()
          Get the JMX connection handler's listen port.
 java.lang.String getProtocol()
          Retrieves the name of the protocol used to communicate with clients.
 RmiConnector getRMIConnector()
          Get the JMX connection handler's RMI connector.
 java.lang.String getShutdownListenerName()
          Retrieves the human-readable name for this shutdown listener.
 java.lang.String getSSLServerCertNickname()
          Retrieves the nickname of the server certificate that should be used in conjunction with this JMX connection handler.
 void initializeConnectionHandler(JMXConnectionHandlerCfg config)
          Initializes this connection handler provider based on the information in the provided connection handler configuration.
 boolean isConfigurationAcceptable(ConnectionHandlerCfg configuration, java.util.List<Message> unacceptableReasons)
          Indicates whether the provided configuration is acceptable for this connection handler.
 boolean isConfigurationChangeAcceptable(JMXConnectionHandlerCfg config, java.util.List<Message> unacceptableReasons)
          Indicates whether the proposed change to the configuration is acceptable to this change listener.
 boolean isUseSSL()
          Determines whether or not clients are allowed to connect over JMX using SSL.
 void processServerShutdown(Message reason)
          Indicates that the Directory Server has received a request to stop running and that this shutdown listener should take any action necessary to prepare for it.
 void registerClientConnection(ClientConnection connection)
          Registers a client connection with this JMX connection handler.
 void run()
          Operates in a loop, accepting new connections and ensuring that requests on those connections are handled properly.
 void toString(java.lang.StringBuilder buffer)
          Appends a string representation of this connection handler to the provided buffer.
 
Methods inherited from class org.opends.server.api.ConnectionHandler
getConnectionHandlerMonitor, setConnectionHandlerMonitor, toString
 
Methods inherited from class org.opends.server.api.DirectoryThread
getAssociatedTask, getCreationStackTrace, getDebugProperties, getParentThread, setAssociatedTask
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

TRUST_MANAGER_ARRAY_KEY

public static final java.lang.String TRUST_MANAGER_ARRAY_KEY
Key that may be placed into a JMX connection environment map to provide a custom javax.net.ssl.TrustManager array for a connection.

See Also:
Constant Field Values
Constructor Detail

JmxConnectionHandler

public JmxConnectionHandler()
Creates a new instance of this JMX connection handler. It must be initialized before it may be used.

Method Detail

applyConfigurationChange

public ConfigChangeResult applyConfigurationChange(JMXConnectionHandlerCfg config)
Applies the configuration changes to this change listener.

Specified by:
applyConfigurationChange in interface ConfigurationChangeListener<JMXConnectionHandlerCfg>
Parameters:
config - The new configuration containing the changes.
Returns:
Returns information about the result of changing the configuration.

finalizeConnectionHandler

public void finalizeConnectionHandler(Message finalizeReason,
                                      boolean closeConnections)
Closes this connection handler so that it will no longer accept new client connections. It may or may not disconnect existing client connections based on the provided flag.

Specified by:
finalizeConnectionHandler in class ConnectionHandler<JMXConnectionHandlerCfg>
Parameters:
finalizeReason - The reason that this connection handler should be finalized.
closeConnections - Indicates whether any established client connections associated with the connection handler should also be closed.

getAlerts

public java.util.LinkedHashMap<java.lang.String,java.lang.String> getAlerts()
Retrieves information about the set of alerts that this generator may produce. The map returned should be between the notification type for a particular notification and the human-readable description for that notification. This alert generator must not generate any alerts with types that are not contained in this list.

Specified by:
getAlerts in interface AlertGenerator
Returns:
Information about the set of alerts that this generator may produce.

getClassName

public java.lang.String getClassName()
Retrieves the fully-qualified name of the Java class for this alert generator implementation.

Specified by:
getClassName in interface AlertGenerator
Returns:
The fully-qualified name of the Java class for this alert generator implementation.

getClientConnections

public java.util.Collection<ClientConnection> getClientConnections()
Retrieves the set of active client connections that have been established through this connection handler.

Specified by:
getClientConnections in class ConnectionHandler<JMXConnectionHandlerCfg>
Returns:
The set of active client connections that have been established through this connection handler.

getComponentEntryDN

public DN getComponentEntryDN()
Retrieves the DN of the configuration entry with which this alert generator is associated.

Specified by:
getComponentEntryDN in interface AlertGenerator
Returns:
The DN of the configuration entry with which this alert generator is associated.

getKeyManagerProviderDN

public DN getKeyManagerProviderDN()
Retrieves the DN of the key manager provider that should be used for operations associated with this connection handler which need access to a key manager.

Returns:
The DN of the key manager provider that should be used for operations associated with this connection handler which need access to a key manager, or null if no key manager provider has been configured for this connection handler.

getListenPort

public int getListenPort()
Get the JMX connection handler's listen port.

Returns:
Returns the JMX connection handler's listen port.

getRMIConnector

public RmiConnector getRMIConnector()
Get the JMX connection handler's RMI connector.

Returns:
Returns the JMX connection handler's RMI connector.

getShutdownListenerName

public java.lang.String getShutdownListenerName()
Retrieves the human-readable name for this shutdown listener.

Specified by:
getShutdownListenerName in interface ServerShutdownListener
Returns:
The human-readable name for this shutdown listener.

getSSLServerCertNickname

public java.lang.String getSSLServerCertNickname()
Retrieves the nickname of the server certificate that should be used in conjunction with this JMX connection handler.

Returns:
The nickname of the server certificate that should be used in conjunction with this JMX connection handler.

initializeConnectionHandler

public void initializeConnectionHandler(JMXConnectionHandlerCfg config)
                                 throws ConfigException,
                                        InitializationException
Initializes this connection handler provider based on the information in the provided connection handler configuration.

Specified by:
initializeConnectionHandler in class ConnectionHandler<JMXConnectionHandlerCfg>
Parameters:
config - The connection handler configuration that contains the information to use to initialize this connection handler.
Throws:
ConfigException - If an unrecoverable problem arises in the process of performing the initialization as a result of the server configuration.
InitializationException - If a problem occurs during initialization that is not related to the server configuration.

getConnectionHandlerName

public java.lang.String getConnectionHandlerName()
Retrieves a name that may be used to refer to this connection handler. Every connection handler instance (even handlers of the same type) must have a unique name.

Specified by:
getConnectionHandlerName in class ConnectionHandler<JMXConnectionHandlerCfg>
Returns:
A unique name that may be used to refer to this connection handler.

getProtocol

public java.lang.String getProtocol()
Retrieves the name of the protocol used to communicate with clients. It should take into account any special naming that may be needed to express any security mechanisms or other constraints in place (e.g., "LDAPS" for LDAP over SSL).

Specified by:
getProtocol in class ConnectionHandler<JMXConnectionHandlerCfg>
Returns:
The name of the protocol used to communicate with clients.

getListeners

public java.util.Collection<HostPort> getListeners()
Retrieves information about the listener(s) that will be used to accept client connections.

Specified by:
getListeners in class ConnectionHandler<JMXConnectionHandlerCfg>
Returns:
Information about the listener(s) that will be used to accept client connections, or an empty list if this connection handler does not accept connections from network clients.

isConfigurationAcceptable

public boolean isConfigurationAcceptable(ConnectionHandlerCfg configuration,
                                         java.util.List<Message> unacceptableReasons)
Indicates whether the provided configuration is acceptable for this connection handler. It should be possible to call this method on an uninitialized connection handler instance in order to determine whether the connection handler would be able to use the provided configuration.

Note that implementations which use a subclass of the provided configuration class will likely need to cast the configuration to the appropriate subclass type.

Overrides:
isConfigurationAcceptable in class ConnectionHandler<JMXConnectionHandlerCfg>
Parameters:
configuration - The connection handler configuration for which to make the determination.
unacceptableReasons - A list that may be used to hold the reasons that the provided configuration is not acceptable.
Returns:
true if the provided configuration is acceptable for this connection handler, or false if not.

isConfigurationChangeAcceptable

public boolean isConfigurationChangeAcceptable(JMXConnectionHandlerCfg config,
                                               java.util.List<Message> unacceptableReasons)
Indicates whether the proposed change to the configuration is acceptable to this change listener.

Specified by:
isConfigurationChangeAcceptable in interface ConfigurationChangeListener<JMXConnectionHandlerCfg>
Parameters:
config - The new configuration containing the changes.
unacceptableReasons - A list that can be used to hold messages about why the provided configuration is not acceptable.
Returns:
Returns true if the proposed change is acceptable, or false if it is not.

isUseSSL

public boolean isUseSSL()
Determines whether or not clients are allowed to connect over JMX using SSL.

Returns:
Returns true if clients are allowed to connect over JMX using SSL.

processServerShutdown

public void processServerShutdown(Message reason)
Indicates that the Directory Server has received a request to stop running and that this shutdown listener should take any action necessary to prepare for it.

Specified by:
processServerShutdown in interface ServerShutdownListener
Parameters:
reason - The human-readable reason for the shutdown.

registerClientConnection

public void registerClientConnection(ClientConnection connection)
Registers a client connection with this JMX connection handler.

Parameters:
connection - The client connection.

run

public void run()
Operates in a loop, accepting new connections and ensuring that requests on those connections are handled properly.

Specified by:
run in interface java.lang.Runnable
Specified by:
run in class ConnectionHandler<JMXConnectionHandlerCfg>

toString

public void toString(java.lang.StringBuilder buffer)
Appends a string representation of this connection handler to the provided buffer.

Specified by:
toString in class ConnectionHandler<JMXConnectionHandlerCfg>
Parameters:
buffer - The buffer to which the information should be appended.