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 2007/02/23 12:25:59 UTC
svn commit: r510907 - in /incubator/cxf/trunk:
common/common/src/main/java/org/apache/cxf/management/
rt/core/src/main/java/org/apache/cxf/workqueue/ rt/management/
rt/management/src/main/java/org/apache/cxf/event/
rt/management/src/main/java/org/apach...
Author: eglynn
Date: Fri Feb 23 03:25:58 2007
New Revision: 510907
URL: http://svn.apache.org/viewvc?view=rev&rev=510907
Log:
Comitting fix for CXF-427 "Provide simpler mechanism in CXF for registering MBeans" on behalf of Seumas Soltysik.
Added:
incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/management/ManagedComponent.java
- copied, changed from r510580, incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/management/Instrumentation.java
incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/management/ManagementConstants.java (with props)
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/workqueue/WorkQueueManagerImplMBeanWrapper.java
- copied, changed from r510580, incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/workqueue/WorkQueueInstrumentation.java
incubator/cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/jmx/InstrumentationManagerImpl.java
- copied, changed from r510580, incubator/cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/jmx/JMXManagedComponentManager.java
incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/jmx/HelloWorld.java (with props)
incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/jmx/HelloWorldMBean.java (with props)
incubator/cxf/trunk/rt/management/src/test/resources/
incubator/cxf/trunk/rt/management/src/test/resources/managed-spring.xml (with props)
Removed:
incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/management/Instrumentation.java
incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/management/InstrumentationFactory.java
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/workqueue/WorkQueueInstrumentation.java
incubator/cxf/trunk/rt/management/src/main/java/org/apache/cxf/event/
incubator/cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/InstrumentationManagerImpl.java
incubator/cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/jmx/JMXManagedComponentManager.java
incubator/cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/jmx/JMXUtils.java
incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/jmx/JMXUtilsTest.java
Modified:
incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/management/InstrumentationManager.java
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/workqueue/WorkQueueManagerImpl.java
incubator/cxf/trunk/rt/management/pom.xml
incubator/cxf/trunk/rt/management/src/main/resources/META-INF/bus-extensions.xml
incubator/cxf/trunk/rt/management/src/main/resources/META-INF/cxf/cxf-extension-management.xml
incubator/cxf/trunk/rt/management/src/main/resources/META-INF/cxf/cxf-property-editors.xml
incubator/cxf/trunk/rt/management/src/main/resources/schemas/configuration/instrumentation.xsd
incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/InstrumentationManagerTest.java
incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/jmx/JMXManagedComponentManagerTest.java
incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/jmx/export/AnnotationTestInstrumentation.java
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/bus/SpringBusFactoryTest.java
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/management/ManagedBusTest.java
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/management/managed-spring.xml
Modified: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/management/InstrumentationManager.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/management/InstrumentationManager.java?view=diff&rev=510907&r1=510906&r2=510907
==============================================================================
--- incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/management/InstrumentationManager.java (original)
+++ incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/management/InstrumentationManager.java Fri Feb 23 03:25:58 2007
@@ -19,39 +19,72 @@
package org.apache.cxf.management;
-import java.util.List;
-
+import javax.management.JMException;
import javax.management.MBeanServer;
+import javax.management.ObjectName;
/**
* InstrumentationManager interface for the instrumentations query, register
* and unregister
*/
public interface InstrumentationManager {
+ /**
+ * Register a component with management infrastructure. Component will supply registration name.
+ * @param component
+ * @return name used to register the component
+ * @throws JMException
+ */
+ ObjectName register(ManagedComponent component) throws JMException;
/**
- * register the instrumentation instance to the instrumentation manager
+ * Register a component with management infrastructure. Component will supply registration name.
+ * @param component
+ * @param forceRegistration if set to true, then component will be registered despite existing component.
+ * @return name used to register the component
+ * @throws JMException
*/
- void register(Instrumentation instrumentation);
+ ObjectName register(ManagedComponent component, boolean forceRegistration) throws JMException;
/**
- * unregister the instrumentation instance from the instrumentation manager
+ * Registers object with management infrastructure with a specific name. Object must be annotated or
+ * implement standard MBean interface.
+ * @param obj
+ * @param name
+ * @throws JMException
*/
- void unregister(Object component);
-
+ void register(Object obj, ObjectName name) throws JMException;
+
+ /**
+ * Registers object with management infrastructure with a specific name. Object must be annotated or
+ * implement standard MBean interface.
+ * @param obj
+ * @param name
+ * @param forceRegistration if set to true, then component will be registered despite existing component.
+ * @throws JMException
+ */
+ void register(Object obj, ObjectName name, boolean forceRegistration) throws JMException;
+
+ /**
+ * Unregisters component with management infrastructure
+ * @param component
+ * @throws JMException
+ */
+ void unregister(ManagedComponent component) throws JMException;
+
/**
- * get all instrumentation from the instrumentation manager
- * @return the instrumentation list
+ * Unregisters component based upon registered name
+ * @param name
+ * @throws JMException
*/
- List<Instrumentation> getAllInstrumentation();
+ void unregister(ObjectName name) throws JMException;
/**
- * provide a clean up method for instrumentation manager to stop
+ * Cleans up and shutsdown management infrastructure.
*/
void shutdown();
/**
- * get the MBeanServer which will host the cxf runtime component MBeans
+ * Get the MBeanServer which hosts managed components
* NOTE: if the configuration is not set the JMXEnabled to be true, this method
* will return null
* @return the MBeanServer
Copied: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/management/ManagedComponent.java (from r510580, incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/management/Instrumentation.java)
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/management/ManagedComponent.java?view=diff&rev=510907&p1=incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/management/Instrumentation.java&r1=510580&p2=incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/management/ManagedComponent.java&r2=510907
==============================================================================
--- incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/management/Instrumentation.java (original)
+++ incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/management/ManagedComponent.java Fri Feb 23 03:25:58 2007
@@ -19,31 +19,14 @@
package org.apache.cxf.management;
-
+import javax.management.JMException;
+import javax.management.ObjectName;
/**
* Basic interface for representing a Instrumented object.
*
*/
-public interface Instrumentation {
-
- /**
- * get the Instrumentation Name, this name is base on class
- * which implement instrumentation interface
- * @return the instrumentation name
- */
- String getInstrumentationName();
+public interface ManagedComponent {
- /**
- * get the instrumentation managed component
- * @return the Component object reference
- */
- Object getComponent();
+ ObjectName getObjectName() throws JMException;
- /**
- * get the unique Instrumentation Name, this name is base on class instance
- * which implement instrumentation interface
- * @return the instrumentation name and instance number
- */
- String getUniqueInstrumentationName();
-
}
Added: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/management/ManagementConstants.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/management/ManagementConstants.java?view=auto&rev=510907
==============================================================================
--- incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/management/ManagementConstants.java (added)
+++ incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/management/ManagementConstants.java Fri Feb 23 03:25:58 2007
@@ -0,0 +1,33 @@
+/**
+ * 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.
+ */
+
+package org.apache.cxf.management;
+
+public final class ManagementConstants {
+
+ public static final String DEFAULT_DOMAIN_NAME = "org.apache.cxf";
+ public static final String BUS_ID_PROP = "bus.id";
+ public static final String NAME_PROP = "name";
+ public static final String TYPE_PROP = "type";
+ public static final String DESCRIPTION_PROP = "description";
+
+ private ManagementConstants() {
+
+ }
+}
Propchange: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/management/ManagementConstants.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/workqueue/WorkQueueManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/workqueue/WorkQueueManagerImpl.java?view=diff&rev=510907&r1=510906&r2=510907
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/workqueue/WorkQueueManagerImpl.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/workqueue/WorkQueueManagerImpl.java Fri Feb 23 03:25:58 2007
@@ -19,21 +19,17 @@
package org.apache.cxf.workqueue;
+import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
-import javax.xml.namespace.QName;
+import javax.management.JMException;
import org.apache.cxf.Bus;
-import org.apache.cxf.event.ComponentEventFilter;
-import org.apache.cxf.event.Event;
-import org.apache.cxf.event.EventProcessor;
-import org.apache.cxf.management.Instrumentation;
-import org.apache.cxf.management.InstrumentationFactory;
+import org.apache.cxf.management.InstrumentationManager;
-
-public class WorkQueueManagerImpl implements WorkQueueManager, InstrumentationFactory {
+public class WorkQueueManagerImpl implements WorkQueueManager {
private static final Logger LOG =
Logger.getLogger(WorkQueueManagerImpl.class.getName());
@@ -62,13 +58,16 @@
public synchronized AutomaticWorkQueue getAutomaticWorkQueue() {
if (autoQueue == null) {
autoQueue = createAutomaticWorkQueue();
- EventProcessor ep = bus.getExtension(EventProcessor.class);
- //setup the QName
- QName eventID = new QName(ComponentEventFilter.COMPONENT_CREATED_EVENT);
- if (null != ep) {
- ep.sendEvent(new Event(this, eventID));
+ InstrumentationManager manager = bus.getExtension(InstrumentationManager.class);
+ if (null != manager) {
+ try {
+ manager.register(new WorkQueueManagerImplMBeanWrapper(this));
+ } catch (JMException jmex) {
+ LOG.log(Level.WARNING , jmex.getMessage(), jmex);
+ }
}
}
+
return autoQueue;
}
@@ -86,12 +85,6 @@
autoQueue.shutdown(processRemainingTasks);
}
- //sent out remove event.
- EventProcessor ep = bus.getExtension(EventProcessor.class);
- QName eventID = new QName(ComponentEventFilter.COMPONENT_REMOVED_EVENT);
- if (null != ep) {
- ep.sendEvent(new Event(this, eventID));
- }
synchronized (this) {
notifyAll();
}
@@ -117,9 +110,6 @@
for (java.util.logging.Handler h : LOG.getHandlers()) {
h.flush();
}
-
- //sent out creation event.
-
}
@@ -146,7 +136,4 @@
}
- public Instrumentation createInstrumentation() {
- return new WorkQueueInstrumentation(this);
- }
}
Copied: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/workqueue/WorkQueueManagerImplMBeanWrapper.java (from r510580, incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/workqueue/WorkQueueInstrumentation.java)
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/workqueue/WorkQueueManagerImplMBeanWrapper.java?view=diff&rev=510907&p1=incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/workqueue/WorkQueueInstrumentation.java&r1=510580&p2=incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/workqueue/WorkQueueManagerImplMBeanWrapper.java&r2=510907
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/workqueue/WorkQueueInstrumentation.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/workqueue/WorkQueueManagerImplMBeanWrapper.java Fri Feb 23 03:25:58 2007
@@ -19,8 +19,15 @@
package org.apache.cxf.workqueue;
+import java.util.Hashtable;
+import java.util.Map;
-import org.apache.cxf.management.Instrumentation;
+import javax.management.JMException;
+import javax.management.ObjectName;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.management.ManagedComponent;
+import org.apache.cxf.management.ManagementConstants;
import org.apache.cxf.management.annotation.ManagedAttribute;
import org.apache.cxf.management.annotation.ManagedOperation;
import org.apache.cxf.management.annotation.ManagedResource;
@@ -30,16 +37,17 @@
description = "The CXF internal thread pool for manangement ",
currencyTimeLimit = 15, persistPolicy = "OnUpdate", persistPeriod = 200)
-public class WorkQueueInstrumentation implements Instrumentation {
- private static final String INSTRUMENTED_NAME = "Bus.WorkQueue";
+public class WorkQueueManagerImplMBeanWrapper implements ManagedComponent {
+ private static final String NAME_VALUE = "Bus.WorkQueue";
+ private static final String TYPE_VALUE = "WorkQueueMBean";
- private String objectName;
private WorkQueueManagerImpl wqManager;
private AutomaticWorkQueueImpl aWorkQueue;
+ private Bus bus;
- public WorkQueueInstrumentation(WorkQueueManagerImpl wq) {
+ public WorkQueueManagerImplMBeanWrapper(WorkQueueManagerImpl wq) {
wqManager = wq;
- objectName = "WorkQueue";
+ bus = wq.getBus();
if (wqManager.autoQueue != null
&& AutomaticWorkQueueImpl.class.isAssignableFrom(wqManager.autoQueue.getClass())) {
aWorkQueue = (AutomaticWorkQueueImpl)wqManager.autoQueue;
@@ -110,18 +118,17 @@
public void setLowWaterMark(int lwm) {
aWorkQueue.setLowWaterMark(lwm);
}
-
-
- public Object getComponent() {
- return wqManager;
- }
- public String getInstrumentationName() {
- return INSTRUMENTED_NAME;
- }
-
- public String getUniqueInstrumentationName() {
- return objectName;
- }
+ public ObjectName getObjectName() throws JMException {
+ Map<String, String> table = new Hashtable<String, String>();
+ String busId = bus.getId() == null ? Integer.toString(bus.hashCode()) : bus.getId();
+
+ table.put(ManagementConstants.BUS_ID_PROP, busId);
+ table.put(ManagementConstants.NAME_PROP, NAME_VALUE);
+ table.put(ManagementConstants.TYPE_PROP, TYPE_VALUE);
+ //Use default domain name of server
+ return new ObjectName(ManagementConstants.DEFAULT_DOMAIN_NAME, (Hashtable)table);
+ }
+
}
Modified: incubator/cxf/trunk/rt/management/pom.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/management/pom.xml?view=diff&rev=510907&r1=510906&r2=510907
==============================================================================
--- incubator/cxf/trunk/rt/management/pom.xml (original)
+++ incubator/cxf/trunk/rt/management/pom.xml Fri Feb 23 03:25:58 2007
@@ -59,11 +59,18 @@
</dependency>
<dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring</artifactId>
+ <version>${spring.version}</version>
+ </dependency>
+
+ <dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-testutils</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
+
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymockclassextension</artifactId>
Copied: incubator/cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/jmx/InstrumentationManagerImpl.java (from r510580, incubator/cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/jmx/JMXManagedComponentManager.java)
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/jmx/InstrumentationManagerImpl.java?view=diff&rev=510907&p1=incubator/cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/jmx/JMXManagedComponentManager.java&r1=510580&p2=incubator/cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/jmx/InstrumentationManagerImpl.java&r2=510907
==============================================================================
--- incubator/cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/jmx/JMXManagedComponentManager.java (original)
+++ incubator/cxf/trunk/rt/management/src/main/java/org/apache/cxf/management/jmx/InstrumentationManagerImpl.java Fri Feb 23 03:25:58 2007
@@ -19,170 +19,217 @@
package org.apache.cxf.management.jmx;
-
-
import java.io.IOException;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
import javax.management.InstanceAlreadyExistsException;
-import javax.management.InstanceNotFoundException;
import javax.management.JMException;
-import javax.management.MBeanException;
-import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
-
import javax.management.NotCompliantMBeanException;
+import javax.management.ObjectInstance;
import javax.management.ObjectName;
-import javax.management.ReflectionException;
import javax.management.modelmbean.InvalidTargetObjectTypeException;
import javax.management.modelmbean.ModelMBeanInfo;
import javax.management.modelmbean.RequiredModelMBean;
+import org.apache.cxf.Bus;
+import org.apache.cxf.buslifecycle.BusLifeCycleListener;
+import org.apache.cxf.buslifecycle.BusLifeCycleManager;
import org.apache.cxf.common.logging.LogUtils;
-import org.apache.cxf.management.Instrumentation;
+import org.apache.cxf.management.InstrumentationManager;
import org.apache.cxf.management.JMXConnectorPolicyType;
+import org.apache.cxf.management.ManagedComponent;
+import org.apache.cxf.management.ManagementConstants;
import org.apache.cxf.management.jmx.export.runtime.ModelMBeanAssembler;
/**
* The manager class for the JMXManagedComponent which hosts the JMXManagedComponents.
*/
-public class JMXManagedComponentManager {
- private static final Logger LOG = LogUtils.getL7dLogger(JMXManagedComponentManager.class);
-
- private boolean platformMBeanServer;
- private ModelMBeanAssembler mbAssembler;
+public class InstrumentationManagerImpl extends JMXConnectorPolicyType
+ implements InstrumentationManager, BusLifeCycleListener {
+ private static final Logger LOG = LogUtils.getL7dLogger(InstrumentationManagerImpl.class);
+
+ private Bus bus;
private MBServerConnectorFactory mcf;
private MBeanServer mbs;
+ private Set<ObjectName> busMBeans = new HashSet<ObjectName>();
+ private ModelMBeanAssembler assembler;
- public JMXManagedComponentManager() {
- mbAssembler = new ModelMBeanAssembler();
+ public InstrumentationManagerImpl() {
+ assembler = new ModelMBeanAssembler();
}
-
- public void init(JMXConnectorPolicyType cp) {
+ public Bus getBus() {
+ return bus;
+ }
+
+ @Resource(name = "bus")
+ public void setBus(Bus bus) {
+ this.bus = bus;
+ }
+
+
+ @PostConstruct
+ public void register() {
+ if (null != bus) {
+ bus.setExtension(this, InstrumentationManager.class);
+ BusLifeCycleManager blcm = bus.getExtension(BusLifeCycleManager.class);
+ blcm.registerLifeCycleListener(this);
+ }
+ }
+
+ @PostConstruct
+ public void init() {
+ if (isEnabled()) {
+ if (LOG.isLoggable(Level.INFO)) {
+ LOG.info("Setting up MBeanServer ");
+ }
+
+ List servers = MBeanServerFactory.findMBeanServer(ManagementConstants.DEFAULT_DOMAIN_NAME);
+ if (servers.size() <= 1) {
+ mbs = MBeanServerFactory.createMBeanServer(ManagementConstants.DEFAULT_DOMAIN_NAME);
+ } else {
+ mbs = (MBeanServer)servers.get(0);
+ }
+ mcf = MBServerConnectorFactory.getInstance();
+ mcf.setMBeanServer(mbs);
+ mcf.setThreaded(isThreaded());
+ mcf.setDaemon(isDaemon());
+ mcf.setServiceUrl(getJMXServiceURL());
+ try {
+ mcf.createConnector();
+ } catch (IOException ex) {
+ LOG.log(Level.SEVERE, "START_CONNECTOR_FAILURE_MSG", new Object[]{ex});
+ }
+ }
+ }
+
+ public void register(Object obj, ObjectName name) throws JMException {
+ register(obj, name, false);
+ }
+
+ public void register(Object obj, ObjectName name, boolean forceRegistration) throws JMException {
+ if (!isEnabled()) {
+ return;
+ }
+ //Try to register as a Standard MBean
+ try {
+ registerMBeanWithServer(obj, name, forceRegistration);
+ } catch (NotCompliantMBeanException e) {
+ //If this is not a "normal" MBean, then try to deploy it using JMX annotations
+ assembler = new ModelMBeanAssembler();
+ ModelMBeanInfo mbi = assembler.getModelMbeanInfo(obj.getClass());
+ register(obj, name, mbi, forceRegistration);
+ }
+ }
+
+ public ObjectName register(ManagedComponent i) throws JMException {
+ ObjectName name = register(i, false);
+
+ return name;
+ }
+
+ public ObjectName register(ManagedComponent i, boolean forceRegistration) throws JMException {
+ ObjectName name = i.getObjectName();
+ register(i, name, forceRegistration);
- // get the init information from configuration
+ return name;
+ }
+
+
+ public void unregister(ManagedComponent component) throws JMException {
+ ObjectName name = component.getObjectName();
+ unregister(name);
+ }
+
+ public void unregister(ObjectName name) throws JMException {
+ if (!isEnabled()) {
+ return;
+ }
- if (LOG.isLoggable(Level.INFO)) {
- LOG.info("Setting up MBeanServer ");
+ busMBeans.remove(name);
+ mbs.unregisterMBean(name);
+ }
+
+ public MBeanServer getMBeanServer() {
+ return mbs;
+ }
+
+ public void shutdown() {
+ if (!isEnabled()) {
+ return;
}
- mbs = MBeanServerFactory.createMBeanServer(JMXUtils.DOMAIN_STRING);
- mcf = MBServerConnectorFactory.getInstance();
- mcf.setMBeanServer(mbs);
- mcf.setThreaded(cp.isThreaded());
- mcf.setDaemon(cp.isDaemon());
- mcf.setServiceUrl(cp.getJMXServiceURL());
- try {
- mcf.createConnector();
+ try {
+ mcf.destroy();
} catch (IOException ex) {
- LOG.log(Level.SEVERE, "START_CONNECTOR_FAILURE_MSG", new Object[]{ex});
- }
+ LOG.log(Level.SEVERE, "STOP_CONNECTOR_FAILURE_MSG", new Object[]{ex});
+ }
+ }
+
+ public void initComplete() {
}
- public MBeanServer getMBeanServer() {
- return mbs;
+ public void preShutdown() {
+
}
-
- public void shutdown() {
- if (!platformMBeanServer) {
+
+ public void postShutdown() {
+ Iterator<ObjectName> it = busMBeans.iterator();
+ while (it.hasNext()) {
+ ObjectName name = it.next();
+ busMBeans.remove(name);
try {
- mcf.destroy();
- } catch (IOException ex) {
- LOG.log(Level.SEVERE, "STOP_CONNECTOR_FAILURE_MSG", new Object[]{ex});
+ unregister(name);
+ } catch (JMException jmex) {
+ LOG.log(Level.SEVERE, "UNREGISTER_FAILURE_MSG", new Object[]{name, jmex});
}
}
}
-
- public void registerMBean(Object object, ObjectName name) {
+
+ private void register(Object obj, ObjectName name, ModelMBeanInfo mbi, boolean forceRegistration)
+ throws JMException {
+ RequiredModelMBean rtMBean =
+ (RequiredModelMBean)mbs.instantiate("javax.management.modelmbean.RequiredModelMBean");
+ rtMBean.setModelMBeanInfo(mbi);
try {
- mbs.registerMBean(object, name);
- } catch (InstanceAlreadyExistsException e) {
- try {
- mbs.unregisterMBean(name);
- mbs.registerMBean(object, name);
- } catch (Exception e1) {
- LOG.log(Level.SEVERE, "REGISTER_FAILURE_MSG", new Object[]{name, e1});
- }
- } catch (MBeanRegistrationException e) {
- LOG.log(Level.SEVERE, "REGISTER_FAILURE_MSG", new Object[]{name, e});
- } catch (NotCompliantMBeanException e) {
- LOG.log(Level.SEVERE, "REGISTER_FAILURE_MSG", new Object[]{name, e});
+ rtMBean.setManagedResource(obj, "ObjectReference");
+ } catch (InvalidTargetObjectTypeException itotex) {
+ throw new JMException(itotex.getMessage());
}
+ registerMBeanWithServer(rtMBean, name, forceRegistration);
}
-
- public void unregisterMBean(ObjectName name) {
+
+ private void registerMBeanWithServer(Object obj, ObjectName name, boolean forceRegistration)
+ throws JMException {
+ ObjectInstance instance = null;
try {
- mbs.unregisterMBean(name);
- } catch (JMException e) {
- LOG.log(Level.SEVERE, "UNREGISTER_FAILURE_MSG", new Object[]{name, e});
+ instance = mbs.registerMBean(obj, name);
+ } catch (InstanceAlreadyExistsException e) {
+ if (forceRegistration) {
+ mbs.unregisterMBean(name);
+ instance = mbs.registerMBean(obj, name);
+ } else {
+ throw e;
+ }
}
- }
-
- /**
- * Create the related JMX component and register it.
- * @param instrumentation
- */
- public void registerMBean(Instrumentation instrumentation) {
- ModelMBeanInfo mbi = mbAssembler.getModelMbeanInfo(instrumentation.getClass());
- if (mbi != null) {
- RequiredModelMBean rtMBean;
- try {
-
- rtMBean = (RequiredModelMBean)mbs.instantiate(
- "javax.management.modelmbean.RequiredModelMBean");
-
- rtMBean.setModelMBeanInfo(mbi);
-
- rtMBean.setManagedResource(instrumentation, "ObjectReference");
-
- registerMBean(rtMBean,
- JMXUtils.getObjectName(instrumentation.getInstrumentationName(),
- instrumentation.getUniqueInstrumentationName()));
-
- if (LOG.isLoggable(Level.INFO)) {
- LOG.info("registered the object to MBserver "
- + instrumentation.getUniqueInstrumentationName());
- }
-
-
- } catch (ReflectionException e) {
- LOG.log(Level.SEVERE, "INSTANTIANTE_FAILURE_MSG", new Object[]{e});
- } catch (MBeanException e) {
- LOG.log(Level.SEVERE, "MBEAN_FAILURE_MSG", new Object[]{e});
- } catch (InstanceNotFoundException e) {
- LOG.log(Level.SEVERE, "SET_MANAGED_RESOURCE_FAILURE_MSG", new Object[]{e});
- } catch (InvalidTargetObjectTypeException e) {
- LOG.log(Level.SEVERE, "SET_MANAGED_RESOURCE_FAILURE_MSG", new Object[]{e});
- }
- } else {
- LOG.log(Level.SEVERE, "GET_MANAGED_INFORMATION_FAILURE_MSG",
- new Object[]{instrumentation.getInstrumentationName()});
- }
+ if (instance != null) {
+ busMBeans.add(name);
+ }
}
- /**
- * Identify the related JMX component and unregister it.
- * @param instrumentation
- */
- public void unregisterMBean(Instrumentation instrumentation) {
- ObjectName name;
- name = JMXUtils.getObjectName(instrumentation.getInstrumentationName(),
- instrumentation.getUniqueInstrumentationName());
- unregisterMBean(name);
- if (LOG.isLoggable(Level.INFO)) {
- LOG.info("unregistered the object to MBserver"
- + instrumentation.getUniqueInstrumentationName());
- }
- }
-
-
}
Modified: incubator/cxf/trunk/rt/management/src/main/resources/META-INF/bus-extensions.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/management/src/main/resources/META-INF/bus-extensions.xml?view=diff&rev=510907&r1=510906&r2=510907
==============================================================================
--- incubator/cxf/trunk/rt/management/src/main/resources/META-INF/bus-extensions.xml (original)
+++ incubator/cxf/trunk/rt/management/src/main/resources/META-INF/bus-extensions.xml Fri Feb 23 03:25:58 2007
@@ -17,11 +17,7 @@
specific language governing permissions and limitations
under the License.
-->
-<extensions xmlns="http://cxf.apache.org/bus/extension">
-
- <extension class="org.apache.cxf.event.EventProcessorImpl"
- interface="org.apache.cxf.event.EventProcessor"/>
- <extension class="org.apache.cxf.management.InstrumentationManagerImpl"
- interface="org.apache.cxf.management.InstrumentationManager"/>
-
+<extensions xmlns="http://cxf.apache.org/bus/extension">
+ <extension class="org.apache.cxf.management.jmx.InstrumentationManagerImpl"
+ interface="org.apache.cxf.management.InstrumentationManager"/>
</extensions>
Modified: incubator/cxf/trunk/rt/management/src/main/resources/META-INF/cxf/cxf-extension-management.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/management/src/main/resources/META-INF/cxf/cxf-extension-management.xml?view=diff&rev=510907&r1=510906&r2=510907
==============================================================================
--- incubator/cxf/trunk/rt/management/src/main/resources/META-INF/cxf/cxf-extension-management.xml (original)
+++ incubator/cxf/trunk/rt/management/src/main/resources/META-INF/cxf/cxf-extension-management.xml Fri Feb 23 03:25:58 2007
@@ -22,13 +22,12 @@
xmlns:foo="http://cxf.apache.org/configuration/foo"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
-
- <bean id="org.apache.cxf.event.EventProcessor" class="org.apache.cxf.event.EventProcessorImpl">
- <property name="bus" ref="cxf"/>
- </bean>
-
- <bean id="org.apache.cxf.management.InstrumentationManager" class="org.apache.cxf.management.InstrumentationManagerImpl">
+
+ <bean id="org.apache.cxf.management.jmx.InstrumentationManagerImpl" class="org.apache.cxf.management.jmx.InstrumentationManagerImpl">
<property name="bus" ref="cxf"/>
+ <property name="enabled" value="false"/>
+ <property name="threaded" value="false"/>
+ <property name="daemon" value="false"/>
</bean>
</beans>
Modified: incubator/cxf/trunk/rt/management/src/main/resources/META-INF/cxf/cxf-property-editors.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/management/src/main/resources/META-INF/cxf/cxf-property-editors.xml?view=diff&rev=510907&r1=510906&r2=510907
==============================================================================
--- incubator/cxf/trunk/rt/management/src/main/resources/META-INF/cxf/cxf-property-editors.xml (original)
+++ incubator/cxf/trunk/rt/management/src/main/resources/META-INF/cxf/cxf-property-editors.xml Fri Feb 23 03:25:58 2007
@@ -30,7 +30,6 @@
<property name="packageName" value="org.apache.cxf.management"/>
<property name="propertyClassNames">
<list>
- <value>InstrumentationType</value>
<value>JMXConnectorPolicyType</value>
</list>
</property>
Modified: incubator/cxf/trunk/rt/management/src/main/resources/schemas/configuration/instrumentation.xsd
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/management/src/main/resources/schemas/configuration/instrumentation.xsd?view=diff&rev=510907&r1=510906&r2=510907
==============================================================================
--- incubator/cxf/trunk/rt/management/src/main/resources/schemas/configuration/instrumentation.xsd (original)
+++ incubator/cxf/trunk/rt/management/src/main/resources/schemas/configuration/instrumentation.xsd Fri Feb 23 03:25:58 2007
@@ -25,26 +25,14 @@
elementFormDefault="qualified"
attributeFormDefault="unqualified"
jaxb:version="2.0">
-
- <xs:complexType name="InstrumentationType">
- <xs:attribute name="Enabled" type="xs:boolean" default="true"/>
- <xs:attribute name="JMXEnabled" type="xs:boolean" default="false"/>
- </xs:complexType>
-
+
<xs:complexType name="JMXConnectorPolicyType">
- <xs:attribute name="Threaded" type="xs:boolean" default="false"/>
- <xs:attribute name="Daemon" type="xs:boolean" default="false"/>
+ <xs:attribute name="Enabled" type="xs:boolean" use="required" />
+ <xs:attribute name="Threaded" type="xs:boolean" use="required" />
+ <xs:attribute name="Daemon" type="xs:boolean" use="required" />
<xs:attribute name="JMXServiceURL" type="xs:string" default="service:jmx:rmi:///jndi/rmi://localhost:9913/jmxrmi"/>
</xs:complexType>
- <xs:element name="instrumentation" type="tns:InstrumentationType"/>
<xs:element name="JMXConnectorPolicy" type="tns:JMXConnectorPolicyType"/>
-
- <xs:complexType name="InstrumentationManagerConfigBean">
- <xs:sequence>
- <xs:element ref="tns:instrumentation" minOccurs="0"/>
- <xs:element ref="tns:JMXConnectorPolicy" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
</xs:schema>
Modified: incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/InstrumentationManagerTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/InstrumentationManagerTest.java?view=diff&rev=510907&r1=510906&r2=510907
==============================================================================
--- incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/InstrumentationManagerTest.java (original)
+++ incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/InstrumentationManagerTest.java Fri Feb 23 03:25:58 2007
@@ -18,19 +18,15 @@
*/
package org.apache.cxf.management;
-import java.util.List;
+import java.util.Iterator;
+import java.util.Set;
-import javax.xml.namespace.QName;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
import junit.framework.TestCase;
-
-
import org.apache.cxf.Bus;
-import org.apache.cxf.BusFactory;
-import org.apache.cxf.event.ComponentEventFilter;
-import org.apache.cxf.event.Event;
-import org.apache.cxf.event.EventProcessor;
-import org.apache.cxf.workqueue.WorkQueueInstrumentation;
+import org.apache.cxf.bus.spring.SpringBusFactory;
import org.apache.cxf.workqueue.WorkQueueManagerImpl;
public class InstrumentationManagerTest extends TestCase {
@@ -38,10 +34,7 @@
Bus bus;
public void setUp() throws Exception {
- BusFactory bf = BusFactory.newInstance();
- bus = bf.createBus();
- BusFactory.setDefaultBus(bus);
- im = bus.getExtension(InstrumentationManager.class);
+
}
public void tearDown() throws Exception {
@@ -49,46 +42,40 @@
bus.shutdown(true);
}
+ public void testInstrumentationNotEnabled() {
+ SpringBusFactory factory = new SpringBusFactory();
+ bus = factory.createBus();
+ im = bus.getExtension(InstrumentationManager.class);
+ assertTrue("Instrumentation Manager should not be null", im != null);
+ MBeanServer mbs = im.getMBeanServer();
+ assertNull("MBeanServer should not be available.", mbs);
+ }
+
// try to get WorkQueue information
public void testWorkQueueInstrumentation() throws Exception {
+ SpringBusFactory factory = new SpringBusFactory();
+ bus = factory.createBus("managed-spring.xml", true);
+ im = bus.getExtension(InstrumentationManager.class);
assertTrue("Instrumentation Manager should not be null", im != null);
- //im.getAllInstrumentation();
WorkQueueManagerImpl wqm = new WorkQueueManagerImpl();
wqm.setBus(bus);
- EventProcessor ep = bus.getExtension(EventProcessor.class);
- QName eventID = new QName(ComponentEventFilter.COMPONENT_CREATED_EVENT);
- if (null != ep) {
- ep.sendEvent(new Event(wqm, eventID));
- }
+ wqm.getAutomaticWorkQueue();
- //NOTE: now the bus WorkQueueManager is lazy load , if WorkQueueManager
- //create with bus , this test could be failed.
- List<Instrumentation> list = im.getAllInstrumentation();
- //NOTE: change for the BindingManager and TransportFactoryManager instrumentation
- // create with the bus.
- assertEquals("Too many instrumented items", 1, list.size());
- Instrumentation it1 = list.get(0);
- //Instrumentation it2 = list.get(3);
- assertTrue("Item 1 not a WorkQueueInstrumentation",
- WorkQueueInstrumentation.class.isAssignableFrom(it1.getClass()));
-
- // not check for the instrumentation unique name
- // sleep for the MBServer connector thread startup
- try {
- Thread.sleep(100);
- } catch (InterruptedException e) {
- // do nothing
+ MBeanServer mbs = im.getMBeanServer();
+ assertNotNull("MBeanServer should be available.", mbs);
+ ObjectName name = new ObjectName(ManagementConstants.DEFAULT_DOMAIN_NAME
+ + ":type=WorkQueueMBean,*");
+ Set s = mbs.queryNames(name, null);
+ assertTrue(s.size() == 1);
+ Iterator it = s.iterator();
+ while (it.hasNext()) {
+ ObjectName n = (ObjectName)it.next();
+ Long result =
+ (Long)mbs.invoke(n, "getWorkQueueMaxSize", new Object[0], new String[0]);
+ assertEquals(result, Long.valueOf(250));
}
- eventID = new QName(ComponentEventFilter.COMPONENT_REMOVED_EVENT);
- if (null != ep) {
- ep.sendEvent(new Event(wqm, eventID));
- }
- assertEquals("Instrumented stuff not removed from list", 0, list.size());
+
bus.shutdown(true);
- assertEquals("Instrumented stuff not removed from list", 0, list.size());
}
-
-
-
}
Added: incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/jmx/HelloWorld.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/jmx/HelloWorld.java?view=auto&rev=510907
==============================================================================
--- incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/jmx/HelloWorld.java (added)
+++ incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/jmx/HelloWorld.java Fri Feb 23 03:25:58 2007
@@ -0,0 +1,26 @@
+/**
+ * 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.
+ */
+
+package org.apache.cxf.management.jmx;
+
+public class HelloWorld implements HelloWorldMBean {
+ public String sayHi() {
+ return "Wazzzuuup!";
+ }
+}
Propchange: incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/jmx/HelloWorld.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/jmx/HelloWorldMBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/jmx/HelloWorldMBean.java?view=auto&rev=510907
==============================================================================
--- incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/jmx/HelloWorldMBean.java (added)
+++ incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/jmx/HelloWorldMBean.java Fri Feb 23 03:25:58 2007
@@ -0,0 +1,24 @@
+/**
+ * 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.
+ */
+
+package org.apache.cxf.management.jmx;
+
+public interface HelloWorldMBean {
+ String sayHi();
+}
Propchange: incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/jmx/HelloWorldMBean.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/jmx/JMXManagedComponentManagerTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/jmx/JMXManagedComponentManagerTest.java?view=diff&rev=510907&r1=510906&r2=510907
==============================================================================
--- incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/jmx/JMXManagedComponentManagerTest.java (original)
+++ incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/jmx/JMXManagedComponentManagerTest.java Fri Feb 23 03:25:58 2007
@@ -19,63 +19,88 @@
package org.apache.cxf.management.jmx;
+import javax.management.JMException;
import javax.management.ObjectName;
import junit.framework.TestCase;
-import org.apache.cxf.BusException;
-import org.apache.cxf.management.JMXConnectorPolicyType;
import org.apache.cxf.management.jmx.export.AnnotationTestInstrumentation;
-
public class JMXManagedComponentManagerTest extends TestCase {
private static final String NAME_ATTRIBUTE = "Name";
- private JMXManagedComponentManager manager;
+ private InstrumentationManagerImpl manager;
- public void setUp() throws BusException {
- manager = new JMXManagedComponentManager();
+ public void setUp() throws Exception {
+ manager = new InstrumentationManagerImpl();
+ manager.setDaemon(false);
+ manager.setThreaded(true);
+ manager.setEnabled(true);
+ manager.setJMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9913/jmxrmi");
+ manager.init();
+ //Wait for MBeanServer connector to be initialized on separate thread.
+ Thread.sleep(2000);
}
- public void testJMXManagerInit() {
- JMXConnectorPolicyType connector = new JMXConnectorPolicyType();
- connector.setDaemon(false);
- connector.setThreaded(true);
- connector.setJMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9913/jmxrmi");
- try {
- manager.init(connector);
- Thread.sleep(300);
- manager.shutdown();
- } catch (Exception ex) {
- assertTrue("JMX Manager init with NewMBeanServer error", false);
- ex.printStackTrace();
- }
+ public void tearDown() throws Exception {
+ manager.shutdown();
}
- public void testRegisterInstrumentation() {
- JMXConnectorPolicyType connector = new JMXConnectorPolicyType();
- connector.setDaemon(false);
- connector.setThreaded(false);
- connector.setJMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9913/jmxrmi");
- manager.init(connector);
- // setup the fack instrumentation
+ public void testRegisterInstrumentation() throws Exception {
+ manager.setDaemon(false);
+ manager.setThreaded(false);
+ manager.setJMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9913/jmxrmi");
+ manager.init();
+
AnnotationTestInstrumentation im = new AnnotationTestInstrumentation();
- ObjectName name = JMXUtils.getObjectName(im.getUniqueInstrumentationName(),
- im.getInstrumentationName());
-
+ ObjectName name = new ObjectName("org.apache.cxf:type=foo,name=bar");
im.setName("John Smith");
- manager.registerMBean(im);
+ manager.register(im, name);
+
+ Object val = manager.getMBeanServer().getAttribute(name, NAME_ATTRIBUTE);
+ assertEquals("Incorrect result", "John Smith", val);
- try {
- Object val = manager.getMBeanServer().getAttribute(name, NAME_ATTRIBUTE);
- assertEquals("Incorrect result", "John Smith", val);
- Thread.sleep(300);
- } catch (Exception ex) {
- ex.printStackTrace();
- assertTrue("get instrumentation attribute error", false);
+ try {
+ manager.register(im, name);
+ fail("Registering with existing name should fail.");
+ } catch (JMException jmex) {
+ //Expected
}
- manager.unregisterMBean(im);
- manager.shutdown();
+
+ manager.register(im, name, true);
+
+ val = manager.getMBeanServer().getAttribute(name, NAME_ATTRIBUTE);
+ assertEquals("Incorrect result", "John Smith", val);
+ manager.unregister(name);
+
+ im.setName("Foo Bar");
+ name = manager.register(im);
+
+ val = manager.getMBeanServer().getAttribute(name, NAME_ATTRIBUTE);
+ assertEquals("Incorrect result", "Foo Bar", val);
+
+ try {
+ manager.register(im);
+ fail("Registering with existing name should fail.");
+ } catch (JMException jmex) {
+ //Expected
+ }
+
+ name = manager.register(im, true);
+
+ val = manager.getMBeanServer().getAttribute(name, NAME_ATTRIBUTE);
+ assertEquals("Incorrect result", "Foo Bar", val);
+
+ manager.unregister(im);
}
+ public void testRegisterStandardMBean() throws Exception {
+ HelloWorld hw = new HelloWorld();
+ ObjectName name = new ObjectName("org.apache.cxf:type=foo,name=bar");
+ manager.register(hw, name);
+ String result =
+ (String)manager.getMBeanServer().invoke(name, "sayHi", new Object[0], new String[0]);
+ assertEquals("Wazzzuuup!", result);
+ }
+
}
Modified: incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/jmx/export/AnnotationTestInstrumentation.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/jmx/export/AnnotationTestInstrumentation.java?view=diff&rev=510907&r1=510906&r2=510907
==============================================================================
--- incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/jmx/export/AnnotationTestInstrumentation.java (original)
+++ incubator/cxf/trunk/rt/management/src/test/java/org/apache/cxf/management/jmx/export/AnnotationTestInstrumentation.java Fri Feb 23 03:25:58 2007
@@ -19,8 +19,10 @@
package org.apache.cxf.management.jmx.export;
-import org.apache.cxf.management.Instrumentation;
-import org.apache.cxf.management.InstrumentationFactory;
+import javax.management.JMException;
+import javax.management.ObjectName;
+
+import org.apache.cxf.management.ManagedComponent;
import org.apache.cxf.management.annotation.ManagedAttribute;
import org.apache.cxf.management.annotation.ManagedNotification;
import org.apache.cxf.management.annotation.ManagedNotifications;
@@ -36,7 +38,7 @@
persistLocation = "/local/work", persistName = "bar.jmx")
@ManagedNotifications({@ManagedNotification(name = "My Notification",
notificationTypes = {"type.foo", "type.bar" }) })
-public class AnnotationTestInstrumentation implements Instrumentation, InstrumentationFactory {
+public class AnnotationTestInstrumentation implements ManagedComponent {
private String name;
@@ -101,20 +103,8 @@
return x + y;
}
- public String getInstrumentationName() {
- return "AnnotationTestInstrumentation";
- }
-
- public Object getComponent() {
- return this;
- }
-
- public String getUniqueInstrumentationName() {
- return "AnnotationTestInstrumentation";
- }
-
- public Instrumentation createInstrumentation() {
- // return new AnnotationTestInstrumentation(this);
- return this;
+ public ObjectName getObjectName() throws JMException {
+ return new ObjectName("org.apache.cxf:type=AnnotationTestInstrumentation");
}
+
}
Added: incubator/cxf/trunk/rt/management/src/test/resources/managed-spring.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/management/src/test/resources/managed-spring.xml?view=auto&rev=510907
==============================================================================
--- incubator/cxf/trunk/rt/management/src/test/resources/managed-spring.xml (added)
+++ incubator/cxf/trunk/rt/management/src/test/resources/managed-spring.xml Fri Feb 23 03:25:58 2007
@@ -0,0 +1,34 @@
+<?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"
+ xmlns:im="http://cxf.apache.org/management"
+ 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="threaded" value="false"/>
+ <property name="daemon" value="false"/>
+ <property name="JMXServiceURL" value="service:jmx:rmi:///jndi/rmi://localhost:9914/jmxrmi" />
+ </bean>
+
+</beans>
\ No newline at end of file
Propchange: incubator/cxf/trunk/rt/management/src/test/resources/managed-spring.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/cxf/trunk/rt/management/src/test/resources/managed-spring.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml
Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/bus/SpringBusFactoryTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/bus/SpringBusFactoryTest.java?view=diff&rev=510907&r1=510906&r2=510907
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/bus/SpringBusFactoryTest.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/bus/SpringBusFactoryTest.java Fri Feb 23 03:25:58 2007
@@ -27,7 +27,6 @@
import org.apache.cxf.bus.spring.SpringBusFactory;
import org.apache.cxf.buslifecycle.BusLifeCycleManager;
import org.apache.cxf.endpoint.ServerRegistry;
-import org.apache.cxf.event.EventProcessor;
import org.apache.cxf.management.InstrumentationManager;
import org.apache.cxf.phase.PhaseManager;
import org.apache.cxf.transport.ConduitInitiatorManager;
@@ -53,8 +52,6 @@
assertNotNull("No lifecycle manager", bus.getExtension(BusLifeCycleManager.class));
assertNotNull("No service registry", bus.getExtension(ServerRegistry.class));
assertNotNull("No instrumentation manager", bus.getExtension(InstrumentationManager.class));
- assertNotNull("No event processor", bus.getExtension(EventProcessor.class));
-
try {
bfm.getBindingFactory("http://cxf.apache.org/unknown");
Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/management/ManagedBusTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/management/ManagedBusTest.java?view=diff&rev=510907&r1=510906&r2=510907
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/management/ManagedBusTest.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/management/ManagedBusTest.java Fri Feb 23 03:25:58 2007
@@ -19,38 +19,65 @@
package org.apache.cxf.systest.management;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
import junit.framework.TestCase;
import org.apache.cxf.Bus;
-import org.apache.cxf.bus.CXFBusFactory;
import org.apache.cxf.bus.spring.SpringBusFactory;
-import org.apache.cxf.configuration.Configurer;
import org.apache.cxf.management.InstrumentationManager;
-import org.apache.cxf.management.InstrumentationManagerImpl;
-import org.apache.cxf.management.InstrumentationType;
+import org.apache.cxf.management.ManagementConstants;
+import org.apache.cxf.management.jmx.InstrumentationManagerImpl;
+import org.apache.cxf.workqueue.WorkQueueManager;
public class ManagedBusTest extends TestCase {
- public void xtestManagedCXFBus() {
- CXFBusFactory factory = new CXFBusFactory();
- Map<String, Object> properties = new HashMap<String, Object>();
- properties.put(Configurer.USER_CFG_FILE_PROPERTY_NAME,
- "org/apache/cxf/systest/management/managed-cxf.xml");
- Bus bus = factory.createBus(null, properties);
+ public void testManagedSpringBus() throws Exception {
+ SpringBusFactory factory = new SpringBusFactory();
+ Bus bus = factory.createBus();
+ InstrumentationManager im = bus.getExtension(InstrumentationManager.class);
+ assertNotNull(im);
+
+ InstrumentationManagerImpl imi = (InstrumentationManagerImpl)im;
+ assertEquals("service:jmx:rmi:///jndi/rmi://localhost:9913/jmxrmi", imi.getJMXServiceURL());
+ assertTrue(!imi.isEnabled());
+ assertNull(imi.getMBeanServer());
+
+ //Test that registering without an MBeanServer is a no-op
+ im.register(imi, new ObjectName("org.apache.cxf:foo=bar"));
+
bus.shutdown(true);
}
-
- public void testManagedSpringBus() {
+
+ public void testManagedBusWithConfig() throws Exception {
SpringBusFactory factory = new SpringBusFactory();
Bus bus = factory.createBus("org/apache/cxf/systest/management/managed-spring.xml", true);
InstrumentationManager im = bus.getExtension(InstrumentationManager.class);
assertNotNull(im);
InstrumentationManagerImpl imi = (InstrumentationManagerImpl)im;
- InstrumentationType i = imi.getInstrumentation();
- assertNotNull(i);
+ assertEquals("service:jmx:rmi:///jndi/rmi://localhost:9914/jmxrmi", imi.getJMXServiceURL());
+ assertTrue(imi.isEnabled());
+ assertNotNull(imi.getMBeanServer());
+
+ WorkQueueManager manager = bus.getExtension(WorkQueueManager.class);
+ manager.getAutomaticWorkQueue();
+
+ MBeanServer mbs = im.getMBeanServer();
+ ObjectName name = new ObjectName(ManagementConstants.DEFAULT_DOMAIN_NAME
+ + ":type=WorkQueueMBean,*");
+ Set s = mbs.queryNames(name, null);
+ assertTrue(s.size() == 1);
+ Iterator it = s.iterator();
+ while (it.hasNext()) {
+ ObjectName n = (ObjectName)it.next();
+ Long result =
+ (Long)mbs.invoke(n, "getWorkQueueMaxSize", new Object[0], new String[0]);
+ assertEquals(result, Long.valueOf(250));
+ }
bus.shutdown(true);
}
Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/management/managed-spring.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/management/managed-spring.xml?view=diff&rev=510907&r1=510906&r2=510907
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/management/managed-spring.xml (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/management/managed-spring.xml Fri Feb 23 03:25:58 2007
@@ -23,21 +23,10 @@
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.InstrumentationManagerImpl">
- <property name="bus" ref="cxf"/>
- <property name="instrumentation">
- <value>
- <im:instrumentation Enabled="true" JMXEnabled="true"/>
- </value>
- </property>
- <property name="JMXConnectorPolicy">
- <value>
- <im:JMXConnectorPolicy
- Threaded="true"
- Daemon="false"
- JMXServiceURL="service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi/server"/>
- </value>
- </property>
+ <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:9914/jmxrmi" />
</bean>
</beans>