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/20 16:45:18 UTC
svn commit: r827585 - in /servicemix/smx4/nmr/trunk/nmr/management/src:
main/java/org/apache/servicemix/nmr/management/ManagementAgent.java
test/java/org/apache/servicemix/nmr/management/ManagementStrategyTest.java
Author: eglynn
Date: Tue Oct 20 14:45:18 2009
New Revision: 827585
URL: http://svn.apache.org/viewvc?rev=827585&view=rev
Log:
Fix for [SMX4NMR-65] ServiceMix NMR NotCompliantMBeanException when ManagedEndpoint registered via ManagementStrategy
Modified:
servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementAgent.java
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=827585&r1=827584&r2=827585&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 Tue Oct 20 14:45:18 2009
@@ -20,6 +20,7 @@
import java.util.EventObject;
import java.util.Set;
import java.util.HashSet;
+import java.lang.reflect.UndeclaredThrowableException;
import javax.jbi.component.ComponentContext;
import javax.management.InstanceNotFoundException;
@@ -229,28 +230,32 @@
public void register(Object obj, ObjectName name, boolean forceRegistration) throws JMException {
try {
registerMBeanWithServer(obj, name, forceRegistration);
- } catch (UndeclaredThrowableException e) {
- if (e.getCause() instanceof NotCompliantMBeanException) {
- setModelMBeanInfo(obj, name, forceRegistration);
- }
- } catch (NotCompliantMBeanException e1) {
- setModelMBeanInfo(obj, name, forceRegistration);
+ } catch (NotCompliantMBeanException e) {
+ registerViaAnnotations(obj, name, forceRegistration);
+ } catch (UndeclaredThrowableException ute) {
+ if (ute.getCause() instanceof NotCompliantMBeanException) {
+ registerViaAnnotations(obj, name, forceRegistration);
+ } else if (ute.getCause() instanceof RuntimeException) {
+ throw (RuntimeException)ute.getCause();
+ } else {
+ throw new JMException(ute.getCause().getMessage());
+ }
}
}
- private void setModelMBeanInfo(Object obj, ObjectName name,
- boolean forceRegistration) throws JMException, ReflectionException,
- MBeanException, InstanceNotFoundException {
- ModelMBeanInfo mbi = assembler.getMBeanInfo(obj, name.toString());
- RequiredModelMBean mbean = (RequiredModelMBean) mbeanServer.instantiate(RequiredModelMBean.class.getName());
- mbean.setModelMBeanInfo(mbi);
- try {
- mbean.setManagedResource(obj, "ObjectReference");
- } catch (InvalidTargetObjectTypeException itotex) {
- throw new JMException(itotex.getMessage());
- }
- registerMBeanWithServer(mbean, name, forceRegistration);
- }
+ protected void registerViaAnnotations(Object obj, ObjectName name, boolean forceRegistration) throws JMException {
+ // If this is not a "normal" MBean, then try to deploy it using JMX
+ // annotations
+ ModelMBeanInfo mbi = assembler.getMBeanInfo(obj, name.toString());
+ RequiredModelMBean mbean = (RequiredModelMBean) mbeanServer.instantiate(RequiredModelMBean.class.getName());
+ mbean.setModelMBeanInfo(mbi);
+ try {
+ mbean.setManagedResource(obj, "ObjectReference");
+ } catch (InvalidTargetObjectTypeException itotex) {
+ throw new JMException(itotex.getMessage());
+ }
+ registerMBeanWithServer(mbean, name, forceRegistration);
+ }
public void unregister(ObjectName name) throws JMException {
mbeanServer.unregisterMBean(name);
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=827585&r1=827584&r2=827585&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 Tue Oct 20 14:45:18 2009
@@ -18,6 +18,8 @@
import java.util.EventObject;
import java.util.HashMap;
+import java.lang.reflect.UndeclaredThrowableException;
+
import javax.management.MBeanServer;
import javax.management.NotCompliantMBeanException;
@@ -273,6 +275,16 @@
@Test
public void testRepeatManageManagedEndpoint() throws Exception {
+ doTestManageManagedEndpoint(new NotCompliantMBeanException());
+ }
+
+ @Test
+ public void testManageManagedEndpointWithUndeclaredThrowable() throws Exception {
+ Exception ex = new NotCompliantMBeanException();
+ doTestManageManagedEndpoint(new UndeclaredThrowableException(ex));
+ }
+
+ private void doTestManageManagedEndpoint(Exception ex) throws Exception {
ObjectName name = new ObjectName(ENDPOINT_NAME);
ObjectInstance instance = new ObjectInstance(name, Nameable.class.getName());
InternalEndpoint internal = control.createMock(InternalEndpoint.class);
@@ -280,7 +292,6 @@
ManagedEndpoint endpoint =
new ManagedEndpoint(internal, props, strategy);
expect(internal.getId()).andReturn("endpoint_foo");
- Exception ex = new NotCompliantMBeanException();
expect(mbeanServer.registerMBean(isA(ManagedEndpoint.class), eq(name))).andThrow(ex);
RequiredModelMBean mbean = control.createMock(RequiredModelMBean.class);
expect(mbeanServer.instantiate(RequiredModelMBean.class.getName())).andReturn(mbean);