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 <ma...@apache.org>
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: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to