You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by eg...@apache.org on 2009/10/07 12:52:24 UTC
svn commit: r822656 - in /servicemix/smx4/nmr/trunk/nmr/management/src:
main/java/org/apache/servicemix/nmr/management/
main/resources/OSGI-INF/blueprint/
test/java/org/apache/servicemix/nmr/management/
Author: eglynn
Date: Wed Oct 7 10:52:23 2009
New Revision: 822656
URL: http://svn.apache.org/viewvc?rev=822656&view=rev
Log:
Paul Taylor's fix for [SMX4NMR-160] Management agent cannot be easily extended
Modified:
servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementAgent.java
servicemix/smx4/nmr/trunk/nmr/management/src/main/resources/OSGI-INF/blueprint/servicemix-nmr-management.xml
servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/ManagementStrategyTest.java
Modified: servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementAgent.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementAgent.java?rev=822656&r1=822655&r2=822656&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementAgent.java (original)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementAgent.java Wed Oct 7 10:52:23 2009
@@ -33,6 +33,8 @@
import javax.management.modelmbean.RequiredModelMBean;
import javax.management.modelmbean.InvalidTargetObjectTypeException;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
import org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler;
import org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource;
import org.springframework.beans.factory.DisposableBean;
@@ -50,10 +52,13 @@
private static final transient Log LOG = LogFactory.getLog(ManagementAgent.class);
+ private boolean enabled;
private MBeanServer mbeanServer;
private MetadataMBeanInfoAssembler assembler;
private Set<ObjectName> mbeans = new HashSet<ObjectName>();
private NamingStrategy namingStrategy;
+ private BundleContext bundleContext;
+ private ServiceRegistration serviceRegistration;
public ManagementAgent() {
assembler = new MetadataMBeanInfoAssembler();
@@ -148,7 +153,23 @@
LOG.trace(event.toString());
}
}
-
+
+ public void setBundleContext(BundleContext ctx) {
+ bundleContext = ctx;
+ }
+
+ public BundleContext getBundleContext() {
+ return bundleContext;
+ }
+
+ public void setEnabled(boolean b) {
+ enabled = b;
+ }
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+
public MBeanServer getMbeanServer() {
return mbeanServer;
}
@@ -164,25 +185,36 @@
public void setNamingStrategy(NamingStrategy namingStrategy) {
this.namingStrategy = namingStrategy;
}
+
+ public void init() throws Exception {
+ if (isEnabled()) {
+ registerService();
+ }
+ }
+
public void destroy() throws Exception {
// Using the array to hold the busMBeans to avoid the
// CurrentModificationException
- Object[] mBeans = mbeans.toArray();
- int caught = 0;
- for (Object name : mBeans) {
- mbeans.remove((ObjectName)name);
- try {
- unregister((ObjectName)name);
- } catch (JMException jmex) {
- LOG.info("Exception unregistering MBean", jmex);
- caught++;
+ try {
+ Object[] mBeans = mbeans.toArray();
+ int caught = 0;
+ for (Object name : mBeans) {
+ mbeans.remove((ObjectName)name);
+ try {
+ unregister((ObjectName)name);
+ } catch (JMException jmex) {
+ LOG.info("Exception unregistering MBean", jmex);
+ caught++;
+ }
}
- }
- if (caught > 0) {
- LOG.warn("A number of " + caught
- + " exceptions caught while unregistering MBeans during stop operation. "
- + "See INFO log for details.");
+ if (caught > 0) {
+ LOG.warn("A number of " + caught
+ + " exceptions caught while unregistering MBeans during stop operation. "
+ + "See INFO log for details.");
+ }
+ } finally {
+ unregisterService();
}
}
@@ -230,6 +262,17 @@
}
}
+ protected void registerService() {
+ serviceRegistration = getBundleContext().registerService("org.fusesource.commons.management.ManagementStrategy",
+ this, null);
+ }
+
+ protected void unregisterService() {
+ if (serviceRegistration != null) {
+ serviceRegistration.unregister();
+ }
+ }
+
private ObjectName getTypeSpecificObjectName(Object mo, String customName) throws MalformedObjectNameException {
return mo instanceof ManagedEndpoint
? namingStrategy.getObjectName((ManagedEndpoint)mo)
Modified: servicemix/smx4/nmr/trunk/nmr/management/src/main/resources/OSGI-INF/blueprint/servicemix-nmr-management.xml
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/management/src/main/resources/OSGI-INF/blueprint/servicemix-nmr-management.xml?rev=822656&r1=822655&r2=822656&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/main/resources/OSGI-INF/blueprint/servicemix-nmr-management.xml (original)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/main/resources/OSGI-INF/blueprint/servicemix-nmr-management.xml Wed Oct 7 10:52:23 2009
@@ -25,12 +25,38 @@
<reference id="mbeanServer"
interface="javax.management.MBeanServer"
availability="mandatory"/>
+
- <!-- Endpoint registry -->
- <bean id="endpointRegistry" class="org.apache.servicemix.nmr.management.ManagementEndpointRegistry">
- <property name="managementStrategy" ref="managementStrategy" />
+ <bean id="namingStrategy" class="org.apache.servicemix.nmr.management.DefaultNamingStrategy">
+ <property name="jmxDomainName" value="org.apache.servicemix" />
</bean>
+ <!-- ManagementStrategy -->
+ <bean id="managementStrategy"
+ class="org.apache.servicemix.nmr.management.ManagementAgent"
+ init-method="init"
+ destroy-method="destroy">
+ <property name="bundleContext" ref="blueprintBundleContext"/>
+ <property name="enabled" value="${enabled}"/>
+ <property name="namingStrategy" ref="namingStrategy" />
+ <property name="mbeanServer" ref="mbeanServer" />
+ </bean>
+
+ <!-- Service registration for the management strategy is done in
+ ManagementAgent.init() so that is can be made optional depending
+ on the value returned by isEnabled(). This means that we must
+ get a separate reference to the management strategy so it can
+ be injected into the management endpoint registry. -->
+ <reference id="managementStrategyRef"
+ interface="org.fusesource.commons.management.ManagementStrategy"
+ availability="optional"/>
+
+ <!-- Endpoint registry -->
+ <bean id="endpointRegistry"
+ class="org.apache.servicemix.nmr.management.ManagementEndpointRegistry">
+ <property name="managementStrategy" ref="managementStrategyRef"/>
+ </bean>
+
<!-- List of endpoints -->
<reference-list id="endpoints"
interface="org.apache.servicemix.nmr.api.internal.InternalEndpoint"
@@ -45,24 +71,15 @@
<value>org.apache.servicemix.nmr.api.event.Listener</value>
</interfaces>
</service>
-
- <!-- ManagementStrategy -->
- <!-- Replace the following beans and <service> element with
- a <reference> element if plugging in an alternative
- ManagementStrategy implementation from another bundle -->
- <bean id="namingStrategy" class="org.apache.servicemix.nmr.management.DefaultNamingStrategy">
- <property name="jmxDomainName" value="org.apache.servicemix" />
- </bean>
-
- <bean id="managementStrategy" class="org.apache.servicemix.nmr.management.ManagementAgent">
- <property name="namingStrategy" ref="namingStrategy" />
- <property name="mbeanServer" ref="mbeanServer" />
- </bean>
-
- <service ref="managementStrategy">
- <interfaces>
- <value>org.fusesource.commons.management.ManagementStrategy</value>
- </interfaces>
- </service>
-
+
+ <!-- Property place holder -->
+ <cm:property-placeholder persistent-id="org.apache.servicemix.nmr.management">
+ <cm:default-properties>
+ <!-- This property should be overridden to false if plugging in
+ an alternative ManagementStrategy implementation from
+ another bundle -->
+ <cm:property name="enabled" value="true"/>
+ </cm:default-properties>
+ </cm:property-placeholder>
+
</blueprint>
Modified: servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/ManagementStrategyTest.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/ManagementStrategyTest.java?rev=822656&r1=822655&r2=822656&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/ManagementStrategyTest.java (original)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/ManagementStrategyTest.java Wed Oct 7 10:52:23 2009
@@ -38,6 +38,8 @@
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
public class ManagementStrategyTest extends Assert { //TestCase {
@@ -307,6 +309,35 @@
// non-replacable static log factory awkward to mock
strategy.notify(new EventObject(this));
}
+
+ @Test
+ public void testEnableDisable() throws Exception {
+
+ ServiceRegistration sr = createMock(ServiceRegistration.class);
+ sr.unregister();
+ BundleContext ctx = createMock(BundleContext.class);
+ expect(ctx.registerService("org.fusesource.commons.management.ManagementStrategy",
+ strategy, null)).andReturn(sr);
+ replay(ctx, sr);
+
+ strategy.setEnabled(true);
+ assertTrue(strategy.isEnabled());
+ strategy.setBundleContext(ctx);
+ assertSame(ctx, strategy.getBundleContext());
+ strategy.init();
+ strategy.destroy();
+ verify(ctx, sr);
+
+ reset(ctx, sr);
+ replay(ctx, sr);
+ strategy = setUpStrategy();
+ strategy.setEnabled(false);
+ assertFalse(strategy.isEnabled());
+ strategy.init();
+ strategy.destroy();
+ verify(ctx, sr);
+
+ }
protected ManagementAgent setUpStrategy() {
ManagementAgent ms = new ManagementAgent();