Author: ritchiem
Date: Wed Aug 12 18:14:26 2009
New Revision: 803647

URL: http://svn.apache.org/viewvc?rev=803647&view=rev
Log:
QPID-2002 : Added Logging of management console connection open and close events

Modified:
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/messages/LogMessages.properties
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/messages/LogMessages_en_US.properties
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/MBeanInvocationHandlerImpl.java

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/messages/LogMessages.properties
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/messages/LogMessages.properties?rev=803647&r1=803646&r2=803647&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/messages/LogMessages.properties
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/messages/LogMessages.properties
 Wed Aug 12 18:14:26 2009
@@ -46,6 +46,9 @@
 MNG-1005 = Stopped
 # 0 - Path
 MNG-1006 = Using SSL Keystore : {0}
+MNG-1007 = Open : User {0}
+MNG-1008 = Close
+
 
 #VirtualHost
 # 0 - name

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/messages/LogMessages_en_US.properties
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/messages/LogMessages_en_US.properties?rev=803647&r1=803646&r2=803647&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/messages/LogMessages_en_US.properties
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/messages/LogMessages_en_US.properties
 Wed Aug 12 18:14:26 2009
@@ -212,6 +212,9 @@
 MNG-1005 = Stopped
 # 0 - Path
 MNG-1006 = Using SSL Keystore : {0}
+MNG-1007 = Open : User {0}
+MNG-1008 = Close
+
 
 #VirtualHost
 # 0 - name

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java?rev=803647&r1=803646&r2=803647&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java
 Wed Aug 12 18:14:26 2009
@@ -34,9 +34,16 @@
 import javax.management.MBeanServer;
 import javax.management.MBeanServerFactory;
 import javax.management.ObjectName;
+import javax.management.NotificationListener;
+import javax.management.MalformedObjectNameException;
+import javax.management.NotificationFilter;
+import javax.management.NotificationFilterSupport;
+import javax.management.InstanceNotFoundException;
+import javax.management.relation.MBeanServerNotificationFilter;
 import javax.management.remote.JMXConnectorServer;
 import javax.management.remote.JMXServiceURL;
 import javax.management.remote.MBeanServerForwarder;
+import javax.management.remote.JMXConnectionNotification;
 import javax.management.remote.rmi.RMIConnectorServer;
 import javax.management.remote.rmi.RMIJRMPServerImpl;
 import javax.management.remote.rmi.RMIServerImpl;
@@ -47,6 +54,7 @@
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.lang.management.ManagementFactory;
+import java.lang.reflect.Proxy;
 import java.net.InetAddress;
 import java.net.ServerSocket;
 import java.net.Socket;
@@ -275,8 +283,18 @@
         //Add the custom invoker as an MBeanServerForwarder, and start the 
RMIConnectorServer.
         MBeanServerForwarder mbsf = 
MBeanInvocationHandlerImpl.newProxyInstance();
         cs.setMBeanServerForwarder(mbsf);
+
+        NotificationFilterSupport filter = new NotificationFilterSupport();
+        filter.enableType(JMXConnectionNotification.OPENED);
+        filter.enableType(JMXConnectionNotification.CLOSED);
+        filter.enableType(JMXConnectionNotification.FAILED);
+        // Get the handler that is used by the above MBInvocationHandler Proxy.
+        // which is the MBeanInvocationHandlerImpl and so also a 
NotificationListener
+        cs.addNotificationListener((NotificationListener) 
Proxy.getInvocationHandler(mbsf), filter, null);
+
         cs.start();
 
+
         CurrentActor.get().message(ManagementConsoleMessages.MNG_1004());
     }
 

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/MBeanInvocationHandlerImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/MBeanInvocationHandlerImpl.java?rev=803647&r1=803646&r2=803647&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/MBeanInvocationHandlerImpl.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management/MBeanInvocationHandlerImpl.java
 Wed Aug 12 18:14:26 2009
@@ -23,15 +23,23 @@
 import org.apache.qpid.management.common.mbeans.ConfigurationManagement;
 import org.apache.qpid.management.common.mbeans.LoggingManagement;
 import org.apache.qpid.management.common.mbeans.UserManagement;
+import org.apache.qpid.server.logging.actors.CurrentActor;
+import org.apache.qpid.server.logging.actors.ManagementActor;
+import org.apache.qpid.server.logging.messages.ManagementConsoleMessages;
+import org.apache.qpid.server.logging.messages.ConnectionMessages;
+import org.apache.qpid.server.logging.LogActor;
 import org.apache.log4j.Logger;
 
 import javax.management.remote.MBeanServerForwarder;
 import javax.management.remote.JMXPrincipal;
+import javax.management.remote.JMXConnectionNotification;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 import javax.management.MBeanInfo;
 import javax.management.MBeanOperationInfo;
 import javax.management.JMException;
+import javax.management.NotificationListener;
+import javax.management.Notification;
 import javax.security.auth.Subject;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Proxy;
@@ -49,7 +57,7 @@
  * the logic for allowing the users to invoke MBean operations and implements 
the restrictions for readOnly, readWrite
  * and admin users.
  */
-public class MBeanInvocationHandlerImpl implements InvocationHandler
+public class MBeanInvocationHandlerImpl implements InvocationHandler, 
NotificationListener
 {
     private static final Logger _logger = 
Logger.getLogger(MBeanInvocationHandlerImpl.class);
 
@@ -59,6 +67,7 @@
     private final static String DELEGATE = 
"JMImplementation:type=MBeanServerDelegate";
     private MBeanServer _mbs;
     private static Properties _userRoles = new Properties();
+    private static ManagementActor  _logActor;
 
     private static HashSet<String> _adminOnlyMethods = new HashSet<String>();
     {
@@ -72,6 +81,9 @@
         final InvocationHandler handler = new MBeanInvocationHandlerImpl();
         final Class[] interfaces = new Class[]{MBeanServerForwarder.class};
 
+
+        _logActor = new 
ManagementActor(CurrentActor.get().getRootMessageLogger());
+
         Object proxy = 
Proxy.newProxyInstance(MBeanServerForwarder.class.getClassLoader(), interfaces, 
handler);
         return MBeanServerForwarder.class.cast(proxy);
     }
@@ -254,4 +266,23 @@
 
         return false;
     }
+
+    public void handleNotification(Notification notification, Object handback)
+    {
+        // only RMI Connections are serviced here, Local API atta  
+        // rmi://169.24.29.116 guest 3
+        String[] connectionData = ((JMXConnectionNotification) 
notification).getConnectionId().split(" ");
+        String user = connectionData[1];
+
+        if (notification.getType().equals(JMXConnectionNotification.OPENED))
+        {
+            _logActor.message(ManagementConsoleMessages.MNG_1007(user));
+        }
+        else if 
(notification.getType().equals(JMXConnectionNotification.CLOSED) ||
+                 
notification.getType().equals(JMXConnectionNotification.FAILED))
+        {
+            _logActor.message(ManagementConsoleMessages.MNG_1008());
+        }
+    }
 }
+



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to