Author: norman Date: Wed Oct 13 16:51:40 2010 New Revision: 1022183 URL: http://svn.apache.org/viewvc?rev=1022183&view=rev Log: Some work to expose processor/mailet/matcher stuff via JMX. Not complete yet (JAMES-1057)
Added: james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/MailProcessingMBean.java james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/MailetManagementMBean.java james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/MatcherManagementMBean.java james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/ProcessorDetailMBean.java james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/ProcessorManagementMBean.java james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/MailetMBeanWrapper.java james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/MatcherManagement.java Removed: james/server/trunk/management/src/main/java/org/apache/james/management/ProcessorManagementMBean.java james/server/trunk/management/src/main/java/org/apache/james/management/ProcessorManagementService.java james/server/trunk/management/src/main/java/org/apache/james/management/impl/ProcessorManagement.java james/server/trunk/management/src/main/java/org/apache/james/management/mbean/MailetManagement.java james/server/trunk/management/src/main/java/org/apache/james/management/mbean/MailetManagementMBean.java james/server/trunk/management/src/main/java/org/apache/james/management/mbean/MatcherManagement.java james/server/trunk/management/src/main/java/org/apache/james/management/mbean/MatcherManagementMBean.java james/server/trunk/management/src/main/java/org/apache/james/management/mbean/ProcessorDetail.java james/server/trunk/management/src/main/java/org/apache/james/management/mbean/ProcessorDetailMBean.java james/server/trunk/remotemanager/src/main/java/org/apache/james/remotemanager/core/ListMailetsCmdHandler.java james/server/trunk/remotemanager/src/main/java/org/apache/james/remotemanager/core/ListMatchersCmdHandler.java james/server/trunk/remotemanager/src/main/java/org/apache/james/remotemanager/core/ListProcessorsCmdHandler.java james/server/trunk/remotemanager/src/main/java/org/apache/james/remotemanager/core/ShowMailetInfoCmdHandler.java james/server/trunk/remotemanager/src/main/java/org/apache/james/remotemanager/core/ShowMatcherInfoCmdHandler.java Modified: james/server/trunk/core-library/pom.xml james/server/trunk/mailetcontainer-camel/pom.xml james/server/trunk/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/camel/CamelMailProcessorList.java james/server/trunk/management/pom.xml james/server/trunk/netty-socket/pom.xml james/server/trunk/queue-activemq/pom.xml james/server/trunk/queue-jms/pom.xml james/server/trunk/remotemanager/src/main/java/org/apache/james/remotemanager/core/CoreCmdHandlerLoader.java james/server/trunk/remotemanager/src/test/java/org/apache/james/remotemanager/AbstractRemoteManagerTest.java james/server/trunk/spring-common/pom.xml james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml Modified: james/server/trunk/core-library/pom.xml URL: http://svn.apache.org/viewvc/james/server/trunk/core-library/pom.xml?rev=1022183&r1=1022182&r2=1022183&view=diff ============================================================================== --- james/server/trunk/core-library/pom.xml (original) +++ james/server/trunk/core-library/pom.xml Wed Oct 13 16:51:40 2010 @@ -34,14 +34,6 @@ </dependency> <dependency> <groupId>org.apache.james</groupId> - <artifactId>james-server-dnsservice-api</artifactId> - </dependency> - <dependency> - <groupId>org.apache.james</groupId> - <artifactId>james-server-domain-api</artifactId> - </dependency> - <dependency> - <groupId>org.apache.james</groupId> <artifactId>james-server-common-util</artifactId> </dependency> @@ -84,11 +76,6 @@ <!-- Test dependencies --> <dependency> <groupId>org.apache.james</groupId> - <artifactId>james-server-user-api</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.apache.james</groupId> <artifactId>apache-mailet-base</artifactId> <classifier>tests</classifier> <scope>test</scope> Added: james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/MailProcessingMBean.java URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/MailProcessingMBean.java?rev=1022183&view=auto ============================================================================== --- james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/MailProcessingMBean.java (added) +++ james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/MailProcessingMBean.java Wed Oct 13 16:51:40 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.mailetcontainer; + +public interface MailProcessingMBean { + + public long getHandledMailCount(); + + public long getFastestProcessing(); + + public long getSlowestProcessing(); + + public long getSuccessCount(); + + public long getErrorCount(); + +} Added: james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/MailetManagementMBean.java URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/MailetManagementMBean.java?rev=1022183&view=auto ============================================================================== --- james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/MailetManagementMBean.java (added) +++ james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/MailetManagementMBean.java Wed Oct 13 16:51:40 2010 @@ -0,0 +1,30 @@ +/**************************************************************** + * 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.mailetcontainer; + +/** + * management interface for one Mailet instance + */ +public interface MailetManagementMBean extends MailProcessingMBean{ + + public String getMailetName(); + + public String[] getMailetParameters(); +} Added: james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/MatcherManagementMBean.java URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/MatcherManagementMBean.java?rev=1022183&view=auto ============================================================================== --- james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/MatcherManagementMBean.java (added) +++ james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/MatcherManagementMBean.java Wed Oct 13 16:51:40 2010 @@ -0,0 +1,28 @@ +/**************************************************************** + * 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.mailetcontainer; + +/** + * management interface for one Matcher instance + */ +public interface MatcherManagementMBean { + String getMatcherName(); + String getMatcherCondition(); +} Added: james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/ProcessorDetailMBean.java URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/ProcessorDetailMBean.java?rev=1022183&view=auto ============================================================================== --- james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/ProcessorDetailMBean.java (added) +++ james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/ProcessorDetailMBean.java Wed Oct 13 16:51:40 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.mailetcontainer; + + +/** + * MBean for one processor instance + */ +public interface ProcessorDetailMBean extends MailProcessingMBean{ + + public String getName(); + + + +} Added: james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/ProcessorManagementMBean.java URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/ProcessorManagementMBean.java?rev=1022183&view=auto ============================================================================== --- james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/ProcessorManagementMBean.java (added) +++ james/server/trunk/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/ProcessorManagementMBean.java Wed Oct 13 16:51:40 2010 @@ -0,0 +1,39 @@ +/**************************************************************** + * 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.mailetcontainer; + +/** + * Expose processor management functionality through JMX. + * + * @phoenix:mx-topic name="ProcessorAdministration" + */ +public interface ProcessorManagementMBean { + + /** + * Retrieves all existing processors + * + * @phoenix:mx-operation + * @phoenix:mx-description Retrieves all existing processors + * + * @return names of all configured processors + */ + String[] getProcessorNames(); + +} Modified: james/server/trunk/mailetcontainer-camel/pom.xml URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-camel/pom.xml?rev=1022183&r1=1022182&r2=1022183&view=diff ============================================================================== --- james/server/trunk/mailetcontainer-camel/pom.xml (original) +++ james/server/trunk/mailetcontainer-camel/pom.xml Wed Oct 13 16:51:40 2010 @@ -54,7 +54,7 @@ </dependency> <dependency> <groupId>commons-logging</groupId> - <artifactId>commons-logging-api</artifactId> + <artifactId>commons-logging</artifactId> </dependency> <dependency> <groupId>commons-configuration</groupId> Modified: james/server/trunk/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/camel/CamelMailProcessorList.java URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/camel/CamelMailProcessorList.java?rev=1022183&r1=1022182&r2=1022183&view=diff ============================================================================== --- james/server/trunk/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/camel/CamelMailProcessorList.java (original) +++ james/server/trunk/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/camel/CamelMailProcessorList.java Wed Oct 13 16:51:40 2010 @@ -29,6 +29,9 @@ import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.annotation.Resource; import javax.mail.MessagingException; +import javax.management.MBeanServer; +import javax.management.MalformedObjectNameException; +import javax.management.ObjectName; import org.apache.camel.CamelContext; import org.apache.camel.CamelContextAware; @@ -49,28 +52,33 @@ import org.apache.james.mailetcontainer. import org.apache.james.mailetcontainer.MailetConfigImpl; import org.apache.james.mailetcontainer.MailetContainer; import org.apache.james.mailetcontainer.MailetLoader; +import org.apache.james.mailetcontainer.MailetMBeanWrapper; import org.apache.james.mailetcontainer.MatcherLoader; +import org.apache.james.mailetcontainer.MatcherManagement; +import org.apache.james.mailetcontainer.ProcessorDetailMBean; +import org.apache.james.mailetcontainer.ProcessorManagementMBean; import org.apache.mailet.Mail; import org.apache.mailet.Mailet; import org.apache.mailet.MailetConfig; import org.apache.mailet.Matcher; +import org.apache.mailet.MatcherConfig; import org.apache.mailet.base.GenericMailet; import org.apache.mailet.base.MatcherInverter; /** - * Build up the Camel Routes by parsing the spoolmanager.xml configuration file. + * Build up the Camel Routes by parsing the mailetcontainer.xml configuration file. * * It also offer the {...@link MailProcessorList} implementation which allow to inject {...@link Mail} into the routes * */ -public class CamelMailProcessorList implements Configurable, LogEnabled, MailProcessorList, CamelContextAware { +public class CamelMailProcessorList implements Configurable, LogEnabled, MailProcessorList, CamelContextAware, ProcessorManagementMBean { private MatcherLoader matcherLoader; private HierarchicalConfiguration config; private MailetLoader mailetLoader; private Log logger; - private final Map<String,List<Mailet>> mailets = new HashMap<String,List<Mailet>>(); + private final Map<String,List<MailetMBeanWrapper>> mailets = new HashMap<String,List<MailetMBeanWrapper>>(); private final Map<String,List<Matcher>> matchers = new HashMap<String,List<Matcher>>(); private final Map<String,MailProcessor> processors = new HashMap<String,MailProcessor>(); private final UseLatestAggregationStrategy aggr = new UseLatestAggregationStrategy(); @@ -87,14 +95,24 @@ public class CamelMailProcessorList impl private ProducerTemplate producerTemplate; private CamelContext camelContext; + private MBeanServer mbeanserver; @PostConstruct - public void init() throws Exception { - getCamelContext().addRoutes(new SpoolRouteBuilder()); - producerTemplate = getCamelContext().createProducerTemplate(); - } + public void init() throws Exception { + getCamelContext().addRoutes(new SpoolRouteBuilder()); + producerTemplate = getCamelContext().createProducerTemplate(); + + registerMBeans(); + + } + + @Resource(name = "mbeanserver") + public void setMbeanServer(MBeanServer mbeanServer) { + this.mbeanserver = mbeanServer; + } + /** * Destroy all mailets and matchers @@ -103,11 +121,11 @@ public class CamelMailProcessorList impl public void dispose() { boolean debugEnabled = logger.isDebugEnabled(); - Iterator<List<Mailet>> it = mailets.values().iterator(); + Iterator<List<MailetMBeanWrapper>> it = mailets.values().iterator(); while (it.hasNext()) { - List<Mailet> mList = it.next(); + List<MailetMBeanWrapper> mList = it.next(); for (int i = 0; i < mList.size(); i++) { - Mailet m = mList.get(i); + Mailet m = mList.get(i).getMailet(); if (debugEnabled) { logger.debug("Shutdown mailet " + m.getMailetInfo()); } @@ -251,17 +269,20 @@ public class CamelMailProcessorList impl private final class RemovePropertiesProcessor implements Processor { - public void process(Exchange exchange) throws Exception { - exchange.removeProperty(MatcherSplitter.ON_MATCH_EXCEPTION_PROPERTY); - exchange.removeProperty(MatcherSplitter.MATCHER_PROPERTY); - } + public void process(Exchange exchange) throws Exception { + exchange.removeProperty(MatcherSplitter.ON_MATCH_EXCEPTION_PROPERTY); + exchange.removeProperty(MatcherSplitter.MATCHER_PROPERTY); + } } - private final class ChildMailProcessor implements MailProcessor, MailetContainer { - + private final class ChildMailProcessor implements MailProcessor, MailetContainer, ProcessorDetailMBean { private String processorName; - + private long slowestProcessing = -1; + private long fastestProcessing = -1; + private long successCount = 0; + private long errorCount = 0; + public ChildMailProcessor(String processorName) { this.processorName = processorName; } @@ -272,9 +293,21 @@ public class CamelMailProcessorList impl * @see org.apache.james.transport.MailProcessor#service(org.apache.mailet.Mail) */ public void service(Mail mail) throws MessagingException { - try { - producerTemplate.sendBody(getEndpoint(processorName), mail); + try { + long startProcessing = System.currentTimeMillis(); + + producerTemplate.sendBody(getEndpoint(processorName), mail); + + long processTime = System.currentTimeMillis() - startProcessing; + if (processTime > slowestProcessing) { + slowestProcessing = processTime; + } + if (fastestProcessing == -1 || fastestProcessing > processTime) { + fastestProcessing = processTime; + } + successCount++; } catch (CamelExecutionException ex) { + errorCount++; throw new MessagingException("Unable to process mail " + mail.getName(),ex); } } @@ -284,7 +317,7 @@ public class CamelMailProcessorList impl * @see org.apache.james.transport.MailetContainer#getMailets() */ public List<Mailet> getMailets() { - return mailets.get(processorName); + return new ArrayList<Mailet>(mailets.get(processorName)); } /* @@ -294,17 +327,135 @@ public class CamelMailProcessorList impl public List<Matcher> getMatchers() { return matchers.get(processorName); } + + /* + * (non-Javadoc) + * + * @see + * org.apache.james.mailetcontainer.ProcessorDetailMBean#getHandledMailCount + * () + */ + public long getHandledMailCount() { + return getSuccessCount() + getErrorCount(); + } + + /* + * (non-Javadoc) + * + * @see org.apache.james.mailetcontainer.ProcessorDetailMBean#getName() + */ + public String getName() { + return processorName; + } + + /* + * (non-Javadoc) + * + * @seeorg.apache.james.mailetcontainer.ProcessorDetailMBean# + * getFastestProcessing() + */ + public long getFastestProcessing() { + return fastestProcessing; + } + + /* + * (non-Javadoc) + * + * @seeorg.apache.james.mailetcontainer.ProcessorDetailMBean# + * getSlowestProcessing() + */ + public long getSlowestProcessing() { + return slowestProcessing; + } + + /* + * (non-Javadoc) + * + * @see + * org.apache.james.mailetcontainer.ProcessorDetailMBean#getErrorCount() + */ + public long getErrorCount() { + return errorCount; + } + + /* + * (non-Javadoc) + * + * @see + * org.apache.james.mailetcontainer.ProcessorDetailMBean#getSuccessCount + * () + */ + public long getSuccessCount() { + return successCount; + } } public CamelContext getCamelContext() { - return camelContext; - } + return camelContext; + } - public void setCamelContext(CamelContext camelContext) { - this.camelContext = camelContext; - } - + public void setCamelContext(CamelContext camelContext) { + this.camelContext = camelContext; + } + + + private void registerMBeans() { + + String baseObjectName = "org.apache.james:type=component,name=processor,"; + + String[] processorNames = getProcessorNames(); + for (int i = 0; i < processorNames.length; i++) { + String processorName = processorNames[i]; + createProcessorMBean(baseObjectName, processorName, mbeanserver); + continue; + } + } + + private void createProcessorMBean(String baseObjectName, String processorName, MBeanServer mBeanServer) { + String processorMBeanName = baseObjectName + "processor=" + processorName; + registerMBean(mBeanServer, processorMBeanName, (ProcessorDetailMBean) getProcessor(processorName)); + + + // add all mailets but the last, because that is a terminator (see LinearProcessor.closeProcessorLists()) + List<MailetMBeanWrapper> mailets = this.mailets.get(processorName); + for (int i = 0; i < mailets.size()-1; i++) { + MailetMBeanWrapper mailet = mailets.get(i); + + String mailetMBeanName = processorMBeanName + ",subtype=mailet,index=" + (i+1) + ",mailetname=" + mailet.getMailetName(); + registerMBean(mBeanServer, mailetMBeanName, mailet); + } + + + // add all matchers but the last, because that is a terminator (see LinearProcessor.closeProcessorLists()) + List<Matcher> matchers = ((MailetContainer)getProcessor(processorName)).getMatchers(); + for (int i = 0; i < matchers.size()-1; i++) { + MatcherConfig matcherConfig = matchers.get(i).getMatcherConfig(); + + String matcherMBeanName = processorMBeanName + ",subtype=matcher,index=" + (i+1) + ",matchername=" + matcherConfig.getMatcherName(); + MatcherManagement matcherMBean = new MatcherManagement(matcherConfig); + registerMBean(mBeanServer, matcherMBeanName, matcherMBean); + } + + } + + private void registerMBean(MBeanServer mBeanServer, String mBeanName, Object object) { + ObjectName objectName = null; + try { + objectName = new ObjectName(mBeanName); + } catch (MalformedObjectNameException e) { + logger.info("Unable to register mbean", e); + + return; + } + try { + mBeanServer.registerMBean(object, objectName); + } catch (javax.management.JMException e) { + logger.info("Unable to register mbean", e); + } + } + + private final class SpoolRouteBuilder extends RouteBuilder { /* * (non-Javadoc) @@ -324,7 +475,7 @@ public class CamelMailProcessorList impl String processorName = processorConf.getString("[...@name]"); - mailets.put(processorName, new ArrayList<Mailet>()); + mailets.put(processorName, new ArrayList<MailetMBeanWrapper>()); matchers.put(processorName, new ArrayList<Matcher>()); RouteDefinition processorDef = from(getEndpoint(processorName)).inOnly() @@ -400,28 +551,30 @@ public class CamelMailProcessorList impl throw new ConfigurationException("Unable to init mailet", ex); } if (mailet != null && matcher != null) { + MailetMBeanWrapper wrappedMailet = new MailetMBeanWrapper(mailet); String onMatchException = null; - MailetConfig mailetConfig = mailet.getMailetConfig(); + MailetConfig mailetConfig = wrappedMailet.getMailetConfig(); if (mailetConfig instanceof MailetConfigImpl) { onMatchException = ((MailetConfigImpl) mailetConfig).getInitAttribute("onMatchException"); } + MailetProcessor mailetProccessor = new MailetProcessor(wrappedMailet, logger); // Store the matcher to use for splitter in properties processorDef - .setProperty(MatcherSplitter.MATCHER_PROPERTY, constant(matcher)).setProperty(MatcherSplitter.ON_MATCH_EXCEPTION_PROPERTY, constant(onMatchException)) + .setProperty(MatcherSplitter.MATCHER_PROPERTY, constant(matcher)).setProperty(MatcherSplitter.ON_MATCH_EXCEPTION_PROPERTY, constant(onMatchException)) // do splitting of the mail based on the stored matcher .split().method(MatcherSplitter.class).aggregationStrategy(aggr).parallelProcessing() - .choice().when(new MatcherMatch()).process(new MailetProcessor(mailet, logger)).end() + .choice().when(new MatcherMatch()).process(mailetProccessor).end() .choice().when(new MailStateEquals(Mail.GHOST)).process(disposeProcessor).stop().otherwise().process(removePropsProcessor).end() .choice().when(new MailStateNotEquals(processorName)).process(mailProcessor).stop().end(); // store mailet and matcher - mailets.get(processorName).add(mailet); + mailets.get(processorName).add(wrappedMailet); matchers.get(processorName).add(matcher); } @@ -448,5 +601,4 @@ public class CamelMailProcessorList impl } } - } Added: james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/MailetMBeanWrapper.java URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/MailetMBeanWrapper.java?rev=1022183&view=auto ============================================================================== --- james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/MailetMBeanWrapper.java (added) +++ james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/MailetMBeanWrapper.java Wed Oct 13 16:51:40 2010 @@ -0,0 +1,178 @@ +/**************************************************************** + * 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.mailetcontainer; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import javax.mail.MessagingException; + +import org.apache.mailet.Mail; +import org.apache.mailet.Mailet; +import org.apache.mailet.MailetConfig; + +/** + * Class which wraps a {...@link Mailet} and expose statistics via JMX + * + * + * + * + */ +public final class MailetMBeanWrapper implements Mailet, MailetManagementMBean{ + + private final Mailet mailet; + private long errorCount = 0; + private long successCount = 0; + private long fastestProcessing = -1; + private long slowestProcessing = -1; + + public MailetMBeanWrapper(final Mailet mailet) { + this.mailet = mailet; + } + + /* + * (non-Javadoc) + * @see org.apache.mailet.Mailet#destroy() + */ + public void destroy() { + mailet.destroy(); + } + + /* + * (non-Javadoc) + * @see org.apache.mailet.Mailet#getMailetConfig() + */ + public MailetConfig getMailetConfig() { + return mailet.getMailetConfig(); + } + + /* + * (non-Javadoc) + * @see org.apache.mailet.Mailet#getMailetInfo() + */ + public String getMailetInfo() { + return mailet.getMailetInfo(); + } + + /* + * (non-Javadoc) + * @see org.apache.mailet.Mailet#init(org.apache.mailet.MailetConfig) + */ + public void init(MailetConfig config) throws MessagingException { + mailet.init(config); + } + + /* + * (non-Javadoc) + * @see org.apache.mailet.Mailet#service(org.apache.mailet.Mail) + */ + public void service(Mail mail) throws MessagingException { + long startProcessing = System.currentTimeMillis(); + try { + mailet.service(mail); + long processTime = System.currentTimeMillis() - startProcessing; + if (processTime > slowestProcessing) { + slowestProcessing = processTime; + } + if (fastestProcessing == -1 || fastestProcessing > processTime) { + fastestProcessing = processTime; + } + successCount++; + } catch (MessagingException e) { + errorCount++; + throw e; + } + } + + /** + * Return the wrapped {...@link Mailet} + * + * @return mailet + */ + public Mailet getMailet() { + return mailet; + } + + /* + * (non-Javadoc) + * @see org.apache.james.mailetcontainer.MailetManagementMBean#getMailetName() + */ + public String getMailetName() { + return mailet.getMailetConfig().getMailetName(); + } + + /* + * + */ + @SuppressWarnings("unchecked") + public String[] getMailetParameters() { + List<String> parameterList = new ArrayList<String>(); + MailetConfig mailetConfig = getMailet().getMailetConfig(); + Iterator<String> iterator = mailetConfig.getInitParameterNames(); + while (iterator.hasNext()) { + String name = (String) iterator.next(); + String value = mailetConfig.getInitParameter(name); + parameterList.add(name + "=" + value); + } + String[] result = (String[]) parameterList.toArray(new String[] {}); + return result; + } + + /* + * (non-Javadoc) + * @see org.apache.james.mailetcontainer.MailetManagementMBean#getErrorCount() + */ + public long getErrorCount() { + return errorCount; + } + + /* + * (non-Javadoc) + * @see org.apache.james.mailetcontainer.MailetManagementMBean#getFastestProcessing() + */ + public long getFastestProcessing() { + return fastestProcessing; + } + + /* + * (non-Javadoc) + * @see org.apache.james.mailetcontainer.MailetManagementMBean#getHandledMailCount() + */ + public long getHandledMailCount() { + return getErrorCount() + getSuccessCount(); + } + + /* + * (non-Javadoc) + * @see org.apache.james.mailetcontainer.MailetManagementMBean#getSlowestProcessing() + */ + public long getSlowestProcessing() { + return slowestProcessing; + } + + /* + * (non-Javadoc) + * @see org.apache.james.mailetcontainer.MailetManagementMBean#getSuccessCount() + */ + public long getSuccessCount() { + return successCount; + } + +} Added: james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/MatcherManagement.java URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/MatcherManagement.java?rev=1022183&view=auto ============================================================================== --- james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/MatcherManagement.java (added) +++ james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/MatcherManagement.java Wed Oct 13 16:51:40 2010 @@ -0,0 +1,38 @@ +/**************************************************************** + * 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.mailetcontainer; + +import org.apache.mailet.MatcherConfig; + +public class MatcherManagement implements MatcherManagementMBean { + private MatcherConfig matcherConfig; + + public MatcherManagement(MatcherConfig matcherConfig) { + this.matcherConfig = matcherConfig; + } + + public String getMatcherName() { + return matcherConfig.getMatcherName(); + } + + public String getMatcherCondition() { + return matcherConfig.getCondition(); + } +} + Modified: james/server/trunk/management/pom.xml URL: http://svn.apache.org/viewvc/james/server/trunk/management/pom.xml?rev=1022183&r1=1022182&r2=1022183&view=diff ============================================================================== --- james/server/trunk/management/pom.xml (original) +++ james/server/trunk/management/pom.xml Wed Oct 13 16:51:40 2010 @@ -34,10 +34,6 @@ </dependency> <dependency> <groupId>org.apache.james</groupId> - <artifactId>james-server-domain-api</artifactId> - </dependency> - <dependency> - <groupId>org.apache.james</groupId> <artifactId>james-server-core-api</artifactId> </dependency> <dependency> Modified: james/server/trunk/netty-socket/pom.xml URL: http://svn.apache.org/viewvc/james/server/trunk/netty-socket/pom.xml?rev=1022183&r1=1022182&r2=1022183&view=diff ============================================================================== --- james/server/trunk/netty-socket/pom.xml (original) +++ james/server/trunk/netty-socket/pom.xml Wed Oct 13 16:51:40 2010 @@ -90,10 +90,6 @@ </dependency> <dependency> <groupId>org.apache.james</groupId> - <artifactId>james-server-core-library</artifactId> - </dependency> - <dependency> - <groupId>org.apache.james</groupId> <artifactId>james-server-dnsservice-api</artifactId> </dependency> <dependency> @@ -116,5 +112,10 @@ <groupId>javax.annotation</groupId> <artifactId>jsr250-api</artifactId> </dependency> + <dependency> + <groupId>org.jboss.netty</groupId> + <artifactId>netty</artifactId> + </dependency> + </dependencies> -</project> \ No newline at end of file +</project> Modified: james/server/trunk/queue-activemq/pom.xml URL: http://svn.apache.org/viewvc/james/server/trunk/queue-activemq/pom.xml?rev=1022183&r1=1022182&r2=1022183&view=diff ============================================================================== --- james/server/trunk/queue-activemq/pom.xml (original) +++ james/server/trunk/queue-activemq/pom.xml Wed Oct 13 16:51:40 2010 @@ -38,10 +38,6 @@ </dependency> <dependency> <groupId>org.apache.james</groupId> - <artifactId>james-server-core-api</artifactId> - </dependency> - <dependency> - <groupId>org.apache.james</groupId> <artifactId>james-server-core-library</artifactId> </dependency> <dependency> @@ -59,10 +55,6 @@ <version>5.4.1</version> </dependency> <dependency> - <groupId>commons-logging</groupId> - <artifactId>commons-logging-api</artifactId> - </dependency> - <dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-jms_1.1_spec</artifactId> </dependency> @@ -70,9 +62,5 @@ <groupId>${javax.mail.groupId}</groupId> <artifactId>${javax.mail.artifactId}</artifactId> </dependency> - <dependency> - <groupId>org.apache.geronimo.specs</groupId> - <artifactId>geronimo-annotation_1.0_spec</artifactId> - </dependency> </dependencies> </project> Modified: james/server/trunk/queue-jms/pom.xml URL: http://svn.apache.org/viewvc/james/server/trunk/queue-jms/pom.xml?rev=1022183&r1=1022182&r2=1022183&view=diff ============================================================================== --- james/server/trunk/queue-jms/pom.xml (original) +++ james/server/trunk/queue-jms/pom.xml Wed Oct 13 16:51:40 2010 @@ -46,7 +46,7 @@ </dependency> <dependency> <groupId>commons-logging</groupId> - <artifactId>commons-logging-api</artifactId> + <artifactId>commons-logging</artifactId> </dependency> <dependency> <groupId>org.apache.geronimo.specs</groupId> Modified: james/server/trunk/remotemanager/src/main/java/org/apache/james/remotemanager/core/CoreCmdHandlerLoader.java URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager/src/main/java/org/apache/james/remotemanager/core/CoreCmdHandlerLoader.java?rev=1022183&r1=1022182&r2=1022183&view=diff ============================================================================== --- james/server/trunk/remotemanager/src/main/java/org/apache/james/remotemanager/core/CoreCmdHandlerLoader.java (original) +++ james/server/trunk/remotemanager/src/main/java/org/apache/james/remotemanager/core/CoreCmdHandlerLoader.java Wed Oct 13 16:51:40 2010 @@ -41,10 +41,7 @@ public class CoreCmdHandlerLoader implem private final static String IMPORTBAYESIANDATACMDHANDLER = ImportBayesianDataCmdHandler.class.getName(); private final static String LISTALLMAPPINGSCMDHANDLER = ListAllMappingsCmdHandler.class.getName(); private final static String LISTDOMAINSCMDHANDLER = ListDomainsCmdHandler.class.getName(); - private final static String LISTMAILETSCMDHANDLER = ListMailetsCmdHandler.class.getName(); private final static String LISTMAPPINGCMDHANDLER = ListMappingCmdHandler.class.getName(); - private final static String LISTMATCHERSCMDHANDLER = ListMatchersCmdHandler.class.getName(); - private final static String LISTPROCESSORSCMDHANDLER = ListProcessorsCmdHandler.class.getName(); //private final static String LISTSPOOLCMDHANDLER = ListSpoolCmdHandler.class.getName(); private final static String LISTUSERSCMDHANDLER = ListUsersCmdHandler.class.getName(); private final static String MEMSTATCMDHANDLER = MemStatCmdHandler.class.getName(); @@ -56,8 +53,6 @@ public class CoreCmdHandlerLoader implem private final static String SETPASSWORDCMDHANDLER = SetPasswordCmdHandler.class.getName(); private final static String SHOWALIASCMDHANDLER = ShowAliasCmdHandler.class.getName(); private final static String SHOWFORWARDINGCMDHANDLER = ShowForwardingCmdHandler.class.getName(); - private final static String SHOWMAILETINFOCMDHANDLER = ShowMailetInfoCmdHandler.class.getName(); - private final static String SHOWMATCHERINFOCMDHANDLER = ShowMatcherInfoCmdHandler.class.getName(); private final static String SHUTDOWNCMDHANDLER = ShutdownCmdHandler.class.getName(); private final static String UNKNOWNCMDHANDLER = UnknownCmdHandler.class.getName(); private final static String UNSETALIASCMDHANDLER = UnsetAliasCmdHandler.class.getName(); @@ -86,10 +81,7 @@ public class CoreCmdHandlerLoader implem commands.add(IMPORTBAYESIANDATACMDHANDLER); commands.add(LISTALLMAPPINGSCMDHANDLER); commands.add(LISTDOMAINSCMDHANDLER); - commands.add(LISTMAILETSCMDHANDLER); commands.add(LISTMAPPINGCMDHANDLER); - commands.add(LISTMATCHERSCMDHANDLER); - commands.add(LISTPROCESSORSCMDHANDLER); //commands.add(LISTSPOOLCMDHANDLER); commands.add(LISTUSERSCMDHANDLER); commands.add(MEMSTATCMDHANDLER); @@ -101,8 +93,6 @@ public class CoreCmdHandlerLoader implem commands.add(SETPASSWORDCMDHANDLER); commands.add(SHOWALIASCMDHANDLER); commands.add(SHOWFORWARDINGCMDHANDLER); - commands.add(SHOWMAILETINFOCMDHANDLER); - commands.add(SHOWMATCHERINFOCMDHANDLER); commands.add(SHUTDOWNCMDHANDLER); commands.add(UNKNOWNCMDHANDLER); commands.add(UNSETALIASCMDHANDLER); Modified: james/server/trunk/remotemanager/src/test/java/org/apache/james/remotemanager/AbstractRemoteManagerTest.java URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager/src/test/java/org/apache/james/remotemanager/AbstractRemoteManagerTest.java?rev=1022183&r1=1022182&r2=1022183&view=diff ============================================================================== --- james/server/trunk/remotemanager/src/test/java/org/apache/james/remotemanager/AbstractRemoteManagerTest.java (original) +++ james/server/trunk/remotemanager/src/test/java/org/apache/james/remotemanager/AbstractRemoteManagerTest.java Wed Oct 13 16:51:40 2010 @@ -47,7 +47,6 @@ import org.apache.james.lifecycle.Lifecy import org.apache.james.mailstore.MockMailStore; import org.apache.james.management.BayesianAnalyzerManagementException; import org.apache.james.management.BayesianAnalyzerManagementService; -import org.apache.james.management.ProcessorManagementService; import org.apache.james.management.SpoolFilter; import org.apache.james.management.SpoolManagementException; import org.apache.james.management.SpoolManagementService; @@ -277,36 +276,7 @@ public abstract class AbstractRemoteMana } }); serviceManager.put("mailStore", new MockMailStore()); - serviceManager.put("processormanagement", - new ProcessorManagementService() { - - public String[] getProcessorNames() { - // TODO Auto-generated method stub - return null; - } - - public String[] getMatcherParameters(String processorName, - int matcherIndex) { - // TODO Auto-generated method stub - return null; - } - - public String[] getMatcherNames(String processorName) { - // TODO Auto-generated method stub - return null; - } - - public String[] getMailetParameters(String processorName, - int mailetIndex) { - // TODO Auto-generated method stub - return null; - } - - public String[] getMailetNames(String processorName) { - // TODO Auto-generated method stub - return null; - } - }); + } private DNSService setUpDNSServer() { Modified: james/server/trunk/spring-common/pom.xml URL: http://svn.apache.org/viewvc/james/server/trunk/spring-common/pom.xml?rev=1022183&r1=1022182&r2=1022183&view=diff ============================================================================== --- james/server/trunk/spring-common/pom.xml (original) +++ james/server/trunk/spring-common/pom.xml Wed Oct 13 16:51:40 2010 @@ -93,10 +93,6 @@ <artifactId>spring-context</artifactId> </dependency> <dependency> - <groupId>javax.annotation</groupId> - <artifactId>jsr250-api</artifactId> - </dependency> - <dependency> <groupId>commons-configuration</groupId> <artifactId>commons-configuration</artifactId> </dependency> Modified: james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml URL: http://svn.apache.org/viewvc/james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml?rev=1022183&r1=1022182&r2=1022183&view=diff ============================================================================== --- james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml (original) +++ james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml Wed Oct 13 16:51:40 2010 @@ -53,7 +53,9 @@ </property> </bean> - <bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean" /> + <bean id="mbeanserver" class="org.springframework.jmx.support.MBeanServerFactoryBean" > + <property name="locateExistingServerIfPossible" value="true"/> + </bean> <bean id="registry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean"> <property name="port" value="1099" /> @@ -179,13 +181,6 @@ <bean id="dnsservice" class="org.apache.james.dnsservice.dnsjava.DNSJavaService" /> - <!-- The Spool Management block --> - <!-- - <bean id="spoolmanagement" class="org.apache.james.management.impl.SpoolManagement" /> - --> - - <bean id="processormanagement" class="org.apache.james.management.impl.ProcessorManagement" /> - <bean id="bayesiananalyzermanagement" class="org.apache.james.management.impl.BayesianAnalyzerManagement" /> <!-- Async RemoteManager --> --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org