This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch 8.5.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/8.5.x by this push:
new 443f5ee Fix SpotBugs warnings. Align with 9.0.x/7.0.x.
443f5ee is described below
commit 443f5ee0fd00e1412b69a7c8628055794d512b9f
Author: Mark Thomas <[email protected]>
AuthorDate: Thu Nov 14 21:08:12 2019 +0000
Fix SpotBugs warnings. Align with 9.0.x/7.0.x.
---
java/org/apache/tomcat/util/modeler/Registry.java | 476 ++++++++++------------
1 file changed, 226 insertions(+), 250 deletions(-)
diff --git a/java/org/apache/tomcat/util/modeler/Registry.java
b/java/org/apache/tomcat/util/modeler/Registry.java
index 0be0aff..f90d3ed 100644
--- a/java/org/apache/tomcat/util/modeler/Registry.java
+++ b/java/org/apache/tomcat/util/modeler/Registry.java
@@ -14,11 +14,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-
package org.apache.tomcat.util.modeler;
-
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
@@ -48,15 +45,15 @@ import org.apache.tomcat.util.modeler.modules.ModelerSource;
- double check the interfaces
- start removing the use of the experimental methods in tomcat, then remove
the methods ( before 1.1 final )
- - is the security enough to prevent Registry being used to avoid the
permission
- checks in the mbean server ?
+ - is the security enough to prevent Registry being used to avoid the
+ permission checks in the mbean server ?
*/
/**
* 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.
+ * This is the main entry point into modeler. It provides methods to create and
+ * manipulate model mbeans and simplify their use.
*
* This class is itself an mbean.
*
@@ -66,7 +63,8 @@ import org.apache.tomcat.util.modeler.modules.ModelerSource;
* @author Craig R. McClanahan
* @author Costin Manolache
*/
-public class Registry implements RegistryMBean, MBeanRegistration {
+public class Registry implements RegistryMBean, MBeanRegistration {
+
/**
* The Log instance to which we will write our log messages.
*/
@@ -74,13 +72,9 @@ public class Registry implements RegistryMBean,
MBeanRegistration {
// Support for the factory methods
- /** Will be used to isolate different apps and enhance security.
- */
- private static final HashMap<Object,Registry> perLoaderRegistries = null;
-
/**
- * The registry instance created by our factory method the first time
- * it is called.
+ * The registry instance created by our factory method the first time it is
+ * called.
*/
private static Registry registry = null;
@@ -90,11 +84,12 @@ public class Registry implements RegistryMBean,
MBeanRegistration {
* The <code>MBeanServer</code> instance that we will use to register
* management beans.
*/
- private MBeanServer server = null;
+ private volatile MBeanServer server = null;
+ private final Object serverLock = new Object();
/**
- * The set of ManagedBean instances for the beans this registry
- * knows about, keyed by name.
+ * The set of ManagedBean instances for the beans this registry knows
about,
+ * keyed by name.
*/
private HashMap<String,ManagedBean> descriptors = new HashMap<>();
@@ -116,8 +111,6 @@ public class Registry implements RegistryMBean,
MBeanRegistration {
// ----------------------------------------------------------- Constructors
- /**
- */
public Registry() {
super();
}
@@ -129,50 +122,22 @@ public class Registry implements RegistryMBean,
MBeanRegistration {
* Factory method to create (if necessary) and return our
* <code>Registry</code> instance.
*
- * The current version uses a static - future versions could use
- * the thread class loader.
- *
- * @param key Support for application isolation. If null, the context class
- * loader will be used ( if setUseContextClassLoader is called ) or the
- * default registry is returned.
+ * @param key Unused
* @param guard Prevent access to the registry by untrusted components
+ *
* @return the registry
* @since 1.1
*/
public static synchronized Registry getRegistry(Object key, Object guard) {
- Registry localRegistry;
- if( perLoaderRegistries!=null ) {
- if( key==null )
- key=Thread.currentThread().getContextClassLoader();
- if( key != null ) {
- localRegistry = perLoaderRegistries.get(key);
- if( localRegistry == null ) {
- localRegistry=new Registry();
-// localRegistry.key=key;
- localRegistry.guard=guard;
- perLoaderRegistries.put( key, localRegistry );
- return localRegistry;
- }
- if( localRegistry.guard != null &&
- localRegistry.guard != guard ) {
- return null; // XXX Should I throw a permission ex ?
- }
- return localRegistry;
- }
- }
-
- // static
if (registry == null) {
registry = new Registry();
}
- if( registry.guard != null &&
- registry.guard != guard ) {
+ if (registry.guard != null && registry.guard != guard) {
return null;
}
return registry;
}
- // -------------------- Generic methods --------------------
/** Lifecycle method - clean up the registry metadata.
* Called from resetMetadata().
@@ -183,9 +148,10 @@ public class Registry implements RegistryMBean,
MBeanRegistration {
public void stop() {
descriptorsByClass = new HashMap<>();
descriptors = new HashMap<>();
- searchedPaths=new HashMap<>();
+ searchedPaths = new HashMap<>();
}
+
/**
* Register a bean by creating a modeler mbean and adding it to the
* MBeanServer.
@@ -194,8 +160,9 @@ public class Registry implements RegistryMBean,
MBeanRegistration {
* "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 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.
@@ -203,36 +170,35 @@ public class Registry implements RegistryMBean,
MBeanRegistration {
* 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.
+ * 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.
*
*
* @param bean Object to be registered
* @param oname Name used for registration
* @param 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.
+ * null, the name of the class will be used. This can be used as
+ * a hint or by subclasses.
* @throws Exception if a registration error occurred
* @since 1.1
*/
@Override
- public void registerComponent(Object bean, String oname, String type)
- throws Exception
- {
+ public void registerComponent(Object bean, String oname, String type)
throws Exception {
registerComponent(bean, new ObjectName(oname), type);
}
+
/**
- * Unregister a component. We'll first check if it is registered,
- * and mask all errors. This is mostly a helper.
+ * Unregister a component. We'll first check if it is registered, and mask
+ * all errors. This is mostly a helper.
*
* @param oname Name used for unregistration
*
* @since 1.1
*/
@Override
- public void unregisterComponent( String oname ) {
+ public void unregisterComponent(String oname) {
try {
unregisterComponent(new ObjectName(oname));
} catch (MalformedObjectNameException e) {
@@ -252,29 +218,31 @@ public class Registry implements RegistryMBean,
MBeanRegistration {
* @since 1.1
*/
@Override
- public void invoke(List<ObjectName> mbeans, String operation,
- boolean failFirst ) throws Exception {
- if( mbeans==null ) {
+ public void invoke(List<ObjectName> mbeans, String operation, boolean
failFirst)
+ throws Exception {
+
+ if (mbeans == null) {
return;
}
for (ObjectName current : mbeans) {
try {
- if(current == null) {
+ if (current == null) {
continue;
}
- if(getMethodInfo(current, operation) == null) {
+ if (getMethodInfo(current, operation) == null) {
continue;
}
- getMBeanServer().invoke(current, operation,
- new Object[] {}, new String[] {});
+ getMBeanServer().invoke(current, operation, new Object[] {},
new String[] {});
- } catch( Exception t ) {
- if( failFirst ) throw t;
+ } catch (Exception t) {
+ if (failFirst)
+ throw t;
log.info("Error initializing " + current + " " + t.toString());
}
}
}
+
// -------------------- ID registry --------------------
/**
@@ -287,40 +255,41 @@ public class Registry implements RegistryMBean,
MBeanRegistration {
* @since 1.1
*/
@Override
- public synchronized int getId( String domain, String name) {
- if( domain==null) {
- domain="";
+ public synchronized int getId(String domain, String name) {
+ if (domain == null) {
+ domain = "";
}
- Hashtable<String,Integer> domainTable = idDomains.get(domain);
- if( domainTable == null ) {
+ Hashtable<String, Integer> domainTable = idDomains.get(domain);
+ if (domainTable == null) {
domainTable = new Hashtable<>();
- idDomains.put( domain, domainTable);
+ idDomains.put(domain, domainTable);
}
- if( name==null ) {
- name="";
+ if (name == null) {
+ name = "";
}
Integer i = domainTable.get(name);
- if( i!= null ) {
+ if (i != null) {
return i.intValue();
}
int id[] = ids.get(domain);
- if( id == null ) {
- id=new int[1];
- ids.put( domain, id);
+ if (id == null) {
+ id = new int[1];
+ ids.put(domain, id);
}
- int code=id[0]++;
- domainTable.put( name, Integer.valueOf( code ));
+ int code = id[0]++;
+ domainTable.put(name, Integer.valueOf(code));
return code;
}
- // -------------------- Metadata --------------------
+
+ // -------------------- Metadata --------------------
// methods from 1.0
/**
- * Add a new bean metadata to the set of beans known to this registry.
- * This is used by internal components.
+ * Add a new bean metadata to the set of beans known to this registry. This
+ * is used by internal components.
*
* @param bean The managed bean to be added
* @since 1.0
@@ -328,30 +297,31 @@ public class Registry implements RegistryMBean,
MBeanRegistration {
public void addManagedBean(ManagedBean bean) {
// XXX Use group + name
descriptors.put(bean.getName(), bean);
- if( bean.getType() != null ) {
- descriptorsByClass.put( bean.getType(), bean );
+ if (bean.getType() != null) {
+ descriptorsByClass.put(bean.getType(), bean);
}
}
/**
- * Find and return the managed bean definition for the specified
- * bean name, if any; otherwise return <code>null</code>.
+ * Find and return the managed bean definition for the specified bean name,
+ * if any; otherwise return <code>null</code>.
*
* @param 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.
+ * short names or the full name of the class can be used.
* @return the managed bean
* @since 1.0
*/
public ManagedBean findManagedBean(String name) {
// XXX Group ?? Use Group + Type
ManagedBean mb = descriptors.get(name);
- if( mb==null )
+ if (mb == null)
mb = descriptorsByClass.get(name);
return mb;
}
- // -------------------- Helpers --------------------
+
+ // -------------------- Helpers --------------------
/**
* Get the type of an attribute of the object, from the metadata.
@@ -361,27 +331,27 @@ public class Registry implements RegistryMBean,
MBeanRegistration {
* @return null if metadata about the attribute is not found
* @since 1.1
*/
- public String getType( ObjectName oname, String attName )
- {
- String type=null;
- MBeanInfo info=null;
+ public String getType(ObjectName oname, String attName) {
+ String type = null;
+ MBeanInfo info = null;
try {
- info=server.getMBeanInfo(oname);
+ info = getMBeanServer().getMBeanInfo(oname);
} catch (Exception e) {
log.info( "Can't find metadata for object" + oname );
return null;
}
- MBeanAttributeInfo attInfo[]=info.getAttributes();
- for( int i=0; i<attInfo.length; i++ ) {
- if( attName.equals(attInfo[i].getName())) {
- type=attInfo[i].getType();
+ MBeanAttributeInfo attInfo[] = info.getAttributes();
+ for (int i = 0; i < attInfo.length; i++) {
+ if (attName.equals(attInfo[i].getName())) {
+ type = attInfo[i].getType();
return type;
}
}
return null;
}
+
/**
* Find the operation info for a method
*
@@ -389,31 +359,31 @@ public class Registry implements RegistryMBean,
MBeanRegistration {
* @param opName The operation name
* @return the operation info for the specified operation
*/
- public MBeanOperationInfo getMethodInfo( ObjectName oname, String opName )
- {
- MBeanInfo info=null;
+ public MBeanOperationInfo getMethodInfo(ObjectName oname, String opName) {
+ MBeanInfo info = null;
try {
- info=server.getMBeanInfo(oname);
+ info = getMBeanServer().getMBeanInfo(oname);
} catch (Exception e) {
log.info( "Can't find metadata " + oname );
return null;
}
- MBeanOperationInfo attInfo[]=info.getOperations();
- for( int i=0; i<attInfo.length; i++ ) {
- if( opName.equals(attInfo[i].getName())) {
+ MBeanOperationInfo attInfo[] = info.getOperations();
+ for (int i = 0; i < attInfo.length; i++) {
+ if (opName.equals(attInfo[i].getName())) {
return attInfo[i];
}
}
return null;
}
+
/**
- * Unregister a component. This is just a helper that
- * avoids exceptions by checking if the mbean is already registered
+ * Unregister a component. This is just a helper that avoids exceptions by
+ * checking if the mbean is already registered
*
* @param oname The bean name
*/
- public void unregisterComponent( ObjectName oname ) {
+ public void unregisterComponent(ObjectName oname) {
try {
if (oname != null && getMBeanServer().isRegistered(oname)) {
getMBeanServer().unregisterMBean(oname);
@@ -423,76 +393,85 @@ public class Registry implements RegistryMBean,
MBeanRegistration {
}
}
+
/**
* Factory method to create (if necessary) and return our
* <code>MBeanServer</code> instance.
+ *
* @return the MBean server
*/
- public synchronized MBeanServer getMBeanServer() {
+ public MBeanServer getMBeanServer() {
if (server == null) {
- long t1 = System.currentTimeMillis();
- if (MBeanServerFactory.findMBeanServer(null).size() > 0) {
- server = MBeanServerFactory.findMBeanServer(null).get(0);
- if (log.isDebugEnabled()) {
- log.debug("Using existing MBeanServer " +
(System.currentTimeMillis() - t1));
- }
- } else {
- server = ManagementFactory.getPlatformMBeanServer();
- if (log.isDebugEnabled()) {
- log.debug("Creating MBeanServer" +
(System.currentTimeMillis() - t1));
+ synchronized (serverLock) {
+ if (server == null) {
+ long t1 = System.currentTimeMillis();
+ if (MBeanServerFactory.findMBeanServer(null).size() > 0) {
+ server =
MBeanServerFactory.findMBeanServer(null).get(0);
+ if (log.isDebugEnabled()) {
+ log.debug("Using existing MBeanServer " +
(System.currentTimeMillis() - t1));
+ }
+ } else {
+ server = ManagementFactory.getPlatformMBeanServer();
+ if (log.isDebugEnabled()) {
+ log.debug("Creating MBeanServer" +
(System.currentTimeMillis() - t1));
+ }
+ }
}
}
}
return server;
}
+
/**
* Find or load metadata.
+ *
* @param bean The bean
* @param beanClass The bean class
* @param type The registry type
* @return the managed bean
* @throws Exception An error occurred
*/
- public ManagedBean findManagedBean(Object bean, Class<?> beanClass,
- String type) throws Exception {
- if( bean!=null && beanClass==null ) {
- beanClass=bean.getClass();
+ public ManagedBean findManagedBean(Object bean, Class<?> beanClass, String
type)
+ throws Exception {
+
+ if (bean != null && beanClass == null) {
+ beanClass = bean.getClass();
}
- if( type==null ) {
- type=beanClass.getName();
+ if (type == null) {
+ type = beanClass.getName();
}
// first look for existing descriptor
ManagedBean managed = findManagedBean(type);
// Search for a descriptor in the same package
- if( managed==null ) {
+ if (managed == null) {
// check package and parent packages
- if( log.isDebugEnabled() ) {
- log.debug( "Looking for descriptor ");
+ if (log.isDebugEnabled()) {
+ log.debug("Looking for descriptor ");
}
- findDescriptor( beanClass, type );
+ findDescriptor(beanClass, type);
- managed=findManagedBean(type);
+ managed = findManagedBean(type);
}
// Still not found - use introspection
- if( managed==null ) {
- if( log.isDebugEnabled() ) {
- log.debug( "Introspecting ");
+ if (managed == null) {
+ if (log.isDebugEnabled()) {
+ log.debug("Introspecting ");
}
// introspection
load("MbeansDescriptorsIntrospectionSource", beanClass, type);
- managed=findManagedBean(type);
- if( managed==null ) {
+ managed = findManagedBean(type);
+ if (managed == null) {
log.warn( "No metadata found for " + type );
return null;
}
- managed.setName( type );
+ managed.setName(type);
addManagedBean(managed);
}
return managed;
@@ -501,40 +480,36 @@ public class Registry implements RegistryMBean,
MBeanRegistration {
/**
* 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
+ * components. We could provide some pluggability. It is here to keep
things
+ * consistent and avoid duplication in other tasks
*
* @param type Fully qualified class name of the resulting value
* @param value String value to be converted
* @return Converted value
*/
- public Object convertValue(String type, String value)
- {
- Object objValue=value;
+ public Object convertValue(String type, String value) {
+ Object objValue = value;
- if( type==null || "java.lang.String".equals( type )) {
+ if (type == null || "java.lang.String".equals(type)) {
// string is default
- objValue=value;
- } else if( "javax.management.ObjectName".equals( type ) ||
- "ObjectName".equals( type )) {
+ objValue = value;
+ } else if ("javax.management.ObjectName".equals(type) ||
"ObjectName".equals(type)) {
try {
- objValue=new ObjectName( value );
+ objValue = new ObjectName(value);
} catch (MalformedObjectNameException e) {
return null;
}
- } else if( "java.lang.Integer".equals( type ) ||
- "int".equals( type )) {
- objValue=Integer.valueOf( value );
- } else if( "java.lang.Long".equals( type ) ||
- "long".equals( type )) {
- objValue=Long.valueOf( value );
- } else if( "java.lang.Boolean".equals( type ) ||
- "boolean".equals( type )) {
- objValue=Boolean.valueOf( value );
+ } else if ("java.lang.Integer".equals(type) || "int".equals(type)) {
+ objValue = Integer.valueOf(value);
+ } else if ("java.lang.Long".equals(type) || "long".equals(type)) {
+ objValue = Long.valueOf(value);
+ } else if ("java.lang.Boolean".equals(type) || "boolean".equals(type))
{
+ objValue = Boolean.valueOf(value);
}
return objValue;
}
+
/**
* Experimental. Load descriptors.
*
@@ -544,48 +519,46 @@ public class Registry implements RegistryMBean,
MBeanRegistration {
* @return List of descriptors
* @throws Exception Error loading descriptors
*/
- public List<ObjectName> load( String sourceType, Object source,
- String param) throws Exception {
- if( log.isTraceEnabled()) {
- log.trace("load " + source );
- }
- String location=null;
- String type=null;
- Object inputsource=null;
-
- if( source instanceof URL ) {
- URL url=(URL)source;
- location=url.toString();
- type=param;
- inputsource=url.openStream();
+ public List<ObjectName> load(String sourceType, Object source, String
param) throws Exception {
+ if (log.isTraceEnabled()) {
+ log.trace("load " + source);
+ }
+ String location = null;
+ String type = null;
+ Object inputsource = null;
+
+ if (source instanceof URL) {
+ URL url = (URL) source;
+ location = url.toString();
+ type = param;
+ inputsource = url.openStream();
if (sourceType == null && location.endsWith(".xml")) {
sourceType = "MbeansDescriptorsDigesterSource";
}
- } else if( source instanceof File ) {
- location=((File)source).getAbsolutePath();
- inputsource=new FileInputStream((File)source);
- type=param;
+ } else if (source instanceof File) {
+ location = ((File) source).getAbsolutePath();
+ inputsource = new FileInputStream((File) source);
+ type = param;
if (sourceType == null && location.endsWith(".xml")) {
sourceType = "MbeansDescriptorsDigesterSource";
}
- } else if( source instanceof InputStream ) {
- type=param;
- inputsource=source;
- } else if( source instanceof Class<?> ) {
- location=((Class<?>)source).getName();
- type=param;
- inputsource=source;
- if( sourceType== null ) {
- sourceType="MbeansDescriptorsIntrospectionSource";
+ } else if (source instanceof InputStream) {
+ type = param;
+ inputsource = source;
+ } else if (source instanceof Class<?>) {
+ location = ((Class<?>) source).getName();
+ type = param;
+ inputsource = source;
+ if (sourceType == null) {
+ sourceType = "MbeansDescriptorsIntrospectionSource";
}
}
- if( sourceType==null ) {
- sourceType="MbeansDescriptorsDigesterSource";
+ if (sourceType == null) {
+ sourceType = "MbeansDescriptorsDigesterSource";
}
- ModelerSource ds=getModelerSource(sourceType);
- List<ObjectName> mbeans =
- ds.loadDescriptors(this, type, inputsource);
+ ModelerSource ds = getModelerSource(sourceType);
+ List<ObjectName> mbeans = ds.loadDescriptors(this, type, inputsource);
return mbeans;
}
@@ -599,21 +572,19 @@ public class Registry implements RegistryMBean,
MBeanRegistration {
* @param type The registry type
* @throws Exception Error registering component
*/
- public void registerComponent(Object bean, ObjectName oname, String type)
- throws Exception
- {
- if( log.isDebugEnabled() ) {
- log.debug( "Managed= "+ oname);
+ public void registerComponent(Object bean, ObjectName oname, String type)
throws Exception {
+ if (log.isDebugEnabled()) {
+ log.debug("Managed= " + oname);
}
- if( bean ==null ) {
+ if (bean == null) {
log.error("Null component " + oname );
return;
}
try {
- if( type==null ) {
- type=bean.getClass().getName();
+ if (type == null) {
+ type = bean.getClass().getName();
}
ManagedBean managed = findManagedBean(null, bean.getClass(), type);
@@ -621,47 +592,48 @@ public class Registry implements RegistryMBean,
MBeanRegistration {
// The real mbean is created and registered
DynamicMBean mbean = managed.createMBean(bean);
- if( getMBeanServer().isRegistered( oname )) {
- if( log.isDebugEnabled()) {
- log.debug("Unregistering existing component " + oname );
+ if (getMBeanServer().isRegistered(oname)) {
+ if (log.isDebugEnabled()) {
+ log.debug("Unregistering existing component " + oname);
}
- getMBeanServer().unregisterMBean( oname );
+ getMBeanServer().unregisterMBean(oname);
}
- getMBeanServer().registerMBean( mbean, oname);
- } catch( Exception ex) {
+ getMBeanServer().registerMBean(mbean, oname);
+ } catch (Exception ex) {
log.error("Error registering " + oname, ex );
throw ex;
}
}
+
/**
- * Lookup the component descriptor in the package and
- * in the parent packages.
+ * Lookup the component descriptor in the package and in the parent
+ * packages.
*
* @param packageName The package name
* @param classLoader The class loader
*/
- public void loadDescriptors( String packageName, ClassLoader classLoader
) {
- String res=packageName.replace( '.', '/');
+ public void loadDescriptors(String packageName, ClassLoader classLoader) {
+ String res = packageName.replace('.', '/');
- if( log.isTraceEnabled() ) {
- log.trace("Finding descriptor " + res );
+ if (log.isTraceEnabled()) {
+ log.trace("Finding descriptor " + res);
}
- if( searchedPaths.get( packageName ) != null ) {
+ if (searchedPaths.get(packageName) != null) {
return;
}
String descriptors = res + "/mbeans-descriptors.xml";
- URL dURL = classLoader.getResource( descriptors );
+ URL dURL = classLoader.getResource(descriptors);
if (dURL == null) {
return;
}
- log.debug( "Found " + dURL);
- searchedPaths.put( packageName, dURL );
+ log.debug("Found " + dURL);
+ searchedPaths.put(packageName, dURL);
try {
load("MbeansDescriptorsDigesterSource", dURL, null);
} catch(Exception ex ) {
@@ -669,71 +641,75 @@ public class Registry implements RegistryMBean,
MBeanRegistration {
}
}
+
/**
- * Lookup the component descriptor in the package and
- * in the parent packages.
+ * Lookup the component descriptor in the package and in the parent
+ * packages.
*/
private void findDescriptor(Class<?> beanClass, String type) {
- if( type==null ) {
- type=beanClass.getName();
+ if (type == null) {
+ type = beanClass.getName();
}
- ClassLoader classLoader=null;
- if( beanClass!=null ) {
- classLoader=beanClass.getClassLoader();
+ ClassLoader classLoader = null;
+ if (beanClass != null) {
+ classLoader = beanClass.getClassLoader();
}
- if( classLoader==null ) {
- classLoader=Thread.currentThread().getContextClassLoader();
+ if (classLoader == null) {
+ classLoader = Thread.currentThread().getContextClassLoader();
}
- if( classLoader==null ) {
- classLoader=this.getClass().getClassLoader();
+ if (classLoader == null) {
+ classLoader = this.getClass().getClassLoader();
}
- String className=type;
- String pkg=className;
- while( pkg.indexOf( ".") > 0 ) {
- int lastComp=pkg.lastIndexOf( ".");
- if( lastComp <= 0 ) return;
- pkg=pkg.substring(0, lastComp);
- if( searchedPaths.get( pkg ) != null ) {
+ String className = type;
+ String pkg = className;
+ while (pkg.indexOf(".") > 0) {
+ int lastComp = pkg.lastIndexOf(".");
+ if (lastComp <= 0)
+ return;
+ pkg = pkg.substring(0, lastComp);
+ if (searchedPaths.get(pkg) != null) {
return;
}
loadDescriptors(pkg, classLoader);
}
- return;
}
- private ModelerSource getModelerSource( String type )
- throws Exception
- {
- if( type==null ) type="MbeansDescriptorsDigesterSource";
- if( type.indexOf( ".") < 0 ) {
- type="org.apache.tomcat.util.modeler.modules." + type;
+
+ private ModelerSource getModelerSource(String type) throws Exception {
+ if (type == null)
+ type = "MbeansDescriptorsDigesterSource";
+ if (!type.contains(".")) {
+ type = "org.apache.tomcat.util.modeler.modules." + type;
}
Class<?> c = Class.forName(type);
- ModelerSource ds=(ModelerSource)c.getConstructor().newInstance();
+ ModelerSource ds = (ModelerSource) c.getConstructor().newInstance();
return ds;
}
- // -------------------- Registration --------------------
+ // -------------------- Registration --------------------
@Override
- public ObjectName preRegister(MBeanServer server,
- ObjectName name) throws Exception
- {
- this.server=server;
+ public ObjectName preRegister(MBeanServer server, ObjectName name) throws
Exception {
+ synchronized (serverLock) {
+ this.server = server;
+ }
return name;
}
+
@Override
public void postRegister(Boolean registrationDone) {
}
+
@Override
public void preDeregister() throws Exception {
}
+
@Override
public void postDeregister() {
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]