org.apache.tomcat.util.modeler
Class Registry

java.lang.Object
  extended by org.apache.tomcat.util.modeler.Registry
All Implemented Interfaces:
javax.management.MBeanRegistration, RegistryMBean

public class Registry
extends java.lang.Object
implements RegistryMBean, javax.management.MBeanRegistration

Registry for modeler MBeans. This is the main entry point into modeler. It provides methods to create and manipulate model mbeans and simplify their use. Starting with version 1.1, this is no longer a singleton and the static methods are strongly deprecated. In a container environment we can expect different applications to use different registries. This class is itself an mbean. IMPORTANT: public methods not marked with @since x.x are experimental or internal. Should not be used.

Author:
Craig R. McClanahan, Costin Manolache

Constructor Summary
Registry()
           
 
Method Summary
 void addManagedBean(ManagedBean bean)
          Add a new bean metadata to the set of beans known to this registry.
 java.lang.Object convertValue(java.lang.String type, java.lang.String value)
          EXPERIMENTAL Convert a string to object, based on type.
 ManagedBean findManagedBean(java.lang.Class beanClass, java.lang.String type)
           
 ManagedBean findManagedBean(java.lang.Object bean, java.lang.Class beanClass, java.lang.String type)
          Find or load metadata.
 ManagedBean findManagedBean(java.lang.String name)
          Find and return the managed bean definition for the specified bean name, if any; otherwise return null.
 java.lang.String[] findManagedBeans()
          Return the set of bean names for all managed beans known to this registry.
 java.lang.String[] findManagedBeans(java.lang.String group)
          Return the set of bean names for all managed beans known to this registry that belong to the specified group.
 int getId(java.lang.String domain, java.lang.String name)
          Return an int ID for faster access.
 javax.management.MBeanServer getMBeanServer()
          Factory method to create (if necessary) and return our MBeanServer instance.
 javax.management.MBeanOperationInfo getMethodInfo(javax.management.ObjectName oname, java.lang.String opName)
          Find the operation info for a method
static Registry getRegistry()
          Deprecated. Not enough info - use the method that takes CL and domain
static Registry getRegistry(java.lang.Object key, java.lang.Object guard)
          Factory method to create (if necessary) and return our Registry instance.
static javax.management.MBeanServer getServer()
          Deprecated. Use the instance method
 java.lang.String getType(javax.management.ObjectName oname, java.lang.String attName)
          Get the type of an attribute of the object, from the metadata.
 void invoke(java.util.List mbeans, java.lang.String operation, boolean failFirst)
          Invoke a operation on a list of mbeans.
 java.util.List load(java.lang.String sourceType, java.lang.Object source, java.lang.String param)
          Deprecated. bad interface, mixing of metadata and mbeans
 void loadCachedDescriptors(java.lang.Object source)
          Deprecated. Loaded automatically or using a File or Url ending in .ser
 void loadDescriptors(java.lang.Object source)
          Load the registry from the XML input found in the specified input stream.
 void loadDescriptors(java.lang.String packageName, java.lang.ClassLoader classLoader)
          Lookup the component descriptor in the package and in the parent packages.
 void loadDescriptors(java.lang.String sourceType, java.lang.Object source, java.lang.String param)
          Deprecated.  
 java.util.List loadMBeans(java.lang.Object source, java.lang.ClassLoader cl)
          Load an extended mlet file.
 void loadMetadata(java.lang.Object source)
          Load descriptors.
static void loadRegistry(java.io.InputStream stream)
          Deprecated. use normal class method instead
 void postDeregister()
           
 void postRegister(java.lang.Boolean registrationDone)
           
 void preDeregister()
           
 javax.management.ObjectName preRegister(javax.management.MBeanServer server, javax.management.ObjectName name)
           
 void registerComponent(java.lang.Object bean, javax.management.ObjectName oname, java.lang.String type)
          Register a component XXX make it private
 void registerComponent(java.lang.Object bean, java.lang.String oname, java.lang.String type)
          Register a bean by creating a modeler mbean and adding it to the MBeanServer.
 void registerComponent(java.lang.Object bean, java.lang.String domain, java.lang.String type, java.lang.String name)
          Deprecated. - may still be used in code using pre-1.1 builds
 void removeManagedBean(ManagedBean bean)
          Remove an existing bean from the set of beans known to this registry.
 void resetMetadata()
           
 void setMBeanServer(javax.management.MBeanServer server)
          Set the MBeanServer to be utilized for our registered management beans.
static void setServer(javax.management.MBeanServer mbeanServer)
          Deprecated. Use the instance method
static void setUseContextClassLoader(boolean enable)
          Allow containers to isolate apps.
 void stop()
          Lifecycle method - clean up the registry metadata.
 void unregisterComponent(javax.management.ObjectName oname)
          Unregister a component.
 void unregisterComponent(java.lang.String oname)
          Unregister a component.
 void unregisterComponent(java.lang.String domain, java.lang.String name)
           
 void unregisterRegistry(java.lang.ClassLoader loader)
          Called by a registry or by the container to unload a loader
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Registry

public Registry()
Method Detail

getRegistry

public static Registry getRegistry(java.lang.Object key,
                                   java.lang.Object guard)
Factory method to create (if necessary) and return our Registry instance. Use this method to obtain a Registry - all other static methods are deprecated and shouldn't be used. The current version uses a static - future versions could use the thread class loader.

Parameters:
key - Support for application isolation. If null, the context class loader will be used ( if setUseContextClassLoader is called ) or the default registry is returned.
guard - Prevent access to the registry by untrusted components
Since:
1.1

setUseContextClassLoader

public static void setUseContextClassLoader(boolean enable)
Allow containers to isolate apps. Can be called only once. It is highly recommended you call this method if using Registry in a container environment. The default is false for backward compatibility

Parameters:
enable -
Since:
1.1

stop

public void stop()
Lifecycle method - clean up the registry metadata. Called from resetMetadata().

Specified by:
stop in interface RegistryMBean
Since:
1.1

loadMBeans

public java.util.List loadMBeans(java.lang.Object source,
                                 java.lang.ClassLoader cl)
                          throws java.lang.Exception
Load an extended mlet file. The source can be an URL, File or InputStream. All mbeans will be instantiated, registered and the attributes will be set. The result is a list of ObjectNames.

Specified by:
loadMBeans in interface RegistryMBean
Parameters:
source - InputStream or URL of the file
cl - ClassLoader to be used to load the mbeans, or null to use the default JMX mechanism ( i.e. all registered loaders )
Returns:
List of ObjectName for the loaded mbeans
Throws:
java.lang.Exception
Since:
1.1

loadMetadata

public void loadMetadata(java.lang.Object source)
                  throws java.lang.Exception
Load descriptors. The source can be a File or URL or InputStream for the descriptors file. In the case of File and URL, if the extension is ".ser" a serialized version will be loaded. This method should be used to explicitely load metadata - but this is not required in most cases. The registerComponent() method will find metadata in the same pacakge.

Specified by:
loadMetadata in interface RegistryMBean
Parameters:
source -
Throws:
java.lang.Exception

registerComponent

public void registerComponent(java.lang.Object bean,
                              java.lang.String oname,
                              java.lang.String type)
                       throws java.lang.Exception
Register a bean by creating a modeler mbean and adding it to the MBeanServer. If metadata is not loaded, we'll look up and read a file named "mbeans-descriptors.ser" or "mbeans-descriptors.xml" in the same package or parent. If the bean is an instance of DynamicMBean. it's metadata will be converted to a model mbean and we'll wrap it - so modeler services will be supported If the metadata is still not found, introspection will be used to extract it automatically. If an mbean is already registered under this name, it'll be first unregistered. If the component implements MBeanRegistration, the methods will be called. If the method has a method "setRegistry" that takes a RegistryMBean as parameter, it'll be called with the current registry.

Specified by:
registerComponent in interface RegistryMBean
Parameters:
bean - Object to be registered
oname - Name used for registration
type - The type of the mbean, as declared in mbeans-descriptors. If null, the name of the class will be used. This can be used as a hint or by subclasses.
Throws:
java.lang.Exception
Since:
1.1

unregisterComponent

public void unregisterComponent(java.lang.String oname)
Unregister a component. We'll first check if it is registered, and mask all errors. This is mostly a helper.

Specified by:
unregisterComponent in interface RegistryMBean
Parameters:
oname -
Since:
1.1

invoke

public void invoke(java.util.List mbeans,
                   java.lang.String operation,
                   boolean failFirst)
            throws java.lang.Exception
Invoke a operation on a list of mbeans. Can be used to implement lifecycle operations.

Specified by:
invoke in interface RegistryMBean
Parameters:
mbeans - list of ObjectName on which we'll invoke the operations
operation - Name of the operation ( init, start, stop, etc)
failFirst - If false, exceptions will be ignored
Throws:
java.lang.Exception
Since:
1.1

getId

public int getId(java.lang.String domain,
                 java.lang.String name)
Return an int ID for faster access. Will be used for notifications and for other operations we want to optimize.

Specified by:
getId in interface RegistryMBean
Parameters:
domain - Namespace
name - Type of the notification
Returns:
An unique id for the domain:name combination
Since:
1.1

addManagedBean

public void addManagedBean(ManagedBean bean)
Add a new bean metadata to the set of beans known to this registry. This is used by internal components.

Parameters:
bean - The managed bean to be added
Since:
1.0

findManagedBean

public ManagedBean findManagedBean(java.lang.String name)
Find and return the managed bean definition for the specified bean name, if any; otherwise return null.

Parameters:
name - Name of the managed bean to be returned. Since 1.1, both short names or the full name of the class can be used.
Since:
1.0

findManagedBeans

public java.lang.String[] findManagedBeans()
Return the set of bean names for all managed beans known to this registry.

Since:
1.0

findManagedBeans

public java.lang.String[] findManagedBeans(java.lang.String group)
Return the set of bean names for all managed beans known to this registry that belong to the specified group.

Parameters:
group - Name of the group of interest, or null to select beans that do not belong to a group
Since:
1.0

removeManagedBean

public void removeManagedBean(ManagedBean bean)
Remove an existing bean from the set of beans known to this registry.

Parameters:
bean - The managed bean to be removed
Since:
1.0

getServer

public static javax.management.MBeanServer getServer()
Deprecated. Use the instance method

Factory method to create (if necessary) and return our MBeanServer instance.

Since:
1.0

setServer

public static void setServer(javax.management.MBeanServer mbeanServer)
Deprecated. Use the instance method

Set the MBeanServer to be utilized for our registered management beans.

Parameters:
mbeanServer - The new MBeanServer instance
Since:
1.0

loadRegistry

public static void loadRegistry(java.io.InputStream stream)
                         throws java.lang.Exception
Deprecated. use normal class method instead

Load the registry from the XML input found in the specified input stream.

Parameters:
stream - InputStream containing the registry configuration information
Throws:
java.lang.Exception - if any parsing or processing error occurs
Since:
1.0

getRegistry

public static Registry getRegistry()
Deprecated. Not enough info - use the method that takes CL and domain

Get a "singelton" registry, or one per thread if setUseContextLoader was called

Since:
1.0

getType

public java.lang.String getType(javax.management.ObjectName oname,
                                java.lang.String attName)
Get the type of an attribute of the object, from the metadata.

Parameters:
oname -
attName -
Returns:
null if metadata about the attribute is not found
Since:
1.1

getMethodInfo

public javax.management.MBeanOperationInfo getMethodInfo(javax.management.ObjectName oname,
                                                         java.lang.String opName)
Find the operation info for a method

Parameters:
oname -
opName -
Returns:
the operation info for the specified operation

unregisterComponent

public void unregisterComponent(javax.management.ObjectName oname)
Unregister a component. This is just a helper that avoids exceptions by checking if the mbean is already registered

Parameters:
oname -

getMBeanServer

public javax.management.MBeanServer getMBeanServer()
Factory method to create (if necessary) and return our MBeanServer instance.


findManagedBean

public ManagedBean findManagedBean(java.lang.Object bean,
                                   java.lang.Class beanClass,
                                   java.lang.String type)
                            throws java.lang.Exception
Find or load metadata.

Throws:
java.lang.Exception

convertValue

public java.lang.Object convertValue(java.lang.String type,
                                     java.lang.String value)
EXPERIMENTAL Convert a string to object, based on type. Used by several components. We could provide some pluggability. It is here to keep things consistent and avoid duplication in other tasks

Parameters:
type - Fully qualified class name of the resulting value
value - String value to be converted
Returns:
Converted value

load

public java.util.List load(java.lang.String sourceType,
                           java.lang.Object source,
                           java.lang.String param)
                    throws java.lang.Exception
Deprecated. bad interface, mixing of metadata and mbeans

Experimental.

Parameters:
sourceType -
source -
param -
Returns:
List of descriptors
Throws:
java.lang.Exception

registerComponent

public void registerComponent(java.lang.Object bean,
                              javax.management.ObjectName oname,
                              java.lang.String type)
                       throws java.lang.Exception
Register a component XXX make it private

Parameters:
bean -
oname -
type -
Throws:
java.lang.Exception

loadDescriptors

public void loadDescriptors(java.lang.String packageName,
                            java.lang.ClassLoader classLoader)
Lookup the component descriptor in the package and in the parent packages.

Parameters:
packageName -

loadDescriptors

public void loadDescriptors(java.lang.String sourceType,
                            java.lang.Object source,
                            java.lang.String param)
                     throws java.lang.Exception
Deprecated. 

Experimental. Will become private, some code may still use it

Parameters:
sourceType -
source -
param -
Throws:
java.lang.Exception

preRegister

public javax.management.ObjectName preRegister(javax.management.MBeanServer server,
                                               javax.management.ObjectName name)
                                        throws java.lang.Exception
Specified by:
preRegister in interface javax.management.MBeanRegistration
Throws:
java.lang.Exception

postRegister

public void postRegister(java.lang.Boolean registrationDone)
Specified by:
postRegister in interface javax.management.MBeanRegistration

preDeregister

public void preDeregister()
                   throws java.lang.Exception
Specified by:
preDeregister in interface javax.management.MBeanRegistration
Throws:
java.lang.Exception

postDeregister

public void postDeregister()
Specified by:
postDeregister in interface javax.management.MBeanRegistration

unregisterRegistry

public void unregisterRegistry(java.lang.ClassLoader loader)
Called by a registry or by the container to unload a loader

Parameters:
loader -

findManagedBean

public ManagedBean findManagedBean(java.lang.Class beanClass,
                                   java.lang.String type)
                            throws java.lang.Exception
Throws:
java.lang.Exception

setMBeanServer

public void setMBeanServer(javax.management.MBeanServer server)
Set the MBeanServer to be utilized for our registered management beans.

Parameters:
server - The new MBeanServer instance

resetMetadata

public void resetMetadata()

loadDescriptors

public void loadDescriptors(java.lang.Object source)
                     throws java.lang.Exception
Load the registry from the XML input found in the specified input stream.

Parameters:
source - Source to be used to load. Can be an InputStream or URL.
Throws:
java.lang.Exception - if any parsing or processing error occurs

registerComponent

public void registerComponent(java.lang.Object bean,
                              java.lang.String domain,
                              java.lang.String type,
                              java.lang.String name)
                       throws java.lang.Exception
Deprecated. - may still be used in code using pre-1.1 builds

Throws:
java.lang.Exception

unregisterComponent

public void unregisterComponent(java.lang.String domain,
                                java.lang.String name)

loadCachedDescriptors

public void loadCachedDescriptors(java.lang.Object source)
                           throws java.lang.Exception
Deprecated. Loaded automatically or using a File or Url ending in .ser

Load the registry from a cached .ser file. This is typically 2-3 times faster than parsing the XML.

Parameters:
source - Source to be used to load. Can be an InputStream or URL.
Throws:
java.lang.Exception - if any parsing or processing error occurs


Copyright © 2000-2009 Apache Software Foundation. All Rights Reserved.