mx4j/src/core/mx4j/remote ProviderFactory.java,1.6,1.7

Simone Bordet <[email protected]> Fri, 18 Feb 2005 15:23:10 +0000
Newsgroups gmane.comp.java.mx4j.cvs
Message-ID <[email protected]>
Update of /cvsroot/mx4j/mx4j/src/core/mx4j/remote
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25782/src/core/mx4j/remote

Modified Files:
	ProviderFactory.java 
Log Message:
Checking that providers, when called to create a JMXConnector[Server], are creating one corresponding to the JMXServiceURL passed in.

Index: ProviderFactory.java
===================================================================
RCS file: /cvsroot/mx4j/mx4j/src/core/mx4j/remote/ProviderFactory.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** ProviderFactory.java	17 Feb 2005 05:33:04 -0000	1.6
--- ProviderFactory.java	18 Feb 2005 15:23:07 -0000	1.7
***************
*** 13,17 ****
  import java.io.InputStream;
  import java.io.InputStreamReader;
- import java.lang.reflect.Array;
  import java.net.MalformedURLException;
  import java.net.URL;
--- 13,16 ----
***************
*** 20,23 ****
--- 19,23 ----
  import java.security.PrivilegedExceptionAction;
  import java.util.ArrayList;
+ import java.util.Collections;
  import java.util.Enumeration;
  import java.util.List;
***************
*** 25,30 ****
--- 25,33 ----
  import java.util.StringTokenizer;
  
+ import javax.management.MBeanServer;
+ import javax.management.remote.JMXConnector;
  import javax.management.remote.JMXConnectorFactory;
  import javax.management.remote.JMXConnectorProvider;
+ import javax.management.remote.JMXConnectorServer;
  import javax.management.remote.JMXConnectorServerFactory;
  import javax.management.remote.JMXConnectorServerProvider;
***************
*** 39,43 ****
  public class ProviderFactory extends ProviderHelper
  {
!    public static JMXConnectorProvider newJMXConnectorProvider(JMXServiceURL url, Map env) throws IOException
     {
        // Yes, throw NPE if url is null (spec compliant)
--- 42,46 ----
  public class ProviderFactory extends ProviderHelper
  {
!    public static JMXConnector newJMXConnector(JMXServiceURL url, Map env) throws IOException
     {
        // Yes, throw NPE if url is null (spec compliant)
***************
*** 45,53 ****
        String providerPackages = findProviderPackageList(env, JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES);
        ClassLoader classLoader = findProviderClassLoader(env, JMXConnectorFactory.PROTOCOL_PROVIDER_CLASS_LOADER);
!       JMXConnectorProvider provider = (JMXConnectorProvider)loadProvider(JMXConnectorProvider.class, providerPackages, protocol, MX4JRemoteConstants.CLIENT_PROVIDER_CLASS, classLoader);
!       return provider;
     }
  
!    public static JMXConnectorServerProvider newJMXConnectorServerProvider(JMXServiceURL url, Map env) throws IOException
     {
        // Yes, throw NPE if url is null (spec compliant)
--- 48,72 ----
        String providerPackages = findProviderPackageList(env, JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES);
        ClassLoader classLoader = findProviderClassLoader(env, JMXConnectorFactory.PROTOCOL_PROVIDER_CLASS_LOADER);
!       List providers = loadProviders(JMXConnectorProvider.class, providerPackages, protocol, MX4JRemoteConstants.CLIENT_PROVIDER_CLASS, classLoader);
!       for (int i = 0; i < providers.size(); i++)
!       {
!          JMXConnectorProvider provider = (JMXConnectorProvider)providers.get(i);
!          try
!          {
!             return provider.newJMXConnector(url, Collections.unmodifiableMap(env));
!          }
!          catch (JMXProviderException x)
!          {
!             throw x;
!          }
!          catch (Exception x)
!          {
!             continue;
!          }
!       }
!       throw new MalformedURLException("Could not find provider for protocol " + protocol);
     }
  
!    public static JMXConnectorServer newJMXConnectorServer(JMXServiceURL url, Map env, MBeanServer server) throws IOException
     {
        // Yes, throw NPE if url is null (spec compliant)
***************
*** 55,62 ****
        String providerPackages = findProviderPackageList(env, JMXConnectorServerFactory.PROTOCOL_PROVIDER_PACKAGES);
        ClassLoader classLoader = findProviderClassLoader(env, JMXConnectorServerFactory.PROTOCOL_PROVIDER_CLASS_LOADER);
!       JMXConnectorServerProvider provider = (JMXConnectorServerProvider)loadProvider(JMXConnectorServerProvider.class, providerPackages, protocol, MX4JRemoteConstants.SERVER_PROVIDER_CLASS, classLoader);
!       return provider;
     }
  
     private static String findEnvironmentProviderPackageList(Map environment, String key) throws JMXProviderException
     {
--- 74,118 ----
        String providerPackages = findProviderPackageList(env, JMXConnectorServerFactory.PROTOCOL_PROVIDER_PACKAGES);
        ClassLoader classLoader = findProviderClassLoader(env, JMXConnectorServerFactory.PROTOCOL_PROVIDER_CLASS_LOADER);
!       List providers = loadProviders(JMXConnectorServerProvider.class, providerPackages, protocol, MX4JRemoteConstants.SERVER_PROVIDER_CLASS, classLoader);
!       for (int i = 0; i < providers.size(); i++)
!       {
!          JMXConnectorServerProvider provider = (JMXConnectorServerProvider)providers.get(i);
!          try
!          {
!             return provider.newJMXConnectorServer(url, Collections.unmodifiableMap(env), server);
!          }
!          catch (JMXProviderException x)
!          {
!             throw x;
!          }
!          catch (Exception x)
!          {
!             continue;
!          }
!       }
!       throw new MalformedURLException("Could not find provider for protocol " + protocol);
     }
  
+    /**
+     * public static JMXConnectorProvider newJMXConnectorProvider(JMXServiceURL url, Map env) throws IOException
+     * {
+     * // Yes, throw NPE if url is null (spec compliant)
+     * String protocol = normalizeProtocol(url.getProtocol());
+     * String providerPackages = findProviderPackageList(env, JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES);
+     * ClassLoader classLoader = findProviderClassLoader(env, JMXConnectorFactory.PROTOCOL_PROVIDER_CLASS_LOADER);
+     * JMXConnectorProvider provider = (JMXConnectorProvider)loadProvider(JMXConnectorProvider.class, providerPackages, protocol, MX4JRemoteConstants.CLIENT_PROVIDER_CLASS, classLoader);
+     * return provider;
+     * }
+     * <p/>
+     * public static JMXConnectorServerProvider newJMXConnectorServerProvider(JMXServiceURL url, Map env) throws IOException
+     * {
+     * // Yes, throw NPE if url is null (spec compliant)
+     * String protocol = normalizeProtocol(url.getProtocol());
+     * String providerPackages = findProviderPackageList(env, JMXConnectorServerFactory.PROTOCOL_PROVIDER_PACKAGES);
+     * ClassLoader classLoader = findProviderClassLoader(env, JMXConnectorServerFactory.PROTOCOL_PROVIDER_CLASS_LOADER);
+     * JMXConnectorServerProvider provider = (JMXConnectorServerProvider)loadProvider(JMXConnectorServerProvider.class, providerPackages, protocol, MX4JRemoteConstants.SERVER_PROVIDER_CLASS, classLoader);
+     * return provider;
+     * }
+     */
     private static String findEnvironmentProviderPackageList(Map environment, String key) throws JMXProviderException
     {
***************
*** 125,131 ****
     }
  
!    private static Object loadProvider(Class providerType, String packages, String protocol, String className, ClassLoader loader) throws JMXProviderException, MalformedURLException
     {
        Logger logger = getLogger();
  
        StringTokenizer tokenizer = new StringTokenizer(packages, MX4JRemoteConstants.PROVIDER_PACKAGES_SEPARATOR);
--- 181,188 ----
     }
  
!    private static List loadProviders(Class providerType, String packages, String protocol, String className, ClassLoader loader) throws JMXProviderException
     {
        Logger logger = getLogger();
+       List result = new ArrayList();
  
        StringTokenizer tokenizer = new StringTokenizer(packages, MX4JRemoteConstants.PROVIDER_PACKAGES_SEPARATOR);
***************
*** 158,162 ****
           try
           {
!             return providerClass.newInstance();
           }
           catch (Exception x)
--- 215,220 ----
           try
           {
!             Object provider = providerClass.newInstance();
!             result.add(provider);
           }
           catch (Exception x)
***************
*** 169,175 ****
        try
        {
!          Object[] serviceProviders = fromServiceProviders(providerType, protocol, className, loader);
!          // For now, return the first instance; later we may add some way to prefer one instance or the other
!          if (serviceProviders.length > 0) return serviceProviders[0];
        }
        catch (IOException x)
--- 227,232 ----
        try
        {
!          List serviceProviders = fromServiceProviders(providerType, protocol, className, loader);
!          result.addAll(serviceProviders);
        }
        catch (IOException x)
***************
*** 178,187 ****
        }
  
!       // Nothing found
!       if (logger.isEnabledFor(Logger.DEBUG)) logger.debug("Could not find provider for protocol " + protocol + " in package list '" + packages + "'");
!       throw new MalformedURLException("Could not find provider for protocol " + protocol + " in package list '" + packages + "'");
     }
  
!    public static Object[] fromServiceProviders(Class providerType, String protocol, String className, ClassLoader loader) throws IOException
     {
        String services = "META-INF/services/";
--- 235,243 ----
        }
  
!       if (logger.isEnabledFor(Logger.DEBUG)) logger.debug("Providers found are: " + result);
!       return result;
     }
  
!    private static List fromServiceProviders(Class providerType, String protocol, String className, ClassLoader loader) throws IOException
     {
        String services = "META-INF/services/";
***************
*** 229,253 ****
                 if (line.length() == 0) continue;
                 if (logger.isEnabledFor(Logger.DEBUG)) logger.debug("Found provider '" + line + "' in " + providerURL);
!                // We assume the classes defined by service providers follow the style defined by JSR 160
!                if (line.endsWith(protocol + "." + className))
                 {
!                   if (logger.isEnabledFor(Logger.DEBUG)) logger.debug("Provider '" + line + "' matches protocol " + protocol);
!                   try
!                   {
!                      Class providerClass = loader.loadClass(line);
!                      if (providerType.isAssignableFrom(providerClass))
!                      {
!                         Object providerInstance = providerClass.newInstance();
!                         providers.add(providerInstance);
!                      }
!                   }
!                   catch (Exception ignored)
                    {
!                      // Skip this line and continue
                    }
                 }
!                else
                 {
!                   if (logger.isEnabledFor(Logger.DEBUG)) logger.debug("Provider '" + line + "' does not match protocol " + protocol + ", ignoring");
                 }
              }
--- 285,300 ----
                 if (line.length() == 0) continue;
                 if (logger.isEnabledFor(Logger.DEBUG)) logger.debug("Found provider '" + line + "' in " + providerURL);
!                try
                 {
!                   Class providerClass = loader.loadClass(line);
!                   if (providerType.isAssignableFrom(providerClass))
                    {
!                      Object providerInstance = providerClass.newInstance();
!                      providers.add(providerInstance);
                    }
                 }
!                catch (Exception ignored)
                 {
!                   // Skip this line and continue
                 }
              }
***************
*** 259,264 ****
        }
  
!       if (logger.isEnabledFor(Logger.DEBUG)) logger.debug("Providers found: " + providers);
!       return providers.toArray((Object[])Array.newInstance(providerType, 0));
     }
  }
--- 306,310 ----
        }
  
!       return providers;
     }
  }



-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click