[jboss-cvs] JBossAS SVN: r103656 - in projects/jboss-osgi/projects/bundles/jmx/trunk: impl and 3 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Apr 7 16:02:34 EDT 2010


Author: thomas.diesler at jboss.com
Date: 2010-04-07 16:02:31 -0400 (Wed, 07 Apr 2010)
New Revision: 103656

Modified:
   projects/jboss-osgi/projects/bundles/jmx/trunk/api/src/main/java/org/jboss/osgi/jmx/JMXConstantsExt.java
   projects/jboss-osgi/projects/bundles/jmx/trunk/impl/pom.xml
   projects/jboss-osgi/projects/bundles/jmx/trunk/impl/src/main/java/org/jboss/osgi/jmx/JMXCapability.java
   projects/jboss-osgi/projects/bundles/jmx/trunk/impl/src/main/java/org/jboss/osgi/jmx/internal/JMXConnectorService.java
   projects/jboss-osgi/projects/bundles/jmx/trunk/impl/src/main/java/org/jboss/osgi/jmx/internal/JMXServiceActivator.java
   projects/jboss-osgi/projects/bundles/jmx/trunk/impl/src/main/java/org/jboss/osgi/jmx/internal/RMIAdaptor.java
   projects/jboss-osgi/projects/bundles/jmx/trunk/impl/src/test/java/org/jboss/test/osgi/jmx/JSR160TestCase.java
Log:
Add explicit port for RMI registry

Modified: projects/jboss-osgi/projects/bundles/jmx/trunk/api/src/main/java/org/jboss/osgi/jmx/JMXConstantsExt.java
===================================================================
--- projects/jboss-osgi/projects/bundles/jmx/trunk/api/src/main/java/org/jboss/osgi/jmx/JMXConstantsExt.java	2010-04-07 20:00:05 UTC (rev 103655)
+++ projects/jboss-osgi/projects/bundles/jmx/trunk/api/src/main/java/org/jboss/osgi/jmx/JMXConstantsExt.java	2010-04-07 20:02:31 UTC (rev 103656)
@@ -33,10 +33,19 @@
 {
    /** The property that sets the host that the RMIAdaptor binds to: org.jboss.osgi.jmx.host */
    String REMOTE_JMX_HOST = "org.jboss.osgi.jmx.host";
-   /** The property that sets the port that the RMIAdaptor binds to: org.jboss.osgi.jmx.port */
+   /** The property that sets the port that the RMIAdaptor binds to: org.jboss.osgi.jmx.rmi.port */
    String REMOTE_JMX_RMI_PORT = "org.jboss.osgi.jmx.rmi.port";
+   /** The property that sets the port that the RMI Registry binds to: org.jboss.osgi.jmx.rmi.registry.port */
+   String REMOTE_JMX_RMI_REGISTRY_PORT = "org.jboss.osgi.jmx.rmi.registry.port";
    /** The property that sets the JNDI name the RMIAdaptor binds to: org.jboss.osgi.jmx.rmi.adaptor */
    String REMOTE_JMX_RMI_ADAPTOR = "org.jboss.osgi.jmx.rmi.adaptor";
+   
+   /** The default host that the RMIAdaptor binds to: localhost */
+   String DEFAULT_REMOTE_JMX_HOST = "localhost";
+   /** The default port that the RMIAdaptor binds to: 1198 */
+   String DEFAULT_REMOTE_JMX_RMI_PORT = "1198";
+   /** The default port that the RMI Registry binds to: 1090 */
+   String DEFAULT_REMOTE_JMX_RMI_REGISTRY_PORT = "1090";
    /** The default JNDI name the RMIAdaptor binds to: osgi/jmx/RMIAdaptor */
-   String REMOTE_JMX_RMI_ADAPTOR_NAME = "osgi/jmx/RMIAdaptor";
+   String DEFAULT_JMX_RMI_ADAPTOR = "osgi/jmx/RMIAdaptor";
 }
\ No newline at end of file

Modified: projects/jboss-osgi/projects/bundles/jmx/trunk/impl/pom.xml
===================================================================
--- projects/jboss-osgi/projects/bundles/jmx/trunk/impl/pom.xml	2010-04-07 20:00:05 UTC (rev 103655)
+++ projects/jboss-osgi/projects/bundles/jmx/trunk/impl/pom.xml	2010-04-07 20:02:31 UTC (rev 103656)
@@ -194,10 +194,6 @@
               <argLine>${surefire.jpda.args}</argLine>
               <systemProperties>
                 <property>
-                  <name>java.protocol.handler.pkgs</name>
-                  <value>org.jboss.net.protocol|org.jboss.virtual.protocol</value>
-                </property>
-                <property>
                   <name>log4j.output.dir</name>
                   <value>${project.build.directory}</value>
                 </property>

Modified: projects/jboss-osgi/projects/bundles/jmx/trunk/impl/src/main/java/org/jboss/osgi/jmx/JMXCapability.java
===================================================================
--- projects/jboss-osgi/projects/bundles/jmx/trunk/impl/src/main/java/org/jboss/osgi/jmx/JMXCapability.java	2010-04-07 20:00:05 UTC (rev 103655)
+++ projects/jboss-osgi/projects/bundles/jmx/trunk/impl/src/main/java/org/jboss/osgi/jmx/JMXCapability.java	2010-04-07 20:02:31 UTC (rev 103656)
@@ -23,6 +23,13 @@
 
 //$Id$
 
+import static org.jboss.osgi.jmx.JMXConstantsExt.DEFAULT_REMOTE_JMX_HOST;
+import static org.jboss.osgi.jmx.JMXConstantsExt.DEFAULT_REMOTE_JMX_RMI_PORT;
+import static org.jboss.osgi.jmx.JMXConstantsExt.DEFAULT_REMOTE_JMX_RMI_REGISTRY_PORT;
+import static org.jboss.osgi.jmx.JMXConstantsExt.REMOTE_JMX_HOST;
+import static org.jboss.osgi.jmx.JMXConstantsExt.REMOTE_JMX_RMI_PORT;
+import static org.jboss.osgi.jmx.JMXConstantsExt.REMOTE_JMX_RMI_REGISTRY_PORT;
+
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
@@ -63,8 +70,9 @@
    {
       super(MBeanServer.class.getName());
 
-      addSystemProperty("org.jboss.osgi.jmx.host", System.getProperty("jboss.bind.address", "localhost"));
-      addSystemProperty("org.jboss.osgi.jmx.rmi.port", "1198");
+      addSystemProperty(REMOTE_JMX_HOST, System.getProperty("jboss.bind.address", DEFAULT_REMOTE_JMX_HOST));
+      addSystemProperty(REMOTE_JMX_RMI_PORT, DEFAULT_REMOTE_JMX_RMI_PORT);
+      addSystemProperty(REMOTE_JMX_RMI_REGISTRY_PORT, DEFAULT_REMOTE_JMX_RMI_REGISTRY_PORT);
 
       addDependency(new CompendiumCapability());
 

Modified: projects/jboss-osgi/projects/bundles/jmx/trunk/impl/src/main/java/org/jboss/osgi/jmx/internal/JMXConnectorService.java
===================================================================
--- projects/jboss-osgi/projects/bundles/jmx/trunk/impl/src/main/java/org/jboss/osgi/jmx/internal/JMXConnectorService.java	2010-04-07 20:00:05 UTC (rev 103655)
+++ projects/jboss-osgi/projects/bundles/jmx/trunk/impl/src/main/java/org/jboss/osgi/jmx/internal/JMXConnectorService.java	2010-04-07 20:02:31 UTC (rev 103656)
@@ -24,9 +24,10 @@
 //$Id$
 
 import java.io.IOException;
+import java.io.Serializable;
 import java.net.InetAddress;
 import java.net.MalformedURLException;
-import java.rmi.RemoteException;
+import java.rmi.Remote;
 import java.rmi.registry.LocateRegistry;
 import java.rmi.registry.Registry;
 import java.rmi.server.UnicastRemoteObject;
@@ -48,38 +49,41 @@
 {
    // Provide logging
    private static final Logger log = Logger.getLogger(JMXConnectorService.class);
-   
+
    private JMXServiceURL serviceURL;
    private JMXConnectorServer jmxConnectorServer;
    private boolean shutdownRegistry;
    private Registry rmiRegistry;
 
-   public JMXConnectorService(MBeanServer mbeanServer, String host, int rmiPort) throws IOException
+   static class RemoteObj implements Remote, Serializable
    {
-      // check to see if registry already created
-      rmiRegistry = LocateRegistry.getRegistry(host, rmiPort);
+      private static final long serialVersionUID = 1L;
+   }
+   
+   public JMXConnectorService(JMXServiceURL serviceURL, int regPort) throws IOException
+   {
+      this.serviceURL = serviceURL;
+
+      String host = serviceURL.getHost();
+      
+      // Check to see if registry already created
+      rmiRegistry = LocateRegistry.getRegistry(host, regPort);
       try
       {
          rmiRegistry.list();
-         log.debug("RMI registry running at host=" + host + ",port=" + rmiPort);
+         log.debug("RMI registry running at host=" + host + ",port=" + regPort);
       }
-      catch (RemoteException e)
+      catch (Exception ex)
       {
-         log.debug("No RMI registry running at host=" + host + ",port=" + rmiPort + ".  Will create one.");
-         rmiRegistry = LocateRegistry.createRegistry(rmiPort, null, new DefaultSocketFactory(InetAddress.getByName(host)));
+         log.debug("No RMI registry running at host=" + host + ",port=" + regPort + ".  Will create one.");
+         rmiRegistry = LocateRegistry.createRegistry(regPort, null, new DefaultSocketFactory(InetAddress.getByName(host)));
          shutdownRegistry = true;
       }
-
-      // create new connector server and start it
-      serviceURL = getServiceURL(host, rmiPort);
-      jmxConnectorServer = JMXConnectorServerFactory.newJMXConnectorServer(serviceURL, null, mbeanServer);
-
-      log.debug("JMXConnectorServer created: " + serviceURL);
    }
 
-   static JMXServiceURL getServiceURL(String host, int rmiPort)
+   static JMXServiceURL getServiceURL(String host, int conPort, int regPort)
    {
-      String jmxConnectorURL = "service:jmx:rmi://" + host + "/jndi/rmi://" + host + ":" + rmiPort + "/jmxconnector";
+      String jmxConnectorURL = "service:jmx:rmi://" + host + ":" + conPort + "/jndi/rmi://" + host + ":" + regPort + "/osgi-jmx-connector";
       try
       {
          return new JMXServiceURL(jmxConnectorURL);
@@ -90,34 +94,20 @@
       }
    }
 
-   public void start()
+   public void start(MBeanServer mbeanServer) throws IOException
    {
-      ClassLoader ctxLoader = Thread.currentThread().getContextClassLoader();
-      try
-      {
-         Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
+      // create new connector server and start it
+      jmxConnectorServer = JMXConnectorServerFactory.newJMXConnectorServer(serviceURL, null, mbeanServer);
+      log.debug("JMXConnectorServer created: " + serviceURL);
 
-         jmxConnectorServer.start();
-
-         log.debug("JMXConnectorServer started: " + serviceURL);
-      }
-      catch (IOException ex)
-      {
-         log.error("Cannot start JMXConnectorServer", ex);
-      }
-      finally
-      {
-         Thread.currentThread().setContextClassLoader(ctxLoader);
-      }
+      jmxConnectorServer.start();
+      log.debug("JMXConnectorServer started: " + serviceURL);
    }
 
    public void stop()
    {
-      ClassLoader ctxLoader = Thread.currentThread().getContextClassLoader();
       try
       {
-         Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
-
          jmxConnectorServer.stop();
 
          // Shutdown the registry if this service created it
@@ -133,9 +123,5 @@
       {
          log.warn("Cannot stop JMXConnectorServer", ex);
       }
-      finally
-      {
-         Thread.currentThread().setContextClassLoader(ctxLoader);
-      }
    }
 }
\ No newline at end of file

Modified: projects/jboss-osgi/projects/bundles/jmx/trunk/impl/src/main/java/org/jboss/osgi/jmx/internal/JMXServiceActivator.java
===================================================================
--- projects/jboss-osgi/projects/bundles/jmx/trunk/impl/src/main/java/org/jboss/osgi/jmx/internal/JMXServiceActivator.java	2010-04-07 20:00:05 UTC (rev 103655)
+++ projects/jboss-osgi/projects/bundles/jmx/trunk/impl/src/main/java/org/jboss/osgi/jmx/internal/JMXServiceActivator.java	2010-04-07 20:02:31 UTC (rev 103656)
@@ -23,6 +23,15 @@
 
 //$Id$
 
+import static org.jboss.osgi.jmx.JMXConstantsExt.DEFAULT_JMX_RMI_ADAPTOR;
+import static org.jboss.osgi.jmx.JMXConstantsExt.DEFAULT_REMOTE_JMX_HOST;
+import static org.jboss.osgi.jmx.JMXConstantsExt.DEFAULT_REMOTE_JMX_RMI_PORT;
+import static org.jboss.osgi.jmx.JMXConstantsExt.DEFAULT_REMOTE_JMX_RMI_REGISTRY_PORT;
+import static org.jboss.osgi.jmx.JMXConstantsExt.REMOTE_JMX_HOST;
+import static org.jboss.osgi.jmx.JMXConstantsExt.REMOTE_JMX_RMI_ADAPTOR;
+import static org.jboss.osgi.jmx.JMXConstantsExt.REMOTE_JMX_RMI_PORT;
+import static org.jboss.osgi.jmx.JMXConstantsExt.REMOTE_JMX_RMI_REGISTRY_PORT;
+
 import java.io.IOException;
 
 import javax.management.MBeanServer;
@@ -35,7 +44,6 @@
 import javax.naming.StringRefAddr;
 
 import org.jboss.logging.Logger;
-import org.jboss.osgi.jmx.JMXConstantsExt;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
@@ -55,6 +63,7 @@
    private JMXConnectorService jmxConnector;
    private String jmxHost;
    private String jmxRmiPort;
+   private String rmiRegistryPort;
    private String rmiAdaptorName;
    private MBeanServer mbeanServer;
    private FrameworkStateExt frameworkState;
@@ -87,20 +96,24 @@
       packageState = new PackageStateExt(sysContext, mbeanServer);
       packageState.start();
 
-      jmxHost = context.getProperty(JMXConstantsExt.REMOTE_JMX_HOST);
+      jmxHost = context.getProperty(REMOTE_JMX_HOST);
       if (jmxHost == null)
-         jmxHost = "localhost";
+         jmxHost = DEFAULT_REMOTE_JMX_HOST;
 
-      jmxRmiPort = context.getProperty(JMXConstantsExt.REMOTE_JMX_RMI_PORT);
+      jmxRmiPort = context.getProperty(REMOTE_JMX_RMI_PORT);
       if (jmxRmiPort == null)
-         jmxRmiPort = "1098";
+         jmxRmiPort = DEFAULT_REMOTE_JMX_RMI_PORT;
 
-      rmiAdaptorName = context.getProperty(JMXConstantsExt.REMOTE_JMX_RMI_ADAPTOR);
+      rmiRegistryPort = context.getProperty(REMOTE_JMX_RMI_REGISTRY_PORT);
+      if (rmiRegistryPort == null)
+         rmiRegistryPort = DEFAULT_REMOTE_JMX_RMI_REGISTRY_PORT;
+
+      rmiAdaptorName = context.getProperty(REMOTE_JMX_RMI_ADAPTOR);
       if (rmiAdaptorName == null)
-         rmiAdaptorName = JMXConstantsExt.REMOTE_JMX_RMI_ADAPTOR_NAME;
+         rmiAdaptorName = DEFAULT_JMX_RMI_ADAPTOR;
 
       // Start tracking the NamingService
-      InitialContextTracker tracker = new InitialContextTracker(context, rmiAdaptorName);
+      InitialContextTracker tracker = new InitialContextTracker(context);
       tracker.open();
    }
 
@@ -127,63 +140,55 @@
 
    class InitialContextTracker extends ServiceTracker
    {
-      private String rmiAdaptorName;
       private boolean rmiAdaptorBound;
 
-      public InitialContextTracker(BundleContext context, String rmiAdaptorName)
+      public InitialContextTracker(BundleContext context)
       {
          super(context, InitialContext.class.getName(), null);
-         this.rmiAdaptorName = rmiAdaptorName;
       }
 
       @Override
       public Object addingService(ServiceReference reference)
       {
          InitialContext iniCtx = (InitialContext)super.addingService(reference);
-
-         JMXServiceURL serviceURL = JMXConnectorService.getServiceURL(jmxHost, Integer.parseInt(jmxRmiPort));
+         
+         int conPort = Integer.parseInt(jmxRmiPort);
+         int regPort = Integer.parseInt(rmiRegistryPort);
+         JMXServiceURL serviceURL = JMXConnectorService.getServiceURL(jmxHost, conPort, regPort);
          try
          {
-            // Try to start the JMXConnector, this should fail if it is already running
-            // [TODO] is there a better way to check whether the connector is already running?
-            jmxConnector = new JMXConnectorService(mbeanServer, jmxHost, Integer.parseInt(jmxRmiPort));
-            jmxConnector.start();
+            jmxConnector = new JMXConnectorService(serviceURL, regPort);
+            jmxConnector.start(mbeanServer);
          }
          catch (IOException ex)
          {
-            // Assume that the JMXConnector is already running if we cannot start it 
-            log.debug("Assume JMXConnectorServer already running on: " + serviceURL);
+            log.error("Cannot start JMXConnectorServer on: " + serviceURL, ex);
+            return iniCtx;
          }
 
+         // Bind the RMIAdaptor
          try
          {
-            // Check if the RMIAdaptor is already bound
-            iniCtx.lookup(rmiAdaptorName);
-         }
-         catch (NamingException lookupEx)
-         {
-            // Bind the RMIAdaptor
-            try
+            String[] tokens = rmiAdaptorName.split("/");
+            Context ctx = iniCtx;
+            for (int i = 0; i < tokens.length - 1; i++)
             {
-               String[] tokens = rmiAdaptorName.split("/");
-               Context ctx = iniCtx;
-               for (int i = 0; i < tokens.length - 1; i++)
-               {
-                  String token = tokens[i];
-                  ctx = ctx.createSubcontext(token);
-               }
-               StringRefAddr addr = new StringRefAddr(JMXServiceURL.class.getName(), serviceURL.toString());
-               Reference ref = new Reference(MBeanServerConnection.class.getName(), addr, RMIAdaptorFactory.class.getName(), null);
-               iniCtx.bind(rmiAdaptorName, ref);
-               rmiAdaptorBound = true;
+               String token = tokens[i];
+               ctx = ctx.createSubcontext(token);
+            }
+            StringRefAddr addr = new StringRefAddr(JMXServiceURL.class.getName(), serviceURL.toString());
+            Reference ref = new Reference(MBeanServerConnection.class.getName(), addr, RMIAdaptorFactory.class.getName(), null);
+            iniCtx.bind(rmiAdaptorName, ref);
+            rmiAdaptorBound = true;
 
-               log.info("MBeanServerConnection bound to: " + rmiAdaptorName);
-            }
-            catch (NamingException ex)
-            {
-               log.error("Cannot bind RMIAdaptor", ex);
-            }
+            log.debug("MBeanServerConnection bound to: " + rmiAdaptorName);
          }
+         catch (NamingException ex)
+         {
+            log.error("Cannot bind RMIAdaptor", ex);
+            return iniCtx;
+         }
+         
          return iniCtx;
       }
 

Modified: projects/jboss-osgi/projects/bundles/jmx/trunk/impl/src/main/java/org/jboss/osgi/jmx/internal/RMIAdaptor.java
===================================================================
--- projects/jboss-osgi/projects/bundles/jmx/trunk/impl/src/main/java/org/jboss/osgi/jmx/internal/RMIAdaptor.java	2010-04-07 20:00:05 UTC (rev 103655)
+++ projects/jboss-osgi/projects/bundles/jmx/trunk/impl/src/main/java/org/jboss/osgi/jmx/internal/RMIAdaptor.java	2010-04-07 20:02:31 UTC (rev 103656)
@@ -30,14 +30,20 @@
 import javax.management.remote.JMXConnectorFactory;
 import javax.management.remote.JMXServiceURL;
 
+import org.jboss.logging.Logger;
+
 public class RMIAdaptor implements MBeanServerConnection, Serializable
 {
-   private static final long serialVersionUID = 6066226353118090215L;
+   private static final long serialVersionUID = -360532663805790477L;
 
-   private MBeanServerConnection delegate;
+   // Provide logging
+   private transient final Logger log = Logger.getLogger(RMIAdaptor.class);
+   
+   private transient MBeanServerConnection delegate;
 
    public RMIAdaptor(JMXServiceURL url) throws IOException
    {
+      log.debug("Connect JMXConnector to: " + url);
       JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
       delegate = jmxc.getMBeanServerConnection();
    }

Modified: projects/jboss-osgi/projects/bundles/jmx/trunk/impl/src/test/java/org/jboss/test/osgi/jmx/JSR160TestCase.java
===================================================================
--- projects/jboss-osgi/projects/bundles/jmx/trunk/impl/src/test/java/org/jboss/test/osgi/jmx/JSR160TestCase.java	2010-04-07 20:00:05 UTC (rev 103655)
+++ projects/jboss-osgi/projects/bundles/jmx/trunk/impl/src/test/java/org/jboss/test/osgi/jmx/JSR160TestCase.java	2010-04-07 20:02:31 UTC (rev 103656)
@@ -23,7 +23,7 @@
 
 //$Id: ServiceStateTestCase.java 103562 2010-04-06 10:25:15Z thomas.diesler at jboss.com $
 
-import static org.jboss.osgi.jmx.JMXConstantsExt.REMOTE_JMX_RMI_ADAPTOR_NAME;
+import static org.jboss.osgi.jmx.JMXConstantsExt.DEFAULT_JMX_RMI_ADAPTOR;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
@@ -54,7 +54,7 @@
    public void testJMXConnector() throws Exception
    {
       // The address of the connector server
-      JMXServiceURL address = new JMXServiceURL("service:jmx:rmi://localhost/jndi/rmi://localhost:1098/jmxconnector");
+      JMXServiceURL address = new JMXServiceURL("service:jmx:rmi://localhost:1198/jndi/rmi://localhost:1090/osgi-jmx-connector");
 
       // The environment map, null in this case
       Map<String, ?> environment = null;
@@ -82,7 +82,7 @@
    public void testRMIAdaptor() throws Exception
    {
       InitialContext iniCtx = getInitialContext();
-      MBeanServerConnection mbsc = (MBeanServerConnection)iniCtx.lookup(REMOTE_JMX_RMI_ADAPTOR_NAME);
+      MBeanServerConnection mbsc = (MBeanServerConnection)iniCtx.lookup(DEFAULT_JMX_RMI_ADAPTOR);
 
       // Call the remote MBeanServer
       String domain = mbsc.getDefaultDomain();




More information about the jboss-cvs-commits mailing list