Class JMXManagementService

java.lang.Object
org.apache.derby.impl.services.jmx.JMXManagementService
All Implemented Interfaces:
ManagementService, ModuleControl, ManagementMBean

public final class JMXManagementService extends Object implements ManagementService, ModuleControl
This class implements the ManagementService interface and provides a simple management and monitoring service. An mbean registered with this service remains until it is unregistered. While registered with this service it may be registered and unregistered with the jmx service a number of times.
See Also:
  • Field Details

    • mbeanServer

      private MBeanServer mbeanServer
      Platform MBean server, from ManagementFactory.getPlatformMBeanServer(). If not null then this service has registered mbeans with the plaform MBean server. If null then this service either has no mbeans registered or one mbean registered (representing itself).
    • registeredMbeans

      private Map<ObjectName,StandardMBean> registeredMbeans
      The set of mbeans registered to this service by Derby's code. These beans are registered with the platform mbean server if mbeanServer is not null.
    • myManagementBean

      private ObjectName myManagementBean
      If this object is registered as a management mbean then myManagementBean represents its name. This will be non-null when derby.system.jmx is true.
    • myManagementServer

      private MBeanServer myManagementServer
    • systemIdentifier

      private String systemIdentifier
      Runtime value to disambiguate multiple Derby systems in the same virtual machine but different class loaders. Set as the system attribute in the ObjectName for all MBeans registered.
    • CONTROL

      private static final SystemPermission CONTROL
      Control permission (permissions are immutable).
  • Constructor Details

    • JMXManagementService

      public JMXManagementService()
  • Method Details

    • boot

      public void boot(boolean create, Properties properties) throws StandardException
      Start the management service if derby.system.jmx is true.

      Starting the service means:

      • getting the platform MBeanServer which may require starting it
      • registering a Version mbean representing the system
      Specified by:
      boot in interface ModuleControl
      Throws:
      StandardException - Module cannot be started.
      See Also:
    • stop

      public void stop()
      Description copied from interface: ModuleControl
      Stop the module. The module may be found via a findModule() method until some time after this method returns. Therefore the factory must be prepared to reject requests to it once it has been stopped. In addition other modules may cache a reference to the module and make requests of it after it has been stopped, these requests should be rejected as well.
      Specified by:
      stop in interface ModuleControl
      See Also:
    • findServer

      private void findServer()
      Initialize the management service by obtaining the platform MBeanServer and registering system beans. Separate from boot() to allow future changes where the jmx management can be enabled on the fly.
    • registerMBean

      public <T> Object registerMBean(T bean, Class<T> beanInterface, String keyProperties) throws StandardException
      Registers an MBean with the MBean server as a StandardMBean. Use of the StandardMBean allows the implementation details of Derby's mbeans to be hidden from JMX, thus only exposing the MBean's interface in org.apache.derby.mbeans.
      Specified by:
      registerMBean in interface ManagementService
      Parameters:
      bean - The MBean to wrap with a StandardMBean and register
      beanInterface - The management interface for the MBean.
      keyProperties - The String representation of the MBean's key properties, they will be added into the ObjectName with Derby's domain. Key type should be first with a short name for the bean, typically the class name without the package.
      Returns:
      An identifier that can later be used to unregister the mbean.
      Throws:
      StandardException
    • jmxRegister

      private void jmxRegister(StandardMBean standardMBean, ObjectName beanName) throws JMException
      Register an mbean with the platform mbean server.
      Throws:
      JMException
    • unregisterMBean

      public void unregisterMBean(Object mbeanIdentifier)
      Unregister an mbean using an object previous returned from registerMBean.
      Specified by:
      unregisterMBean in interface ManagementService
      Parameters:
      mbeanIdentifier - An identifier returned by registerMBean.
    • unregisterMBean

      private void unregisterMBean(ObjectName mbeanName)
      Unregisters an mbean from this service and JMX plaform server
      Parameters:
      mbeanName - Bean to unregister.
    • jmxUnregister

      private void jmxUnregister(ObjectName mbeanName)
      Unregister an mbean from the JMX plaform server but leave it registered to this service. This is so that if jmx is reenabled we can reestablish all vaid mbeans (that are still registered with this service).
      Parameters:
      mbeanName -
    • isManagementActive

      public boolean isManagementActive()
      Description copied from interface: ManagementMBean
      Is Derby's JMX management active. If active then Derby has registered MBeans relevant to its current state.
      Specified by:
      isManagementActive in interface ManagementMBean
      Returns:
      true Derby has registered beans, false Derby has not registered any beans.
    • startManagement

      public void startManagement()
      Description copied from interface: ManagementMBean
      Inform Derby to start its JMX management by registering MBeans relevant to its current state. If Derby is not booted then no action is taken.

      Require SystemPermission("jmx", "control") if a security manager is installed.

      Specified by:
      startManagement in interface ManagementMBean
      See Also:
    • stopManagement

      public void stopManagement()
      Description copied from interface: ManagementMBean
      Inform Derby to stop its JMX management by unregistering its MBeans. If Derby is not booted then no action is taken.

      Require SystemPermission("jmx", "control") if a security manager is installed.

      Specified by:
      stopManagement in interface ManagementMBean
      See Also:
    • checkJMXControl

      private void checkJMXControl()
      Require SystemPermission("jmx", "control") to change the management state.
    • getSystemIdentifier

      public String getSystemIdentifier()
      Description copied from interface: ManagementMBean
      Get the system identifier that this MBean is managing. The system identifier is a runtime value to disambiguate multiple Derby systems in the same virtual machine but different class loaders.
      Specified by:
      getSystemIdentifier in interface ManagementMBean
      Returns:
      Runtime identifier for the system, null if Derby is not running.
    • quotePropertyValue

      public String quotePropertyValue(String value)
      Description copied from interface: ManagementService
      Quote an MBean key property value, so that it is safe to pass to ManagementService.registerMBean(T, java.lang.Class<T>, java.lang.String) even if it potentially contains special characters.
      Specified by:
      quotePropertyValue in interface ManagementService
      Parameters:
      value - the value to quote
      Returns:
      the quoted value
      See Also:
    • getMonitor

      private static ModuleFactory getMonitor()
      Privileged Monitor lookup. Must be private so that user code can't call this entry point.