You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by eg...@apache.org on 2009/09/17 16:24:55 UTC

svn commit: r816208 - in /cxf/trunk: common/common/src/main/java/org/apache/cxf/management/ rt/management/src/main/java/org/apache/cxf/management/jmx/ systests/uncategorized/src/test/java/org/apache/cxf/systest/management/

Author: eglynn
Date: Thu Sep 17 14:24:54 2009
New Revision: 816208

URL: http://svn.apache.org/viewvc?rev=816208&view=rev
Log:
Allow a peristent Bus ID to be configured for instrumentation purposes.

Added:
    cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/management/persistent-id.xml
Modified:
    cxf/trunk/common/common/src/main/java/org/apache/cxf/management/InstrumentationManager.java
    cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/jmx/InstrumentationManagerImpl.java
    cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/management/ManagedBusTest.java
    cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/management/managed-spring.xml

Modified: cxf/trunk/common/common/src/main/java/org/apache/cxf/management/InstrumentationManager.java
URL: http://svn.apache.org/viewvc/cxf/trunk/common/common/src/main/java/org/apache/cxf/management/InstrumentationManager.java?rev=816208&r1=816207&r2=816208&view=diff
==============================================================================
--- cxf/trunk/common/common/src/main/java/org/apache/cxf/management/InstrumentationManager.java (original)
+++ cxf/trunk/common/common/src/main/java/org/apache/cxf/management/InstrumentationManager.java Thu Sep 17 14:24:54 2009
@@ -91,4 +91,7 @@
      */
     MBeanServer getMBeanServer();
 
+    String getPersistentBusId();
+    
+    void setPersistentBusId(String id);
 }

Modified: cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/jmx/InstrumentationManagerImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/jmx/InstrumentationManagerImpl.java?rev=816208&r1=816207&r2=816208&view=diff
==============================================================================
--- cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/jmx/InstrumentationManagerImpl.java (original)
+++ cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/jmx/InstrumentationManagerImpl.java Thu Sep 17 14:24:54 2009
@@ -65,6 +65,8 @@
     private MBeanServer mbs;
     private Set<ObjectName> busMBeans = new HashSet<ObjectName>();
     private boolean connectFailed;
+    private String persistentBusId;
+    
     /**
      * For backward compatibility, {@link #createMBServerConnectorFactory} is <code>true</code> by default.
      */
@@ -164,7 +166,7 @@
         }
         //Try to register as a Standard MBean
         try {
-            registerMBeanWithServer(obj, name, forceRegistration);           
+            registerMBeanWithServer(obj, persist(name), forceRegistration);           
         } catch (NotCompliantMBeanException e) {        
             //If this is not a "normal" MBean, then try to deploy it using JMX annotations
             ModelMBeanAssembler assembler = new ModelMBeanAssembler();
@@ -189,7 +191,7 @@
     
     public void unregister(ManagedComponent component) throws JMException {
         ObjectName name = component.getObjectName();
-        unregister(name);
+        unregister(persist(name));
     }
     
     public void unregister(ObjectName name) throws JMException {  
@@ -255,7 +257,7 @@
         } catch (InvalidTargetObjectTypeException itotex) {
             throw new JMException(itotex.getMessage());
         }
-        registerMBeanWithServer(rtMBean, name, forceRegistration);
+        registerMBeanWithServer(rtMBean, persist(name), forceRegistration);
     }
 
     private void registerMBeanWithServer(Object obj, ObjectName name, boolean forceRegistration) 
@@ -276,7 +278,42 @@
             busMBeans.add(name);
         }
     }
-    
 
+    public String getPersistentBusId() {
+        return persistentBusId;
+    }
+
+    public void setPersistentBusId(String id) {
+        persistentBusId = sanitize(id);
+    }
+    
+    private ObjectName persist(ObjectName original) throws JMException {
+        ObjectName persisted = original;
+        if (!(persistentBusId == null 
+              || "".equals(persistentBusId) 
+              || persistentBusId.startsWith("${"))) {
+            String originalStr = original.toString();
+            if (originalStr.indexOf(ManagementConstants.BUS_ID_PROP) != -1) {
+                String persistedStr = 
+                    originalStr.replaceFirst(ManagementConstants.BUS_ID_PROP + "=" + bus.getId(), 
+                                             ManagementConstants.BUS_ID_PROP + "=" + persistentBusId);
+                persisted = new ObjectName(persistedStr);
+            }
+        }
+        return persisted;
+    }
+    
+    private String sanitize(String in) {
+        String result = null;
+        if (in != null) {
+            result = in.replace(':', '_');
+            result = result.replace('/', '_');
+            result = result.replace('\\', '_');
+            result = result.replace('?', '_');
+            result = result.replace('=', '_');
+            result = result.replace(',', '_');
+        }
+        return result;
+    }
 }
 

Modified: cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/management/ManagedBusTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/management/ManagedBusTest.java?rev=816208&r1=816207&r2=816208&view=diff
==============================================================================
--- cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/management/ManagedBusTest.java (original)
+++ cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/management/ManagedBusTest.java Thu Sep 17 14:24:54 2009
@@ -54,15 +54,27 @@
         
         bus.shutdown(true);
     }
-    
+        
     @Test
-    public void testManagedBusWithConfig() throws Exception {
+    public void testManagedBusWithTransientId() throws Exception {
         SpringBusFactory factory = new SpringBusFactory();
         Bus bus = factory.createBus("org/apache/cxf/systest/management/managed-spring.xml", true);
+        doManagedBusTest(bus, bus.getId(), "cxf_managed_bus_test", 9916);
+    }
+    
+    @Test
+    public void testManagedBusWithPersistentId() throws Exception {
+        SpringBusFactory factory = new SpringBusFactory();
+        Bus bus = factory.createBus("org/apache/cxf/systest/management/persistent-id.xml", true);
+        doManagedBusTest(bus, "cxf_managed_bus_test", bus.getId(), 9917);
+    }
+    
+    private void doManagedBusTest(Bus bus, String expect, String reject, int port) throws Exception {
         InstrumentationManager im = bus.getExtension(InstrumentationManager.class);
         assertNotNull(im);
         InstrumentationManagerImpl imi = (InstrumentationManagerImpl)im;
-        assertEquals("service:jmx:rmi:///jndi/rmi://localhost:9916/jmxrmi", imi.getJMXServiceURL());
+        assertEquals("service:jmx:rmi:///jndi/rmi://localhost:" + port + "/jmxrmi",
+                     imi.getJMXServiceURL());
         assertTrue(imi.isEnabled());
         assertNotNull(imi.getMBeanServer());
 
@@ -75,6 +87,10 @@
         StringBuilder b = new StringBuilder();
         for (ObjectName o : CastUtils.cast(s, ObjectName.class)) {
             b.append(o.toString());
+            assertTrue("expected " + expect + " in object name: " + o,
+                       o.toString().indexOf("bus.id=" + expect + ",") != -1);
+            assertTrue("unexpected " + reject + " in object name: " + o,
+                       o.toString().indexOf("bus.id=" + reject + ",") == -1);
             b.append("\n");
         }
         assertEquals("Size is wrong: " + b.toString(), 1, s.size());
@@ -88,6 +104,10 @@
         b = new StringBuilder();
         for (ObjectName o : CastUtils.cast(s, ObjectName.class)) {
             b.append(o.toString());
+            assertTrue("expected " + expect + " in object name: " + o,
+                       o.toString().indexOf("bus.id=" + expect + ",") != -1);
+            assertTrue("unexpected " + reject + " in object name: " + o,
+                       o.toString().indexOf("bus.id=" + reject + ",") == -1);
             b.append("\n");
         }
         assertEquals("Size is wrong: " + b.toString(), 2, s.size());

Modified: cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/management/managed-spring.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/management/managed-spring.xml?rev=816208&r1=816207&r2=816208&view=diff
==============================================================================
--- cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/management/managed-spring.xml (original)
+++ cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/management/managed-spring.xml Thu Sep 17 14:24:54 2009
@@ -33,4 +33,4 @@
         <property name="name" value="testQueue"/>
         <property name="highWaterMark" value="50"/>
     </bean>
-</beans>
\ No newline at end of file
+</beans>

Added: cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/management/persistent-id.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/management/persistent-id.xml?rev=816208&view=auto
==============================================================================
--- cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/management/persistent-id.xml (added)
+++ cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/management/persistent-id.xml Thu Sep 17 14:24:54 2009
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements. See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership. The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License. You may obtain a copy of the License at
+ 
+  http://www.apache.org/licenses/LICENSE-2.0
+ 
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied. See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="
+http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
+  
+    <bean id="org.apache.cxf.management.InstrumentationManager"
+        class="org.apache.cxf.management.jmx.InstrumentationManagerImpl">
+        <property name="bus" ref="cxf" />
+        <property name="enabled" value="true" />
+        <property name="JMXServiceURL" value="service:jmx:rmi:///jndi/rmi://localhost:9917/jmxrmi" />
+        <property name="persistentBusId" value="cxf:managed,bus=test" />
+    </bean> 
+ 
+    <bean id="wq" class="org.apache.cxf.workqueue.AutomaticWorkQueueImpl">
+        <property name="name" value="testQueue"/>
+        <property name="highWaterMark" value="50"/>
+    </bean>
+</beans>