Author: ffang
Date: Tue Oct 20 14:27:58 2009
New Revision: 827544
URL: http://svn.apache.org/viewvc?rev=827544&view=rev
Log:
[SMX4NMR-166]ManagementAgent.register method should catch
UndeclaredThrowableException also
Modified:
servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementAgent.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=827544&r1=827543&r2=827544&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:27:58 2009
@@ -16,11 +16,14 @@
*/
package org.apache.servicemix.nmr.management;
+import java.lang.reflect.UndeclaredThrowableException;
import java.util.EventObject;
import java.util.Set;
import java.util.HashSet;
import javax.jbi.component.ComponentContext;
+import javax.management.InstanceNotFoundException;
+import javax.management.MBeanException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
@@ -28,6 +31,7 @@
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectInstance;
import javax.management.InstanceAlreadyExistsException;
+import javax.management.ReflectionException;
import javax.management.StandardMBean;
import javax.management.modelmbean.ModelMBeanInfo;
import javax.management.modelmbean.RequiredModelMBean;
@@ -225,21 +229,29 @@
public void register(Object obj, ObjectName name, boolean
forceRegistration) throws JMException {
try {
registerMBeanWithServer(obj, name, forceRegistration);
- } catch (NotCompliantMBeanException e) {
- // 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);
+ } catch (UndeclaredThrowableException e) {
+ if (e.getCause() instanceof NotCompliantMBeanException) {
+ setModelMBeanInfo(obj, name, forceRegistration);
+ }
+ } catch (NotCompliantMBeanException e1) {
+ setModelMBeanInfo(obj, name, forceRegistration);
}
}
+ 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);
+ }
+
public void unregister(ObjectName name) throws JMException {
mbeanServer.unregisterMBean(name);
}