You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by jo...@apache.org on 2016/10/28 00:47:28 UTC
[2/2] deltaspike git commit: DELTASPIKE-1207: fix exception handling
in DynamicMBeanWrapper.invoke()
DELTASPIKE-1207: fix exception handling in DynamicMBeanWrapper.invoke()
- don't wrap MBeanException directly thrown by the MBean method
- document exception handling in @JmxManaged
This closes #66
This closes #62
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/ebb24acc
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/ebb24acc
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/ebb24acc
Branch: refs/heads/master
Commit: ebb24accd05648df3206d77149ccf182d367700f
Parents: 7215f7b
Author: famod <f....@gmx.net>
Authored: Sun Oct 16 22:17:47 2016 +0200
Committer: John D. Ament <jo...@apache.org>
Committed: Thu Oct 27 20:47:08 2016 -0400
----------------------------------------------------------------------
.../deltaspike/core/api/jmx/JmxManaged.java | 6 +++--
.../core/impl/jmx/DynamicMBeanWrapper.java | 25 ++++++++++++++++----
2 files changed, 24 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/ebb24acc/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/jmx/JmxManaged.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/jmx/JmxManaged.java b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/jmx/JmxManaged.java
index 1b1001b..b9f28ae 100644
--- a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/jmx/JmxManaged.java
+++ b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/jmx/JmxManaged.java
@@ -28,9 +28,11 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Describes a JMX operation or attribute, when used on a method or a field, respectively.
- *
+ * <p>
* Used on a method it describes a JMX operation with an optional description.
- *
+ * An exception thrown by the method will be wrapped in a {@link javax.management.MBeanException}
+ * unless it already is a {@code MBeanException}.
+ * <p>
* Used on a field it describes a JMX attribute. This attribute is readable if a getter on this field is available and
* writable if a setter is found.
*/
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/ebb24acc/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/jmx/DynamicMBeanWrapper.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/jmx/DynamicMBeanWrapper.java b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/jmx/DynamicMBeanWrapper.java
index 09166d5..9a7c1e0 100644
--- a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/jmx/DynamicMBeanWrapper.java
+++ b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/jmx/DynamicMBeanWrapper.java
@@ -59,7 +59,6 @@ import org.apache.deltaspike.core.api.jmx.MBean;
import org.apache.deltaspike.core.api.jmx.NotificationInfo;
import org.apache.deltaspike.core.api.provider.BeanManagerProvider;
import org.apache.deltaspike.core.api.provider.BeanProvider;
-import org.apache.deltaspike.core.util.ExceptionUtils;
import org.apache.deltaspike.core.util.ParameterUtil;
/**
@@ -396,17 +395,33 @@ public class DynamicMBeanWrapper extends NotificationBroadcasterSupport implemen
{
return operations.get(actionName).invoke(instance(), params);
}
- catch (Exception e)
+ catch (InvocationTargetException e)
+ {
+ final Throwable cause = e.getCause();
+ if (cause instanceof Error)
+ {
+ throw (Error) cause;
+ }
+ if (cause instanceof MBeanException)
+ {
+ throw (MBeanException) cause;
+ }
+ throw new MBeanException((Exception) cause, actionName + " failed with exception");
+ }
+ catch (IllegalAccessException e)
+ {
+ throw new ReflectionException(e, actionName + " could not be invoked");
+ }
+ catch (IllegalArgumentException e)
{
- LOGGER.log(Level.SEVERE, actionName + " can't be invoked", e);
- throw ExceptionUtils.throwAsRuntimeException(e);
+ throw new ReflectionException(e, actionName + " could not be invoked");
}
finally
{
Thread.currentThread().setContextClassLoader(oldCl);
}
}
- throw new MBeanException(new IllegalArgumentException(), actionName + " doesn't exist");
+ throw new ReflectionException(new NoSuchMethodException(actionName + " doesn't exist"));
}
private synchronized Object instance()