You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2010/11/27 13:48:11 UTC

svn commit: r1039663 - in /james/server/trunk: netty-socket/src/main/java/org/apache/james/socket/ pop3server/src/main/java/org/apache/james/pop3server/jmx/ smtpserver/src/main/java/org/apache/james/smtpserver/ smtpserver/src/main/java/org/apache/james...

Author: norman
Date: Sat Nov 27 12:48:10 2010
New Revision: 1039663

URL: http://svn.apache.org/viewvc?rev=1039663&view=rev
Log:
Expose handler stats for SMTP and POP3. See JAMES-1057

Added:
    james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractCommandHandlerResultJMXMonitor.java
      - copied, changed from r1039642, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerResultJMXMonitor.java
    james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractCommandHandlerStats.java
    james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractConnectHandlerResultJMXMonitor.java
    james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractLineHandlerResultJMXMonitor.java
    james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/CommandHandlerStatsMBean.java
    james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/ConnectHandlerStats.java
    james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/HandlerStatsMBean.java
    james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/LineHandlerStats.java
    james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/
    james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/CommandHandlerResultJMXMonitor.java
    james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/ConnectHandlerResultJMXMonitor.java
    james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/LineHandlerResultJMXMonitor.java
    james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStats.java
    james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStatsMBean.java
    james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/
    james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/CommandHandlerResultJMXMonitor.java
    james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/ConnectHandlerResultJMXMonitor.java
    james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookResultJMXMonitor.java
      - copied, changed from r1039642, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookResultJMXMonitor.java
    james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookStats.java
      - copied, changed from r1036079, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookStats.java
    james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookStatsMBean.java
      - copied, changed from r1036079, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookStatsMBean.java
    james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/LineHandlerResultJMXMonitor.java
    james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStats.java
      - copied, changed from r1036079, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerStats.java
    james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStatsMBean.java
      - copied, changed from r1036079, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerStatsMBean.java
Removed:
    james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerResultJMXMonitor.java
    james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerStats.java
    james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerStatsMBean.java
    james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookResultJMXMonitor.java
    james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookStats.java
    james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookStatsMBean.java

Copied: james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractCommandHandlerResultJMXMonitor.java (from r1039642, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerResultJMXMonitor.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractCommandHandlerResultJMXMonitor.java?p2=james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractCommandHandlerResultJMXMonitor.java&p1=james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerResultJMXMonitor.java&r1=1039642&r2=1039663&rev=1039663&view=diff
==============================================================================
--- james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerResultJMXMonitor.java (original)
+++ james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractCommandHandlerResultJMXMonitor.java Sat Nov 27 12:48:10 2010
@@ -16,30 +16,27 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.smtpserver;
+package org.apache.james.socket;
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.james.protocols.api.CommandHandler;
+import org.apache.james.protocols.api.CommandHandlerResultHandler;
 import org.apache.james.protocols.api.ExtensibleHandler;
 import org.apache.james.protocols.api.ProtocolSession;
 import org.apache.james.protocols.api.Response;
-import org.apache.james.protocols.api.CommandHandlerResultHandler;
 import org.apache.james.protocols.api.WiringException;
-import org.apache.james.protocols.smtp.SMTPResponse;
-import org.apache.james.protocols.smtp.SMTPSession;
 
 /**
  * Expose JMX statistics for {@link CommandHandler}
  *
  */
-public class CommandHandlerResultJMXMonitor implements CommandHandlerResultHandler<SMTPResponse, SMTPSession>, ExtensibleHandler {
+public abstract class AbstractCommandHandlerResultJMXMonitor<R extends Response, S extends ProtocolSession> implements CommandHandlerResultHandler<R, S>, ExtensibleHandler {
 
-    private Map<String, CommandHandlerStats> cStats = new HashMap<String, CommandHandlerStats>();
+    private Map<String, AbstractCommandHandlerStats<R>> cStats = new HashMap<String, AbstractCommandHandlerStats<R>>();
 
     
 
@@ -47,9 +44,9 @@ public class CommandHandlerResultJMXMoni
      * (non-Javadoc)
      * @see org.apache.james.protocols.api.CommanHandlerResultHandler#onResponse(org.apache.james.protocols.api.ProtocolSession, org.apache.james.protocols.api.Response, long, org.apache.james.protocols.api.CommandHandler)
      */
-    public Response onResponse(ProtocolSession session, SMTPResponse response, long executionTime, CommandHandler<SMTPSession> handler) {
+    public Response onResponse(ProtocolSession session, R response, long executionTime, CommandHandler<S> handler) {
         String name = handler.getClass().getName();
-        CommandHandlerStats stats = cStats.get(name);
+        AbstractCommandHandlerStats<R> stats = cStats.get(name);
         if (stats != null) {
             stats.increment(response);
         }
@@ -79,8 +76,7 @@ public class CommandHandlerResultJMXMoni
                 if (equals(c) == false) {
                     String cName = c.getClass().getName();
                     try {
-                        Collection<String> col = c.getImplCommands();
-                        cStats.put(cName, new CommandHandlerStats(cName, col.toArray(new String[col.size()])));
+                        cStats.put(cName, createCommandHandlerStats(c));
                     } catch (Exception e) {
                         throw new WiringException("Unable to wire Hooks",  e);
                     }
@@ -88,5 +84,7 @@ public class CommandHandlerResultJMXMoni
             }
         }
     }
+    
+    protected abstract AbstractCommandHandlerStats<R> createCommandHandlerStats(CommandHandler<S> handler) throws Exception;
 
 }

Added: james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractCommandHandlerStats.java
URL: http://svn.apache.org/viewvc/james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractCommandHandlerStats.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractCommandHandlerStats.java (added)
+++ james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractCommandHandlerStats.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,115 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.socket;
+
+import java.lang.management.ManagementFactory;
+import java.util.concurrent.atomic.AtomicLong;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.MBeanRegistrationException;
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.NotCompliantMBeanException;
+import javax.management.ObjectName;
+import javax.management.StandardMBean;
+
+import org.apache.james.lifecycle.Disposable;
+import org.apache.james.protocols.api.CommandHandler;
+import org.apache.james.protocols.api.Response;
+
+/**
+ * Expose statistics for {@link CommandHandler} via JMX
+ *
+ */
+public abstract class AbstractCommandHandlerStats<R extends Response> extends StandardMBean implements CommandHandlerStatsMBean, Disposable {
+
+    private AtomicLong all = new AtomicLong(0);
+    private AtomicLong disconnect = new AtomicLong();
+
+    private String name;
+    private String handlerName;
+    private MBeanServer mbeanserver;
+    private String[] commands;
+
+    public AbstractCommandHandlerStats(Class<?> jmxClass, String jmxPath, String handlerName, String[] commands) throws NotCompliantMBeanException, MalformedObjectNameException, NullPointerException, InstanceAlreadyExistsException, MBeanRegistrationException {
+        super(jmxClass);
+        this.handlerName = handlerName;
+        this.commands = commands;
+        
+        name = jmxPath  + ",handler=commandhandler,commandhandler=" + handlerName;
+        mbeanserver = ManagementFactory.getPlatformMBeanServer();
+        ObjectName baseObjectName = new ObjectName(name);
+        mbeanserver.registerMBean(this, baseObjectName);
+    }
+    
+    
+    public void increment(R response) {
+        if (response.isEndSession()) {
+            disconnect.incrementAndGet();
+        }
+        
+        all.incrementAndGet();
+        incrementStats(response);
+    }
+    
+    protected abstract void incrementStats(R response);
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.smtpserver.CommandHandlerStatsMBean#getAll()
+     */
+    public long getAll() {
+        return all.get();
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.smtpserver.CommandHandlerStatsMBean#getName()
+     */
+    public String getName() {
+        return handlerName;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.lifecycle.Disposable#dispose()
+     */
+    public void dispose() {
+        try {
+            mbeanserver.unregisterMBean(new ObjectName(name));
+        } catch (Exception e) {
+            // ignore here;
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.smtpserver.CommandHandlerStatsMBean#getCommands()
+     */
+    public String[] getCommands() {
+        return commands;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.socket.HandlerStatsMBean#getDisconnect()
+     */
+    public long getDisconnect() {
+        return disconnect.get();
+    }
+}

Added: james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractConnectHandlerResultJMXMonitor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractConnectHandlerResultJMXMonitor.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractConnectHandlerResultJMXMonitor.java (added)
+++ james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractConnectHandlerResultJMXMonitor.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,98 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.socket;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.james.lifecycle.Configurable;
+import org.apache.james.protocols.api.ConnectHandler;
+import org.apache.james.protocols.api.ConnectHandlerResultHandler;
+import org.apache.james.protocols.api.ExtensibleHandler;
+import org.apache.james.protocols.api.ProtocolSession;
+import org.apache.james.protocols.api.WiringException;
+
+public abstract class AbstractConnectHandlerResultJMXMonitor<S extends ProtocolSession> implements ConnectHandlerResultHandler<S>, ExtensibleHandler, Configurable{
+
+    private Map<String, ConnectHandlerStats> cStats = new HashMap<String, ConnectHandlerStats>();
+    private String jmxPath;
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.protocols.api.ConnectHandlerResultHandler#onResponse(org.apache.james.protocols.api.ProtocolSession, boolean, long, org.apache.james.protocols.api.ConnectHandler)
+     */
+    public boolean onResponse(ProtocolSession session, boolean response, long executionTime, ConnectHandler<S> handler) {
+        cStats.get(handler.getClass().getName()).increment(response);
+        return response;     
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.protocols.api.ExtensibleHandler#getMarkerInterfaces()
+     */
+    public List<Class<?>> getMarkerInterfaces() {
+        List<Class<?>> marker = new ArrayList<Class<?>>();
+        marker.add(ConnectHandler.class);
+
+        return marker;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.protocols.api.ExtensibleHandler#wireExtensions(java.lang.Class, java.util.List)
+     */
+    @SuppressWarnings({ "unchecked", "rawtypes" })
+    public void wireExtensions(Class<?> interfaceName, List<?> extension) throws WiringException {
+        if (interfaceName.equals(ConnectHandler.class)) {
+            // add stats for all hooks
+            for (int i = 0; i < extension.size(); i++ ) {
+                ConnectHandler c =  (ConnectHandler) extension.get(i);
+                if (equals(c) == false) {
+                    String cName = c.getClass().getName();
+                    try {
+                        cStats.put(cName, new ConnectHandlerStats(jmxPath, cName));
+                    } catch (Exception e) {
+                        throw new WiringException("Unable to wire Hooks",  e);
+                    }
+                }
+            }
+        }
+    }
+    
+    /**
+     * Return the default JMXPath to use if none is configured
+     * 
+     * @return defaultJMXPath
+     */
+    protected abstract String getDefaultJMXPath();
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.lifecycle.Configurable#configure(org.apache.commons.configuration.HierarchicalConfiguration)
+     */
+    public void configure(HierarchicalConfiguration config) throws ConfigurationException {
+        this.jmxPath = config.getString("jmxPath", getDefaultJMXPath());
+    }
+    
+
+}

Added: james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractLineHandlerResultJMXMonitor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractLineHandlerResultJMXMonitor.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractLineHandlerResultJMXMonitor.java (added)
+++ james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractLineHandlerResultJMXMonitor.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,98 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.socket;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.james.lifecycle.Configurable;
+import org.apache.james.protocols.api.ExtensibleHandler;
+import org.apache.james.protocols.api.LineHandler;
+import org.apache.james.protocols.api.LineHandlerResultHandler;
+import org.apache.james.protocols.api.ProtocolSession;
+import org.apache.james.protocols.api.WiringException;
+
+public abstract class AbstractLineHandlerResultJMXMonitor<S extends ProtocolSession> implements LineHandlerResultHandler<S>, ExtensibleHandler, Configurable{
+
+    private Map<String, LineHandlerStats> lStats = new HashMap<String, LineHandlerStats>();
+    private String jmxPath;
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.protocols.api.LineHandlerResultHandler#onResponse(org.apache.james.protocols.api.ProtocolSession, boolean, long, org.apache.james.protocols.api.LineHandler)
+     */
+    public boolean onResponse(ProtocolSession session, boolean response, long executionTime, LineHandler<S> handler) {
+        lStats.get(handler.getClass().getName()).increment(response);
+        return response;
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.protocols.api.ExtensibleHandler#getMarkerInterfaces()
+     */
+    public List<Class<?>> getMarkerInterfaces() {
+        List<Class<?>> marker = new ArrayList<Class<?>>();
+        marker.add(LineHandler.class);
+        return marker;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.protocols.api.ExtensibleHandler#wireExtensions(java.lang.Class, java.util.List)
+     */
+    @SuppressWarnings({ "unchecked", "rawtypes" })
+    public void wireExtensions(Class<?> interfaceName, List<?> extension) throws WiringException {
+       
+        if (interfaceName.equals(LineHandler.class)) {
+            // add stats for all hooks
+            for (int i = 0; i < extension.size(); i++ ) {
+                LineHandler c =  (LineHandler) extension.get(i);
+                if (equals(c) == false) {
+                    String cName = c.getClass().getName();
+                    try {
+                        lStats.put(cName, new LineHandlerStats(jmxPath, cName));
+                    } catch (Exception e) {
+                        throw new WiringException("Unable to wire Hooks",  e);
+                    }
+                }
+            }
+        }
+    }
+
+    
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.lifecycle.Configurable#configure(org.apache.commons.configuration.HierarchicalConfiguration)
+     */
+    public void configure(HierarchicalConfiguration config) throws ConfigurationException {
+        this.jmxPath = config.getString("jmxPath", getDefaultJMXPath());
+        
+    }
+
+    /**
+     * Return default JMX Path if none is configured
+     * 
+     * @return defaultJMXPath
+     */
+    protected abstract String getDefaultJMXPath();
+}

Added: james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/CommandHandlerStatsMBean.java
URL: http://svn.apache.org/viewvc/james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/CommandHandlerStatsMBean.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/CommandHandlerStatsMBean.java (added)
+++ james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/CommandHandlerStatsMBean.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,37 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.socket;
+
+import org.apache.james.socket.HandlerStatsMBean;
+
+
+/**
+ * JMX MBean for CommandHandler
+ *
+ */
+public interface CommandHandlerStatsMBean extends HandlerStatsMBean{
+
+   
+    /**
+     * Return all implemented commands by this handler
+     * 
+     * @return commands
+     */
+    public String[] getCommands();
+}

Added: james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/ConnectHandlerStats.java
URL: http://svn.apache.org/viewvc/james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/ConnectHandlerStats.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/ConnectHandlerStats.java (added)
+++ james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/ConnectHandlerStats.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,95 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.socket;
+
+import java.lang.management.ManagementFactory;
+import java.util.concurrent.atomic.AtomicLong;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.MBeanRegistrationException;
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.NotCompliantMBeanException;
+import javax.management.ObjectName;
+import javax.management.StandardMBean;
+
+import org.apache.james.lifecycle.Disposable;
+
+public class ConnectHandlerStats extends StandardMBean implements HandlerStatsMBean, Disposable{
+
+    private String name;
+    private String handlerName;
+    private MBeanServer mbeanserver;
+    private AtomicLong disconnect = new AtomicLong(0);
+    private AtomicLong all = new AtomicLong(0);
+
+    public ConnectHandlerStats(String jmxPath, String handlerName) throws NotCompliantMBeanException, MalformedObjectNameException, NullPointerException, InstanceAlreadyExistsException, MBeanRegistrationException {
+        super(HandlerStatsMBean.class);
+        this.handlerName = handlerName;
+        
+        this.name = jmxPath + ",handler=connecthandler,connecthandler=" + handlerName;
+        mbeanserver = ManagementFactory.getPlatformMBeanServer();
+        ObjectName baseObjectName = new ObjectName(name);
+        mbeanserver.registerMBean(this, baseObjectName);
+    }
+    
+    public void increment(boolean result) {
+        if (result) {
+            disconnect .incrementAndGet();
+        }
+        all.incrementAndGet();
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.socket.HandlerStatsMBean#getAll()
+     */
+    public long getAll() {
+        return all.get();
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.socket.HandlerStatsMBean#getName()
+     */
+    public String getName() {
+        return handlerName;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.socket.HandlerStatsMBean#getDisconnect()
+     */
+    public long getDisconnect() {
+        return disconnect.get();
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.lifecycle.Disposable#dispose()
+     */
+    public void dispose() {
+        try {
+            mbeanserver.unregisterMBean(new ObjectName(name));
+        } catch (Exception e) {
+            // ignore here;
+        }
+    }
+
+}

Added: james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/HandlerStatsMBean.java
URL: http://svn.apache.org/viewvc/james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/HandlerStatsMBean.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/HandlerStatsMBean.java (added)
+++ james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/HandlerStatsMBean.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,47 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.socket;
+
+public interface HandlerStatsMBean {
+
+    
+    /**
+     * Return the count of all processed transactions by the handler
+     * 
+     * @return all
+     */
+    public long getAll();
+    
+    /**
+     * Return the name of the handler
+     * 
+     * @return name
+     */
+    public String getName();
+    
+
+    
+    /**
+     * Return how often the Handler issued a disconnect
+     * 
+     * @return disconnect
+     */
+    public long getDisconnect();
+    
+}

Added: james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/LineHandlerStats.java
URL: http://svn.apache.org/viewvc/james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/LineHandlerStats.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/LineHandlerStats.java (added)
+++ james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/LineHandlerStats.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,95 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.socket;
+
+import java.lang.management.ManagementFactory;
+import java.util.concurrent.atomic.AtomicLong;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.MBeanRegistrationException;
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.NotCompliantMBeanException;
+import javax.management.ObjectName;
+import javax.management.StandardMBean;
+
+import org.apache.james.lifecycle.Disposable;
+
+public class LineHandlerStats extends StandardMBean implements HandlerStatsMBean, Disposable{
+
+    private String name;
+    private String handlerName;
+    private MBeanServer mbeanserver;
+    private AtomicLong disconnect = new AtomicLong(0);
+    private AtomicLong all = new AtomicLong(0);
+
+    public LineHandlerStats(String jmxPath, String handlerName) throws NotCompliantMBeanException, MalformedObjectNameException, NullPointerException, InstanceAlreadyExistsException, MBeanRegistrationException {
+        super(HandlerStatsMBean.class);
+        this.handlerName = handlerName;
+        
+        this.name = jmxPath + ",handler=linehandler,linehandler=" + handlerName;
+        mbeanserver = ManagementFactory.getPlatformMBeanServer();
+        ObjectName baseObjectName = new ObjectName(name);
+        mbeanserver.registerMBean(this, baseObjectName);
+    }
+    
+    public void increment(boolean result) {
+        if (result) {
+            disconnect .incrementAndGet();
+        }
+        all.incrementAndGet();
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.socket.HandlerStatsMBean#getAll()
+     */
+    public long getAll() {
+        return all.get();
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.socket.HandlerStatsMBean#getName()
+     */
+    public String getName() {
+        return handlerName;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.socket.HandlerStatsMBean#getDisconnect()
+     */
+    public long getDisconnect() {
+        return disconnect.get();
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.lifecycle.Disposable#dispose()
+     */
+    public void dispose() {
+        try {
+            mbeanserver.unregisterMBean(new ObjectName(name));
+        } catch (Exception e) {
+            // ignore here;
+        }
+    }
+
+}

Added: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/CommandHandlerResultJMXMonitor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/CommandHandlerResultJMXMonitor.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/CommandHandlerResultJMXMonitor.java (added)
+++ james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/CommandHandlerResultJMXMonitor.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,60 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.pop3server.jmx;
+
+import java.util.Collection;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.james.lifecycle.Configurable;
+import org.apache.james.pop3server.POP3Response;
+import org.apache.james.pop3server.POP3Session;
+import org.apache.james.protocols.api.CommandHandler;
+import org.apache.james.socket.AbstractCommandHandlerResultJMXMonitor;
+import org.apache.james.socket.AbstractCommandHandlerStats;
+
+/**
+ * Gather JMX stats for {@link CommandHandler}
+ *
+ */
+public class CommandHandlerResultJMXMonitor extends AbstractCommandHandlerResultJMXMonitor<POP3Response, POP3Session> implements Configurable{
+
+    private String jmxPath;
+
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.socket.AbstractCommandHandlerResultJMXMonitor#createCommandHandlerStats(org.apache.james.protocols.api.CommandHandler)
+     */
+    protected AbstractCommandHandlerStats<POP3Response> createCommandHandlerStats(CommandHandler<POP3Session> handler) throws Exception {
+        Collection<String> col = handler.getImplCommands();
+        String cName = handler.getClass().getName();
+
+        return new POP3CommandHandlerStats(jmxPath, cName, col.toArray(new String[col.size()]));
+    }
+
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.lifecycle.Configurable#configure(org.apache.commons.configuration.HierarchicalConfiguration)
+     */
+    public void configure(HierarchicalConfiguration config) throws ConfigurationException {
+        this.jmxPath = config.getString("jmxPath", "org.apache.james:type=server,name=pop3server");
+    }
+}

Added: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/ConnectHandlerResultJMXMonitor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/ConnectHandlerResultJMXMonitor.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/ConnectHandlerResultJMXMonitor.java (added)
+++ james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/ConnectHandlerResultJMXMonitor.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,34 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.pop3server.jmx;
+
+import org.apache.james.pop3server.POP3Session;
+import org.apache.james.socket.AbstractConnectHandlerResultJMXMonitor;
+
+public class ConnectHandlerResultJMXMonitor extends AbstractConnectHandlerResultJMXMonitor<POP3Session>{
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.socket.AbstractConnectHandlerResultJMXMonitor#getDefaultJMXPath()
+     */
+    protected String getDefaultJMXPath() {
+        return "org.apache.james:type=server,name=pop3server";
+    }
+
+}

Added: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/LineHandlerResultJMXMonitor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/LineHandlerResultJMXMonitor.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/LineHandlerResultJMXMonitor.java (added)
+++ james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/LineHandlerResultJMXMonitor.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,31 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.pop3server.jmx;
+
+import org.apache.james.pop3server.POP3Session;
+import org.apache.james.socket.AbstractLineHandlerResultJMXMonitor;
+
+public class LineHandlerResultJMXMonitor extends AbstractLineHandlerResultJMXMonitor<POP3Session>{
+
+    @Override
+    protected String getDefaultJMXPath() {
+        return "org.apache.james:type=server,name=pop3server";
+    }
+
+}

Added: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStats.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStats.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStats.java (added)
+++ james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStats.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,69 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.pop3server.jmx;
+
+import java.util.concurrent.atomic.AtomicLong;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.MBeanRegistrationException;
+import javax.management.MalformedObjectNameException;
+import javax.management.NotCompliantMBeanException;
+
+import org.apache.james.pop3server.POP3Response;
+import org.apache.james.socket.AbstractCommandHandlerStats;
+
+public class POP3CommandHandlerStats extends AbstractCommandHandlerStats<POP3Response> implements POP3CommandHandlerStatsMBean{
+
+    private AtomicLong error = new AtomicLong(0);
+    private AtomicLong  ok = new AtomicLong(0);
+    
+    public POP3CommandHandlerStats(String jmxPath, String handlerName, String[] commands) throws NotCompliantMBeanException, MalformedObjectNameException, NullPointerException, InstanceAlreadyExistsException, MBeanRegistrationException {
+        super(POP3CommandHandlerStatsMBean.class, jmxPath, handlerName, commands);
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.socket.AbstractCommandHandlerStats#incrementStats(org.apache.james.protocols.api.Response)
+     */
+    protected void incrementStats(POP3Response response) {
+       String code = response.getRetCode(); 
+       if (POP3Response.OK_RESPONSE.equals(code)) {
+           ok.incrementAndGet();
+       } else if (POP3Response.ERR_RESPONSE.equals(code)) {
+           error.incrementAndGet();
+       }
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.pop3server.jmx.POP3CommandHandlerStatsMBean#getError()
+     */
+    public long getError() {
+        return error.get();
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.pop3server.jmx.POP3CommandHandlerStatsMBean#getOk()
+     */
+    public long getOk() {
+        return ok.get();
+    }
+
+}

Added: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStatsMBean.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStatsMBean.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStatsMBean.java (added)
+++ james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStatsMBean.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,41 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.pop3server.jmx;
+
+import org.apache.james.socket.CommandHandlerStatsMBean;
+
+public interface POP3CommandHandlerStatsMBean extends CommandHandlerStatsMBean{
+
+    /**
+     * Return the count of errors returned by the handler
+     * 
+     * @return error
+     */
+    public long getError();
+
+    
+    
+    /**
+     * Return the count of successful handling returned by the handler
+     * 
+     * @return tempCount
+     */
+    public long getOk();
+    
+}

Added: james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/CommandHandlerResultJMXMonitor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/CommandHandlerResultJMXMonitor.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/CommandHandlerResultJMXMonitor.java (added)
+++ james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/CommandHandlerResultJMXMonitor.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,62 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.smtpserver.jmx;
+
+import java.util.Collection;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.james.lifecycle.Configurable;
+import org.apache.james.protocols.api.CommandHandler;
+import org.apache.james.protocols.smtp.SMTPResponse;
+import org.apache.james.protocols.smtp.SMTPSession;
+import org.apache.james.socket.AbstractCommandHandlerResultJMXMonitor;
+import org.apache.james.socket.AbstractCommandHandlerStats;
+
+/**
+ * Expose JMX statistics for {@link CommandHandler}
+ *
+ */
+public class CommandHandlerResultJMXMonitor extends AbstractCommandHandlerResultJMXMonitor<SMTPResponse, SMTPSession> implements Configurable {
+
+    private String jmxPath;
+
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.socket.AbstractCommandHandlerResultJMXMonitor#createCommandHandlerStats(org.apache.james.protocols.api.CommandHandler)
+     */
+    protected AbstractCommandHandlerStats<SMTPResponse> createCommandHandlerStats(CommandHandler<SMTPSession> handler) throws Exception{
+        Collection<String> col = handler.getImplCommands();
+        String cName = handler.getClass().getName();
+
+        return new SMTPCommandHandlerStats(jmxPath, cName, col.toArray(new String[col.size()]));
+    }
+
+
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.lifecycle.Configurable#configure(org.apache.commons.configuration.HierarchicalConfiguration)
+     */
+    public void configure(HierarchicalConfiguration config) throws ConfigurationException {
+        this.jmxPath = config.getString("jmxPath", "org.apache.james:type=server,name=smtpserver");
+    }
+
+}

Added: james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/ConnectHandlerResultJMXMonitor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/ConnectHandlerResultJMXMonitor.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/ConnectHandlerResultJMXMonitor.java (added)
+++ james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/ConnectHandlerResultJMXMonitor.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,35 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.smtpserver.jmx;
+
+import org.apache.james.protocols.smtp.SMTPSession;
+import org.apache.james.socket.AbstractConnectHandlerResultJMXMonitor;
+
+public class ConnectHandlerResultJMXMonitor extends AbstractConnectHandlerResultJMXMonitor<SMTPSession>{
+
+    
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.socket.AbstractConnectHandlerResultJMXMonitor#getDefaultJMXPath()
+     */
+    protected String getDefaultJMXPath() {
+        return "org.apache.james:type=server,name=smtpserver";
+    }
+
+}

Copied: james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookResultJMXMonitor.java (from r1039642, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookResultJMXMonitor.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookResultJMXMonitor.java?p2=james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookResultJMXMonitor.java&p1=james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookResultJMXMonitor.java&r1=1039642&r2=1039663&rev=1039663&view=diff
==============================================================================
--- james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookResultJMXMonitor.java (original)
+++ james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookResultJMXMonitor.java Sat Nov 27 12:48:10 2010
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.smtpserver;
+package org.apache.james.smtpserver.jmx;
 
 import java.util.ArrayList;
 import java.util.HashMap;

Copied: james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookStats.java (from r1036079, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookStats.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookStats.java?p2=james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookStats.java&p1=james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookStats.java&r1=1036079&r2=1039663&rev=1039663&view=diff
==============================================================================
--- james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookStats.java (original)
+++ james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookStats.java Sat Nov 27 12:48:10 2010
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.smtpserver;
+package org.apache.james.smtpserver.jmx;
 
 import java.lang.management.ManagementFactory;
 import java.util.concurrent.atomic.AtomicLong;

Copied: james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookStatsMBean.java (from r1036079, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookStatsMBean.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookStatsMBean.java?p2=james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookStatsMBean.java&p1=james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookStatsMBean.java&r1=1036079&r2=1039663&rev=1039663&view=diff
==============================================================================
--- james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookStatsMBean.java (original)
+++ james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookStatsMBean.java Sat Nov 27 12:48:10 2010
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.smtpserver;
+package org.apache.james.smtpserver.jmx;
 
 
 /**

Added: james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/LineHandlerResultJMXMonitor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/LineHandlerResultJMXMonitor.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/LineHandlerResultJMXMonitor.java (added)
+++ james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/LineHandlerResultJMXMonitor.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,35 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.smtpserver.jmx;
+
+import org.apache.james.protocols.smtp.SMTPSession;
+import org.apache.james.socket.AbstractLineHandlerResultJMXMonitor;
+
+public class LineHandlerResultJMXMonitor extends AbstractLineHandlerResultJMXMonitor<SMTPSession>{
+
+    
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.socket.AbstractLineHandlerResultJMXMonitor#getDefaultJMXPath()
+     */
+    protected String getDefaultJMXPath() {
+        return "org.apache.james:type=server,name=smtpserver";
+    }
+
+}

Copied: james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStats.java (from r1036079, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerStats.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStats.java?p2=james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStats.java&p1=james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerStats.java&r1=1036079&r2=1039663&rev=1039663&view=diff
==============================================================================
--- james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerStats.java (original)
+++ james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStats.java Sat Nov 27 12:48:10 2010
@@ -16,66 +16,34 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.smtpserver;
+package org.apache.james.smtpserver.jmx;
 
-import java.lang.management.ManagementFactory;
 import java.util.concurrent.atomic.AtomicLong;
 
 import javax.management.InstanceAlreadyExistsException;
 import javax.management.MBeanRegistrationException;
-import javax.management.MBeanServer;
 import javax.management.MalformedObjectNameException;
 import javax.management.NotCompliantMBeanException;
-import javax.management.ObjectName;
-import javax.management.StandardMBean;
 
 import org.apache.james.lifecycle.Disposable;
 import org.apache.james.protocols.api.CommandHandler;
 import org.apache.james.protocols.smtp.SMTPResponse;
+import org.apache.james.socket.AbstractCommandHandlerStats;
 
 /**
  * Expose statistics for {@link CommandHandler} via JMX
  *
  */
-public class CommandHandlerStats extends StandardMBean implements CommandHandlerStatsMBean, Disposable {
+public class SMTPCommandHandlerStats extends AbstractCommandHandlerStats<SMTPResponse> implements SMTPCommandHandlerStatsMBean, Disposable {
 
     private AtomicLong temp = new AtomicLong(0);
     private AtomicLong perm = new AtomicLong(0);
     private AtomicLong ok  = new AtomicLong(0);
-    private AtomicLong all = new AtomicLong(0);
-    
-    private String name;
-    private String handlerName;
-    private MBeanServer mbeanserver;
-    private String[] commands;
-
-    public CommandHandlerStats(String handlerName, String[] commands) throws NotCompliantMBeanException, MalformedObjectNameException, NullPointerException, InstanceAlreadyExistsException, MBeanRegistrationException {
-        super(CommandHandlerStatsMBean.class);
-        this.handlerName = handlerName;
-        this.commands = commands;
-        
-        name = "org.apache.james:type=server,name=smtpserver,handler=commandhandler,commandhandler=" + handlerName;
-        mbeanserver = ManagementFactory.getPlatformMBeanServer();
-        ObjectName baseObjectName = new ObjectName(name);
-        mbeanserver.registerMBean(this, baseObjectName);
-    }
-    
-    public void increment(SMTPResponse response) {
-        try {
-            String code = response.getRetCode();
-            char c = code.charAt(0) ;
-            if (c == '5') {
-                perm.incrementAndGet();
-            } else if (c == '4') {
-                temp.incrementAndGet();
-            } else if ( c == '2' || c == '3') {
-                ok.incrementAndGet();
-            }
-            all.incrementAndGet();
-        } catch (NumberFormatException e) {
-            // should never happen
-        }
+ 
+    public SMTPCommandHandlerStats(String jmxPath, String handlerName, String[] commands) throws NotCompliantMBeanException, MalformedObjectNameException, NullPointerException, InstanceAlreadyExistsException, MBeanRegistrationException {
+        super(SMTPCommandHandlerStatsMBean.class, jmxPath, handlerName, commands);
     }
+
     
     /*
      * (non-Javadoc)
@@ -101,39 +69,26 @@ public class CommandHandlerStats extends
         return ok.get();
     }
 
-    /*
-     * (non-Javadoc)
-     * @see org.apache.james.smtpserver.CommandHandlerStatsMBean#getAll()
-     */
-    public long getAll() {
-        return all.get();
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.james.smtpserver.CommandHandlerStatsMBean#getName()
-     */
-    public String getName() {
-        return handlerName;
-    }
 
     /*
      * (non-Javadoc)
-     * @see org.apache.james.lifecycle.Disposable#dispose()
+     * @see org.apache.james.socket.AbstractCommandHandlerStats#incrementStats(org.apache.james.protocols.api.Response)
      */
-    public void dispose() {
+    protected void incrementStats(SMTPResponse response) {
         try {
-            mbeanserver.unregisterMBean(new ObjectName(name));
-        } catch (Exception e) {
-            // ignore here;
-        }
+            String code = response.getRetCode();
+            char c = code.charAt(0) ;
+            if (c == '5') {
+                perm.incrementAndGet();
+            } else if (c == '4') {
+                temp.incrementAndGet();
+            } else if ( c == '2' || c == '3') {
+                ok.incrementAndGet();
+            } 
+            
+        } catch (NumberFormatException e) {
+            // should never happen
+        }        
     }
 
-    /*
-     * (non-Javadoc)
-     * @see org.apache.james.smtpserver.CommandHandlerStatsMBean#getCommands()
-     */
-    public String[] getCommands() {
-        return commands;
-    }
 }

Copied: james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStatsMBean.java (from r1036079, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerStatsMBean.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStatsMBean.java?p2=james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStatsMBean.java&p1=james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerStatsMBean.java&r1=1036079&r2=1039663&rev=1039663&view=diff
==============================================================================
--- james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerStatsMBean.java (original)
+++ james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStatsMBean.java Sat Nov 27 12:48:10 2010
@@ -16,14 +16,16 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.smtpserver;
+package org.apache.james.smtpserver.jmx;
+
+import org.apache.james.socket.CommandHandlerStatsMBean;
 
 
 /**
  * JMX MBean for CommandHandler
  *
  */
-public interface CommandHandlerStatsMBean {
+public interface SMTPCommandHandlerStatsMBean extends CommandHandlerStatsMBean{
 
     /**
      * Return the count of temporary errors returned by the handler
@@ -39,31 +41,13 @@ public interface CommandHandlerStatsMBea
      */
     public long getPermantError();
 
+    
+    
     /**
      * Return the count of successful handling returned by the handler
      * 
      * @return tempCount
      */
     public long getOk();
-    
-    /**
-     * Return the count of all processed transactions by the handler
-     * 
-     * @return all
-     */
-    public long getAll();
-    
-    /**
-     * Return the name of the handler
-     * 
-     * @return name
-     */
-    public String getName();
-    
-    /**
-     * Return all implemented commands by this handler
-     * 
-     * @return commands
-     */
-    public String[] getCommands();
+
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org