summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Gemmell <robbie@apache.org>2012-08-03 16:01:01 +0000
committerRobert Gemmell <robbie@apache.org>2012-08-03 16:01:01 +0000
commitf8ffd3550ff419132e93e51374adcb4150d98f86 (patch)
tree9e69f7e054bf0121829a924b12c42cabf3afa017
parent24429443745b108023722ea24ecde812f01377ac (diff)
downloadqpid-python-f8ffd3550ff419132e93e51374adcb4150d98f86.tar.gz
QPID-4188: add fallback exception/error logging to MBeanInvocationHandlerImpl
Applied patch from Philip Harvey <phil@philharveyonline.com> and Oleksandr Rudyy<orudyy@gmail.com> git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1369065 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java27
1 files changed, 26 insertions, 1 deletions
diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java
index 2dc97cef49..a2a0d2d093 100644
--- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java
+++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java
@@ -39,6 +39,7 @@ import javax.management.MBeanServer;
import javax.management.Notification;
import javax.management.NotificationListener;
import javax.management.ObjectName;
+import javax.management.RuntimeErrorException;
import javax.management.remote.JMXConnectionNotification;
import javax.management.remote.JMXPrincipal;
import javax.management.remote.MBeanServerForwarder;
@@ -49,6 +50,7 @@ import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.security.AccessControlContext;
import java.security.AccessController;
+import java.util.Arrays;
import java.util.Map;
import java.util.Set;
@@ -170,7 +172,30 @@ public class MBeanInvocationHandlerImpl implements InvocationHandler, Notificati
}
catch (InvocationTargetException e)
{
- throw e.getTargetException();
+ Throwable targetException = e.getCause();
+ logTargetException(method, args, targetException);
+ throw targetException;
+ }
+ }
+
+ private void logTargetException(Method method, Object[] args, Throwable targetException)
+ {
+ Throwable error = null;
+ if (targetException instanceof RuntimeErrorException)
+ {
+ error = ((RuntimeErrorException)targetException).getCause();
+ }
+ else if (targetException instanceof Error)
+ {
+ error = targetException;
+ }
+ if (error == null)
+ {
+ _logger.debug("Exception was thrown on invoking of " + method + " with arguments " + Arrays.toString(args), targetException);
+ }
+ else
+ {
+ _logger.error("Unexpected error occured on invoking of " + method + " with arguments " + Arrays.toString(args), targetException);
}
}