Author: markt
Date: Wed Oct  1 03:47:41 2008
New Revision: 700734

URL: http://svn.apache.org/viewvc?rev=700734&view=rev
Log:
Move JmxRemote to extras. Fix Tomcat hang on shutdown. Improve logging. Update 
the docs.

Modified:
    tomcat/trunk/build.xml
    tomcat/trunk/extras.xml
    tomcat/trunk/java/org/apache/catalina/mbeans/JmxRemoteLifecycleListener.java
    tomcat/trunk/java/org/apache/catalina/mbeans/LocalStrings.properties
    tomcat/trunk/webapps/docs/config/listeners.xml

Modified: tomcat/trunk/build.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/build.xml?rev=700734&r1=700733&r2=700734&view=diff
==============================================================================
--- tomcat/trunk/build.xml (original)
+++ tomcat/trunk/build.xml Wed Oct  1 03:47:41 2008
@@ -259,6 +259,7 @@
         <exclude name="org/apache/catalina/ant/**" />
         <exclude name="org/apache/catalina/cluster/**" />
         <exclude name="org/apache/catalina/ha/**" />
+        <exclude name="org/apache/catalina/mbeans/JmxRemote*" />
         <exclude name="org/apache/catalina/tribes/**" />
         <exclude name="org/apache/catalina/launcher/**" />
         <exclude name="org/apache/catalina/storeconfig/**" />

Modified: tomcat/trunk/extras.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/extras.xml?rev=700734&r1=700733&r2=700734&view=diff
==============================================================================
--- tomcat/trunk/extras.xml (original)
+++ tomcat/trunk/extras.xml Wed Oct  1 03:47:41 2008
@@ -82,6 +82,7 @@
   <property name="cometd.war" value="${tomcat.extras}/cometd.war"/>
   <property name="tomcat-bayeux-samples.jar" 
value="${tomcat.extras}/tomcat-bayeux-samples.jar"/>
 
+  <property name="catalina-jmx-remote.jar" 
value="${tomcat.extras}/catalina-jmx-remote.jar"/>
        
   <!-- Classpath -->
   <path id="tomcat.classpath">
@@ -330,7 +331,20 @@
     </echo>
   </target>
 
-  <target name="extras" depends="prepare,commons-logging,webservices,bayeux">
+  <target name="jmx-remote" >
+    <!-- Create the JAR file -->
+    <jar jarfile="${catalina-jmx-remote.jar}">
+           <fileset dir="${tomcat.classes}">
+        <include name="org/apache/catalina/mbeans/JmxRemote*" />
+     </fileset>
+   </jar>
+
+   <checksum file="${catalina-jmx-remote.jar}"
+             forceOverwrite="yes" fileext=".md5" />
+         
+  </target>
+  
+  <target name="extras" 
depends="prepare,commons-logging,webservices,bayeux,jmx-remote">
   </target>
 
   <!-- Download and dependency building -->

Modified: 
tomcat/trunk/java/org/apache/catalina/mbeans/JmxRemoteLifecycleListener.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/mbeans/JmxRemoteLifecycleListener.java?rev=700734&r1=700733&r2=700734&view=diff
==============================================================================
--- 
tomcat/trunk/java/org/apache/catalina/mbeans/JmxRemoteLifecycleListener.java 
(original)
+++ 
tomcat/trunk/java/org/apache/catalina/mbeans/JmxRemoteLifecycleListener.java 
Wed Oct  1 03:47:41 2008
@@ -75,6 +75,9 @@
     protected String accessFile = null;
     protected boolean useLocalPorts = false;
 
+    protected JMXConnectorServer csPlatform = null;
+    protected JMXConnectorServer csCatalina = null;
+    
     /**
      * Get the port on which the Platform RMI server is exported. This is the
      * port that is normally chosen by the RMI stack.
@@ -247,16 +250,22 @@
 
 
             // Create the Platform server
-            createServer(rmiRegistryPortPlatform, rmiServerPortPlatform, env,
+            csPlatform = createServer("Platform", rmiRegistryPortPlatform,
+                    rmiServerPortPlatform, env,
                     ManagementFactory.getPlatformMBeanServer());
             
             // Create the catalina server
-            createServer(rmiRegistryPortCatalina, rmiServerPortCatalina, env,
+            csCatalina = createServer("Catalina", rmiRegistryPortCatalina,
+                    rmiServerPortCatalina, env,
                     MBeanUtils.createServer());
+        } else if (Lifecycle.STOP_EVENT == event.getType()) {
+            destroyServer("Platform", csPlatform);
+            destroyServer("Catalina", csCatalina);
         }
     }
 
-    private void createServer(int theRmiRegistryPort, int theRmiServerPort,
+    private JMXConnectorServer createServer(String serverName,
+            int theRmiRegistryPort, int theRmiServerPort,
             HashMap<String,Object> theEnv, MBeanServer theMBeanServer) {
         
         // Create the RMI registry
@@ -265,8 +274,8 @@
         } catch (RemoteException e) {
             log.error(sm.getString(
                     "jmxRemoteLifecycleListener.createRegistryFailed",
-                    Integer.toString(theRmiRegistryPort)), e);
-            return;
+                    serverName, Integer.toString(theRmiRegistryPort)), e);
+            return null;
         }
 
         // Build the connection string with fixed ports
@@ -282,21 +291,37 @@
         } catch (MalformedURLException e) {
             log.error(sm.getString(
                     "jmxRemoteLifecycleListener.invalidURL",
-                    url.toString()), e);
-            return;
+                    serverName, url.toString()), e);
+            return null;
         }
         
         // Start the JMX server with the connection string
-        JMXConnectorServer cs;
+        JMXConnectorServer cs = null;
         try {
             cs = JMXConnectorServerFactory.newJMXConnectorServer(
                     serviceUrl, theEnv, theMBeanServer);
             cs.start();
             log.info(sm.getString("jmxRemoteLifecycleListener.start",
                     Integer.valueOf(theRmiRegistryPort),
-                    Integer.valueOf(theRmiServerPort)));
+                    Integer.valueOf(theRmiServerPort), serverName));
         } catch (IOException e) {
-            log.error(sm.getString(""), e);
+            log.error(sm.getString(
+                    "jmxRemoteLifecycleListener.createServerFailed",
+                    serverName), e);
+        }
+        return cs;
+    }
+
+    private void destroyServer(String serverName,
+            JMXConnectorServer theConnectorServer) {
+        if (theConnectorServer != null) {
+            try {
+                theConnectorServer.stop();
+            } catch (IOException e) {
+                log.error(sm.getString(
+                        "jmxRemoteLifecycleListener.destroyServerFailed",
+                        serverName),e);
+            }
         }
     }
 

Modified: tomcat/trunk/java/org/apache/catalina/mbeans/LocalStrings.properties
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/mbeans/LocalStrings.properties?rev=700734&r1=700733&r2=700734&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/mbeans/LocalStrings.properties 
(original)
+++ tomcat/trunk/java/org/apache/catalina/mbeans/LocalStrings.properties Wed 
Oct  1 03:47:41 2008
@@ -13,7 +13,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-jmxRemoteLifecycleListener.createRegistryFailed=Unable to create the RMI 
registry using port "{0}"
-jmxRemoteLifecycleListener.invalidURL=The JMX Service URL requested, "{0}", 
was invalid
-jmxRemoteLifecycleListener.serverFailed=The JMX connector server could not be 
created or failed to start
-jmxRemoteLifecycleListener.start=The JMX Remote Listener has configured the 
registry on port {0} and the server on port {1}
\ No newline at end of file
+jmxRemoteLifecycleListener.createRegistryFailed=Unable to create the RMI 
registry for the {0} server using port {1}
+jmxRemoteLifecycleListener.createServerFailed=The JMX connector server could 
not be created or failed to start for the {0} server
+jmxRemoteLifecycleListener.destroyServerFailed=The JMX connector server could 
not be stopped for the {0} server
+jmxRemoteLifecycleListener.invalidURL=The JMX Service URL requested for the 
{0} server, "{1}", was invalid
+jmxRemoteLifecycleListener.start=The JMX Remote Listener has configured the 
registry on port {0} and the server on port {1} for the {2} server

Modified: tomcat/trunk/webapps/docs/config/listeners.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/listeners.xml?rev=700734&r1=700733&r2=700734&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/config/listeners.xml (original)
+++ tomcat/trunk/webapps/docs/config/listeners.xml Wed Oct  1 03:47:41 2008
@@ -138,6 +138,10 @@
     <h3>JMX Remote Lifecycle Listener
     (org.apache.catalina.mbeans.JmxRemoteLifecycleListener)</h3>
 
+    <p>This listener requires <code>catalina-jmx-remote.jar</code> to be placed
+    in <code>$CATALINA_HOME/lib</code>. This jar may be found in the extras
+    directory of the binary download area.</p>
+
     <p>The <strong>JMX Remote Lifecycle Listener</strong> fixes the port used 
by
     the JMX/RMI Server making things much simpler if you need to connect
     jconsole or a similar tool to a remote Tomcat instance that is running
@@ -151,7 +155,8 @@
     <p>If this listener was configured in server.xml as:
 <source>
 &lt;Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
-          rmiRegistryPort="10001" rmiServerPort="10002" /&gt;
+          rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002"
+          rmiRegistryPortCatalina="10003" rmiServerPortCatalina="10004" /&gt;
 </source>
     with the following system properties set (eg in setenv.sh):
 <source>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to