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/10 19:33:56 UTC
svn commit: r1033635 -
/james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookResultJMXMonitor.java
Author: norman
Date: Wed Nov 10 18:33:55 2010
New Revision: 1033635
URL: http://svn.apache.org/viewvc?rev=1033635&view=rev
Log:
Register all Hooks during startup so we can safe some synchronized stuff and every hook show up from the beginning
Modified:
james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookResultJMXMonitor.java
Modified: 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/HookResultJMXMonitor.java?rev=1033635&r1=1033634&r2=1033635&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/HookResultJMXMonitor.java Wed Nov 10 18:33:55 2010
@@ -18,13 +18,18 @@
****************************************************************/
package org.apache.james.smtpserver;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import javax.annotation.PreDestroy;
+import org.apache.james.protocols.api.ExtensibleHandler;
+import org.apache.james.protocols.api.WiringException;
import org.apache.james.protocols.smtp.SMTPSession;
+import org.apache.james.protocols.smtp.hook.Hook;
import org.apache.james.protocols.smtp.hook.HookResult;
import org.apache.james.protocols.smtp.hook.HookResultHook;
@@ -32,7 +37,7 @@ import org.apache.james.protocols.smtp.h
* {@link HookResultHook} implementation which will register a {@link HookStatsMBean} under JMX for every Hook it processed
*
*/
-public class HookResultJMXMonitor implements HookResultHook {
+public class HookResultJMXMonitor implements HookResultHook, ExtensibleHandler {
private Map<String, HookStats> hookStats = new HashMap<String, HookStats>();
@@ -43,22 +48,8 @@ public class HookResultJMXMonitor implem
public HookResult onHookResult(SMTPSession session, HookResult result,
Object hook) {
String hookName = hook.getClass().getName();
- try {
- HookStats stats;
- synchronized (hookStats) {
- stats = hookStats.get(hookName);
- if (stats == null) {
- stats = new HookStats(hookName);
- hookStats.put(hookName, stats);
- }
- }
-
- stats.increment(result.getResult());
- } catch (Exception e) {
- session.getLogger().error(
- "Unable to register HookStats for hook " + hookName, e);
- }
-
+ HookStats stats = hookStats.get(hookName);
+ stats.increment(result.getResult());
return result;
}
@@ -73,4 +64,39 @@ public class HookResultJMXMonitor implem
hookStats.clear();
}
}
+
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.protocols.api.ExtensibleHandler#getMarkerInterfaces()
+ */
+ public List<Class<?>> getMarkerInterfaces() {
+ List<Class<?>> marker = new ArrayList<Class<?>>();
+ marker.add(Hook.class);
+ return marker;
+ }
+
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.protocols.api.ExtensibleHandler#wireExtensions(java.lang.Class, java.util.List)
+ */
+ public void wireExtensions(Class<?> interfaceName, List<?> extension) throws WiringException {
+ if (interfaceName.equals(Hook.class)) {
+
+ // add stats for all hooks
+ for (int i = 0; i < extension.size(); i++ ) {
+ Object hook = extension.get(i);
+ if (equals(hook) == false) {
+ String hookName = hook.getClass().getName();
+ try {
+ hookStats.put(hookName, new HookStats(hookName));
+ } catch (Exception e) {
+ throw new WiringException("Unable to wire Hooks", e);
+ }
+ }
+ }
+ }
+
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org