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/10/27 17:27:59 UTC

svn commit: r1028005 - in /james/server/trunk: container-spring/src/main/config/james/ mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/camel/ mailetcontainer-library/ mailetcontainer-library/src/main/java/org/apache/james/mailetcon...

Author: norman
Date: Wed Oct 27 15:27:58 2010
New Revision: 1028005

URL: http://svn.apache.org/viewvc?rev=1028005&view=rev
Log:
Add support for CompositeMatcher implementations to allow complex Matcher combinations. This implementation is based on the patch provided by Ralph B Holland, so many thanks! See JAMES-948

Added:
    james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/
    james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/And.java
      - copied, changed from r1026947, james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/And.java
    james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/CompositeMatcher.java
      - copied, changed from r1026947, james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/CompositeMatcher.java
    james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/GenericCompositeMatcher.java
      - copied, changed from r1026947, james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/GenericCompositeMatcher.java
    james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/Not.java
      - copied, changed from r1026947, james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/Not.java
    james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/Or.java
      - copied, changed from r1026947, james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/Or.java
    james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/Xor.java
      - copied, changed from r1026947, james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/Xor.java
    james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/matchers/
    james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/matchers/AndTest.java
      - copied, changed from r1026947, james/server/trunk/mailets/src/test/java/org/apache/james/transport/matchers/AndTest.java
    james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/matchers/OrTest.java
      - copied, changed from r1026947, james/server/trunk/mailets/src/test/java/org/apache/james/transport/matchers/OrTest.java
    james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/matchers/XorTest.java
      - copied, changed from r1026947, james/server/trunk/mailets/src/test/java/org/apache/james/transport/matchers/XorTest.java
Removed:
    james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/And.java
    james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/CompositeMatcher.java
    james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/GenericCompositeMatcher.java
    james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/Not.java
    james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/Or.java
    james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/Xor.java
    james/server/trunk/mailets/src/test/java/org/apache/james/transport/matchers/AndTest.java
    james/server/trunk/mailets/src/test/java/org/apache/james/transport/matchers/OrTest.java
    james/server/trunk/mailets/src/test/java/org/apache/james/transport/matchers/XorTest.java
Modified:
    james/server/trunk/container-spring/src/main/config/james/mailetcontainer.xml
    james/server/trunk/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/camel/CamelMailProcessorList.java
    james/server/trunk/mailetcontainer-library/pom.xml
    james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/MatcherManagement.java
    james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/ProcessorManagement.java

Modified: james/server/trunk/container-spring/src/main/config/james/mailetcontainer.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/container-spring/src/main/config/james/mailetcontainer.xml?rev=1028005&r1=1028004&r2=1028005&view=diff
==============================================================================
--- james/server/trunk/container-spring/src/main/config/james/mailetcontainer.xml (original)
+++ james/server/trunk/container-spring/src/main/config/james/mailetcontainer.xml Wed Oct 27 15:27:58 2010
@@ -36,6 +36,8 @@
         <matcherpackage>org.apache.james.transport.matchers</matcherpackage>
         <!-- Crytographic matchers -->
         <matcherpackage>org.apache.james.mailet.crypto.matchers</matcherpackage>
+        <!-- Composite matchers -->
+        <matcherpackage>org.apache.james.mailetcontainer.lib.matchers</matcherpackage>
       </matcherpackages>
       
       <!-- The root processor is a required processor - James routes all mail on the spool -->

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=1028005&r1=1028004&r2=1028005&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 27 15:27:58 2010
@@ -29,6 +29,7 @@ import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 import javax.annotation.Resource;
 import javax.mail.MessagingException;
+import javax.management.NotCompliantMBeanException;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
@@ -54,6 +55,7 @@ import org.apache.james.mailetcontainer.
 import org.apache.james.mailetcontainer.lib.MailetManagement;
 import org.apache.james.mailetcontainer.lib.MatcherManagement;
 import org.apache.james.mailetcontainer.lib.ProcessorDetail;
+import org.apache.james.mailetcontainer.lib.matchers.CompositeMatcher;
 import org.apache.mailet.Mail;
 import org.apache.mailet.Mailet;
 import org.apache.mailet.MailetConfig;
@@ -64,7 +66,10 @@ import org.apache.mailet.base.MatcherInv
 /**
  * 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
+ * It also offer the {@link MailProcessorList} implementation which allow to inject {@link Mail} into the routes.
+ *
+ * Beside the basic {@link Mailet} / {@link Matcher} support this implementation also supports {@link CompositeMatcher} implementations.
+ * See JAMES-948 
  * 
  */
 public class CamelMailProcessorList implements Configurable, LogEnabled, MailProcessorList, CamelContextAware, ProcessorManagementMBean {
@@ -76,6 +81,7 @@ public class CamelMailProcessorList impl
 
     private final Map<String,List<MailetManagement>> mailets = new HashMap<String,List<MailetManagement>>();
     private final Map<String,List<MatcherManagement>> matchers = new HashMap<String,List<MatcherManagement>>();
+    
     private final Map<String,MailProcessor> processors = new HashMap<String,MailProcessor>();
     private final UseLatestAggregationStrategy aggr = new UseLatestAggregationStrategy();
        
@@ -346,7 +352,13 @@ public class CamelMailProcessorList impl
                 // store the logger in properties
                 .setProperty(MatcherSplitter.LOGGER_PROPERTY, constant(logger));   
 
+                // load composite matchers if there are any
+                Map<String,MatcherManagement> compositeMatchers = new HashMap<String, MatcherManagement>();
+                loadCompositeMatchers(processorName, compositeMatchers, processorConf.configurationsAt("matcher"));
+                
+                
                 final List<HierarchicalConfiguration> mailetConfs = processorConf.configurationsAt("mailet");
+                
                 // Loop through the mailet configuration, load
                 // all of the matcher and mailets, and add
                 // them to the processor.
@@ -366,9 +378,20 @@ public class CamelMailProcessorList impl
                             // if no matcher is configured throw an Exception
                             throw new ConfigurationException("Please configure only match or nomatch per mailet");
                         } else if (matcherName != null) {
-                            matcher = matcherLoader.getMatcher(matcherName);
+                            // try to load from compositeMatchers first
+                            matcher = compositeMatchers.get(matcherName);
+                            if (matcher == null) {
+                                // no composite Matcher found, try to load it via MatcherLoader
+                                matcher = matcherLoader.getMatcher(matcherName);
+                            }
                         } else if (invertedMatcherName != null) {
-                            matcher = new MatcherInverter(matcherLoader.getMatcher(invertedMatcherName));
+                            // try to load from compositeMatchers first
+                            matcher = compositeMatchers.get(matcherName);
+                            if (matcher == null) {
+                                // no composite Matcher found, try to load it via MatcherLoader
+                                matcher = matcherLoader.getMatcher(invertedMatcherName);
+                            }
+                            matcher = new MatcherInverter(matcher);
 
                         } else {
                             // default matcher is All
@@ -414,8 +437,21 @@ public class CamelMailProcessorList impl
                         throw new ConfigurationException("Unable to init mailet", ex);
                     }
                     if (mailet != null && matcher != null) {
-                        MailetManagement wrappedMailet = new MailetManagement(mailet);
-                        MatcherManagement wrappedMatcher = new MatcherManagement(matcher);
+                        MailetManagement wrappedMailet;
+                        if (mailet instanceof MailetManagement) {
+                            wrappedMailet = (MailetManagement) mailet;
+                        } else {
+                            wrappedMailet  = new MailetManagement(mailet);
+                        }
+                        
+                        MatcherManagement wrappedMatcher;
+                        if (matcher instanceof MatcherManagement) {
+                            wrappedMatcher = (MatcherManagement) matcher;
+                        } else {
+                            wrappedMatcher = new MatcherManagement(matcher);
+                        }
+                        
+                        
                         String onMatchException = null;
                         MailetConfig mailetConfig = wrappedMailet.getMailetConfig();
                     
@@ -430,6 +466,7 @@ public class CamelMailProcessorList impl
                             
                             // do splitting of the mail based on the stored matcher
                             .split().method(MatcherSplitter.class).aggregationStrategy(aggr).parallelProcessing()
+                            
                             .choice().when(new MatcherMatch()).process(mailetProccessor).end()
                             
                             .choice().when(new MailStateEquals(Mail.GHOST)).process(disposeProcessor).stop().otherwise().process(removePropsProcessor).end()
@@ -464,4 +501,65 @@ public class CamelMailProcessorList impl
                 
         }
     }
+    
+    /**
+     * Load  {@link CompositeMatcher} implementations and their child {@link Matcher}'s
+     * 
+     * CompositeMatcher were added by JAMES-948
+     * 
+     * @param processorName
+     * @param compMap
+     * @param compMatcherConfs
+     * @return compositeMatchers
+     * @throws ConfigurationException
+     * @throws MessagingException
+     * @throws NotCompliantMBeanException
+     */
+    @SuppressWarnings("unchecked")
+    private List<MatcherManagement> loadCompositeMatchers(String processorName, Map<String,MatcherManagement> compMap, List<HierarchicalConfiguration> compMatcherConfs) throws ConfigurationException, MessagingException, NotCompliantMBeanException {
+        List<MatcherManagement> matchers = new ArrayList<MatcherManagement>();
+
+        for (int j= 0 ; j < compMatcherConfs.size(); j++) {
+            HierarchicalConfiguration c = compMatcherConfs.get(j);
+            String compName = c.getString("[@name]", null);
+            String matcherName = c.getString("[@match]", null);
+            String invertedMatcherName = c.getString("[@notmatch]", null);
+
+            Matcher matcher = null;
+            if (matcherName != null && invertedMatcherName != null) {
+                // if no matcher is configured throw an Exception
+                throw new ConfigurationException("Please configure only match or nomatch per mailet");
+            } else if (matcherName != null) {
+                matcher = matcherLoader.getMatcher(matcherName);
+                if (matcher instanceof CompositeMatcher) {
+                    CompositeMatcher compMatcher = (CompositeMatcher) matcher;
+                    
+                    List<MatcherManagement> childMatcher = loadCompositeMatchers(processorName, compMap,c.configurationsAt("matcher"));
+                    for (int i = 0 ; i < childMatcher.size(); i++) {
+                        compMatcher.add(childMatcher.get(i));
+                    }
+                }
+            } else if (invertedMatcherName != null) {
+                Matcher m = matcherLoader.getMatcher(invertedMatcherName);
+                if (m instanceof CompositeMatcher) {
+                    CompositeMatcher compMatcher = (CompositeMatcher) m;
+                    
+                    List<MatcherManagement> childMatcher = loadCompositeMatchers(processorName, compMap,c.configurationsAt("matcher"));
+                    for (int i = 0 ; i < childMatcher.size(); i++) {
+                        compMatcher.add(childMatcher.get(i));
+                    }
+                }
+                matcher = new MatcherInverter(m);
+            }
+            if (matcher == null) throw new ConfigurationException("Unable to load matcher instance");
+            MatcherManagement mgmtMatcher = new MatcherManagement(matcher);
+            matchers.add(mgmtMatcher);
+            if (compName != null) {
+                // check if there is already a composite Matcher with the name registered in the processor
+                if (compMap.containsKey(compName)) throw new ConfigurationException("CompositeMatcher with name " + compName + " is already defined in processor " + processorName);
+                compMap.put(compName, mgmtMatcher);
+            }
+        }
+        return matchers;
+    }
 }

Modified: james/server/trunk/mailetcontainer-library/pom.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-library/pom.xml?rev=1028005&r1=1028004&r2=1028005&view=diff
==============================================================================
--- james/server/trunk/mailetcontainer-library/pom.xml (original)
+++ james/server/trunk/mailetcontainer-library/pom.xml Wed Oct 27 15:27:58 2010
@@ -81,5 +81,17 @@
       <type>test-jar</type>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.apache.james</groupId>
+      <artifactId>apache-mailet-base</artifactId>
+      <classifier>tests</classifier>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.james</groupId>
+      <artifactId>apache-standard-mailets</artifactId>
+      <version>1.0</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 </project>

Modified: james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/MatcherManagement.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/MatcherManagement.java?rev=1028005&r1=1028004&r2=1028005&view=diff
==============================================================================
--- james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/MatcherManagement.java (original)
+++ james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/MatcherManagement.java Wed Oct 27 15:27:58 2010
@@ -29,6 +29,11 @@ import org.apache.mailet.Mail;
 import org.apache.mailet.Matcher;
 import org.apache.mailet.MatcherConfig;
 
+/**
+ * JMX MBean which will collection statistics for the wrapped {@link Matcher}
+ * 
+ *
+ */
 public final class MatcherManagement extends StandardMBean implements MatcherManagementMBean, Matcher{
     private Matcher matcher;
     private long slowestProcessing = -1;
@@ -41,8 +46,19 @@ public final class MatcherManagement ext
     public MatcherManagement(Matcher matcher) throws NotCompliantMBeanException {
         super(MatcherManagementMBean.class);
         this.matcher = matcher;
+
     }
 
+    /**
+     * Return the wrapped {@link Matcher}
+     * 
+     * @return wrappedMatcher
+     */
+    public Matcher getMatcher() {
+        return matcher;
+    }
+    
+    
     /*
      * (non-Javadoc)
      * @see org.apache.james.mailetcontainer.MatcherManagementMBean#getMatcherName()

Modified: james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/ProcessorManagement.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/ProcessorManagement.java?rev=1028005&r1=1028004&r2=1028005&view=diff
==============================================================================
--- james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/ProcessorManagement.java (original)
+++ james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/ProcessorManagement.java Wed Oct 27 15:27:58 2010
@@ -20,6 +20,7 @@ package org.apache.james.mailetcontainer
 
 import java.lang.management.ManagementFactory;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
 import javax.annotation.PostConstruct;
@@ -37,6 +38,7 @@ import org.apache.james.mailetcontainer.
 import org.apache.james.mailetcontainer.api.MailProcessorList;
 import org.apache.james.mailetcontainer.api.MailetContainer;
 import org.apache.james.mailetcontainer.api.ProcessorManagementMBean;
+import org.apache.james.mailetcontainer.lib.matchers.CompositeMatcher;
 import org.apache.mailet.Mailet;
 import org.apache.mailet.Matcher;
 
@@ -73,6 +75,9 @@ public class ProcessorManagement extends
         unregisterMBeans();
     }
     
+    /**
+     * Unregister all JMX MBeans
+     */
     private void unregisterMBeans() {
         List<ObjectName> unregistered = new ArrayList<ObjectName>();
         for (int i = 0; i < mbeans.size(); i++) {
@@ -89,6 +94,11 @@ public class ProcessorManagement extends
     }
 
 
+    /**
+     * Register all JMX MBeans
+     * 
+     * @throws NotCompliantMBeanException
+     */
     private void registerMBeans() throws NotCompliantMBeanException {
        
         String baseObjectName = "org.apache.james:type=component,name=processor,";
@@ -96,12 +106,18 @@ public class ProcessorManagement extends
         String[] processorNames = getProcessorNames();
         for (int i = 0; i < processorNames.length; i++) {
             String processorName = processorNames[i];
-            createProcessorMBean(baseObjectName, processorName, mbeanserver);
-            continue;
+            registerProcessorMBean(baseObjectName, processorName);
         }
     }
 
-    private void createProcessorMBean(String baseObjectName, String processorName, MBeanServer mBeanServer) throws NotCompliantMBeanException {
+    /**
+     * Register a JMX MBean for a {@link MailProcessor}
+     * 
+     * @param baseObjectName
+     * @param processorName
+     * @throws NotCompliantMBeanException
+     */
+    private void registerProcessorMBean(String baseObjectName, String processorName) throws NotCompliantMBeanException {
         String processorMBeanName = baseObjectName + "processor=" + processorName;
         
         MailProcessor processor = mailProcessor.getProcessor(processorName);
@@ -114,54 +130,89 @@ public class ProcessorManagement extends
         } else {
             processorDetail = new ProcessorDetail(processorName, processor);
         }
-        registerMBean(mBeanServer, processorMBeanName, processorDetail);
+        registerMBean(processorMBeanName, processorDetail);
 
 
         // check if the processor holds Mailets and Matchers
         if (processor instanceof MailetContainer) {
             MailetContainer container = (MailetContainer) processor;
-            List<Mailet> mailets =  container.getMailets();
-         
-            for (int i = 0; i < mailets.size(); i++) {
-                MailetManagement mailetManagement;
-
-                Mailet mailet = mailets.get(i);
-                
-                // check if the mailet is an instance of MailetManagement. If not create a wrapper around it. This will give us not all
-                // statistics but at least a few of them
-                if (mailet instanceof MailetManagement) {
-                    mailetManagement = (MailetManagement) mailet;
-                } else {
-                    mailetManagement = new MailetManagement(mailet);
-                }
-                String mailetMBeanName = processorMBeanName + ",subtype=mailet,index=" + (i+1) + ",mailetname=" + mailetManagement.getMailetName();
-                registerMBean(mBeanServer, mailetMBeanName, mailetManagement);
-            }
-
-            List<Matcher> matchers =  container.getMatchers();
-            for (int i = 0; i < matchers.size(); i++) {
-                MatcherManagement matcherManagement;
-                Matcher matcher = matchers.get(i);
-                
-                // check if the matcher is an instance of MatcherManagement. If not create a wrapper around it. This will give us not all
-                // statistics but at least a few of them
-                if (matcher instanceof MatcherManagement) {
-                   matcherManagement = (MatcherManagement) matcher;
-                } else {
-                    matcherManagement = new MatcherManagement(matcher);
-                }
+            registerMailets(processorMBeanName, container.getMailets().iterator());
+            registerMatchers(processorMBeanName, container.getMatchers().iterator(), 0);
+           
+        }
+       
 
-                String matcherMBeanName = processorMBeanName + ",subtype=matcher,index=" + (i+1) + ",matchername=" + matcherManagement.getMatcherName();
+    }
+    
+    /**
+     * Register the Mailets as JMX MBeans
+     * 
+     * @param parentMBeanName
+     * @param mailets
+     * @throws NotCompliantMBeanException
+     */
+    private void registerMailets(String parentMBeanName, Iterator<Mailet> mailets) throws NotCompliantMBeanException {
+        int i = 0;
+        while(mailets.hasNext()) {
+            
+            MailetManagement mailetManagement;
 
-                registerMBean(mBeanServer, matcherMBeanName, matcherManagement);
+            Mailet mailet = mailets.next();
+            
+            // check if the mailet is an instance of MailetManagement. If not create a wrapper around it. This will give us not all
+            // statistics but at least a few of them
+            if (mailet instanceof MailetManagement) {
+                mailetManagement = (MailetManagement) mailet;
+            } else {
+                mailetManagement = new MailetManagement(mailet);
             }
-           
+            String mailetMBeanName = parentMBeanName + ",subtype=mailet,index=" + (i++) + ",mailetname=" + mailetManagement.getMailetName();
+            registerMBean(mailetMBeanName, mailetManagement);
         }
-       
+        
+    }
+    
+
+    /**
+     * Register the {@link Matcher}'s as JMX MBeans
+     * 
+     * @param parentMBeanName
+     * @param matchers
+     * @param nestingLevel
+     * @throws NotCompliantMBeanException
+     */
+    @SuppressWarnings("unchecked")
+    private void registerMatchers(String parentMBeanName, Iterator<Matcher> matchers, int nestingLevel) throws NotCompliantMBeanException {
+        // current level
+        int currentLevel = nestingLevel;
+        int i = 0;
+
+        while (matchers.hasNext()) {
+            MatcherManagement matcherManagement;
+            Matcher matcher = matchers.next();
+            
+            // check if the matcher is an instance of MatcherManagement. If not create a wrapper around it. This will give us not all
+            // statistics but at least a few of them
+            if (matcher instanceof MatcherManagement) {
+               matcherManagement = (MatcherManagement) matcher;
+            } else {
+                matcherManagement = new MatcherManagement(matcher);
+            }
 
+            String matcherMBeanName = parentMBeanName + ",subtype" + currentLevel +"=matcher,index" + currentLevel+"=" + (i++) + ",matchername" + currentLevel+"=" + matcherManagement.getMatcherName();
+            registerMBean(matcherMBeanName, matcherManagement);
+            
+            Matcher wrappedMatcher = getWrappedMatcher(matcherManagement);
+            
+            // Handle CompositeMatcher which were added by JAMES-948
+            if (wrappedMatcher instanceof CompositeMatcher) {
+                // we increment the nesting as we have one more child level and register the child matchers
+                registerMatchers(matcherMBeanName, ((CompositeMatcher) wrappedMatcher).iterator(), ++nestingLevel);
+            }
+        }
     }
 
-    private void registerMBean(MBeanServer mBeanServer, String mBeanName, Object object) {
+    private void registerMBean(String mBeanName, Object object) {
         ObjectName objectName = null;
         try {
             objectName = new ObjectName(mBeanName);
@@ -171,7 +222,7 @@ public class ProcessorManagement extends
             return;
         }
         try {
-            mBeanServer.registerMBean(object, objectName);
+            mbeanserver.registerMBean(object, objectName);
             mbeans.add(objectName);
         } catch (javax.management.JMException e) {
             logger.error("Unable to register mbean", e);
@@ -196,5 +247,16 @@ public class ProcessorManagement extends
     public void setLog(Log logger) {
         this.logger = logger;
     }
+    
+
+    
+    private Matcher getWrappedMatcher(Matcher matcher) {
+        // call recursive to find the real Matcher
+        if (matcher instanceof MatcherManagement) {
+            return getWrappedMatcher(((MatcherManagement)matcher).getMatcher());
+        }
+        return matcher;
+        
+    }
 
 }

Copied: james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/And.java (from r1026947, james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/And.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/And.java?p2=james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/And.java&p1=james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/And.java&r1=1026947&r2=1028005&rev=1028005&view=diff
==============================================================================
--- james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/And.java (original)
+++ james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/And.java Wed Oct 27 15:27:58 2010
@@ -1,4 +1,4 @@
-package org.apache.james.transport.matchers;
+package org.apache.james.mailetcontainer.lib.matchers;
 
 /****************************************************************
  * Licensed to the Apache Software Foundation (ASF) under one   *
@@ -22,6 +22,7 @@ package org.apache.james.transport.match
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.ArrayList;
+
 import org.apache.mailet.MailAddress;
 import org.apache.mailet.Mail;
 import javax.mail.MessagingException;

Copied: james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/CompositeMatcher.java (from r1026947, james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/CompositeMatcher.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/CompositeMatcher.java?p2=james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/CompositeMatcher.java&p1=james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/CompositeMatcher.java&r1=1026947&r2=1028005&rev=1028005&view=diff
==============================================================================
--- james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/CompositeMatcher.java (original)
+++ james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/CompositeMatcher.java Wed Oct 27 15:27:58 2010
@@ -18,7 +18,7 @@
  ****************************************************************/
 
 
-package org.apache.james.transport.matchers;
+package org.apache.james.mailetcontainer.lib.matchers;
 
 import java.util.Iterator;
 import org.apache.mailet.Matcher;

Copied: james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/GenericCompositeMatcher.java (from r1026947, james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/GenericCompositeMatcher.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/GenericCompositeMatcher.java?p2=james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/GenericCompositeMatcher.java&p1=james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/GenericCompositeMatcher.java&r1=1026947&r2=1028005&rev=1028005&view=diff
==============================================================================
--- james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/GenericCompositeMatcher.java (original)
+++ james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/GenericCompositeMatcher.java Wed Oct 27 15:27:58 2010
@@ -18,7 +18,7 @@
  ****************************************************************/
 
 
-package org.apache.james.transport.matchers;
+package org.apache.james.mailetcontainer.lib.matchers;
 
 import java.util.Collection;
 import java.util.Iterator;

Copied: james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/Not.java (from r1026947, james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/Not.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/Not.java?p2=james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/Not.java&p1=james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/Not.java&r1=1026947&r2=1028005&rev=1028005&view=diff
==============================================================================
--- james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/Not.java (original)
+++ james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/Not.java Wed Oct 27 15:27:58 2010
@@ -1,4 +1,4 @@
-package org.apache.james.transport.matchers;
+package org.apache.james.mailetcontainer.lib.matchers;
 
 /****************************************************************
  * Licensed to the Apache Software Foundation (ASF) under one   *
@@ -22,6 +22,7 @@ package org.apache.james.transport.match
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
+
 import org.apache.mailet.Matcher;
 import org.apache.mailet.Mail;
 

Copied: james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/Or.java (from r1026947, james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/Or.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/Or.java?p2=james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/Or.java&p1=james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/Or.java&r1=1026947&r2=1028005&rev=1028005&view=diff
==============================================================================
--- james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/Or.java (original)
+++ james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/Or.java Wed Oct 27 15:27:58 2010
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.transport.matchers;
+package org.apache.james.mailetcontainer.lib.matchers;
 
 import org.apache.mailet.MailAddress;
 import org.apache.mailet.Mail;
@@ -80,6 +80,7 @@ public class Or extends GenericComposite
                             for (Iterator i = result.iterator(); i.hasNext();) {
                                 recipient = (MailAddress) i.next();
                                 if (!finalResult.contains(recipient)) {
+                                    System.out.println(recipient);
                                     finalResult.add(recipient);
                                 }
                             }

Copied: james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/Xor.java (from r1026947, james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/Xor.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/Xor.java?p2=james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/Xor.java&p1=james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/Xor.java&r1=1026947&r2=1028005&rev=1028005&view=diff
==============================================================================
--- james/server/trunk/mailets/src/main/java/org/apache/james/transport/matchers/Xor.java (original)
+++ james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/matchers/Xor.java Wed Oct 27 15:27:58 2010
@@ -17,11 +17,12 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.transport.matchers;
+package org.apache.james.mailetcontainer.lib.matchers;
 
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.ArrayList;
+
 import org.apache.mailet.MailAddress;
 import org.apache.mailet.Mail;
 import javax.mail.MessagingException;

Copied: james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/matchers/AndTest.java (from r1026947, james/server/trunk/mailets/src/test/java/org/apache/james/transport/matchers/AndTest.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/matchers/AndTest.java?p2=james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/matchers/AndTest.java&p1=james/server/trunk/mailets/src/test/java/org/apache/james/transport/matchers/AndTest.java&r1=1026947&r2=1028005&rev=1028005&view=diff
==============================================================================
--- james/server/trunk/mailets/src/test/java/org/apache/james/transport/matchers/AndTest.java (original)
+++ james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/matchers/AndTest.java Wed Oct 27 15:27:58 2010
@@ -17,8 +17,12 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.transport.matchers;
+package org.apache.james.mailetcontainer.lib.matchers;
 
+import org.apache.james.mailetcontainer.lib.matchers.And;
+import org.apache.james.mailetcontainer.lib.matchers.CompositeMatcher;
+import org.apache.james.transport.matchers.All;
+import org.apache.james.transport.matchers.RecipientIs;
 import org.apache.mailet.MailAddress;
 import org.apache.mailet.Matcher;
 import org.apache.mailet.base.test.FakeMail;

Copied: james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/matchers/OrTest.java (from r1026947, james/server/trunk/mailets/src/test/java/org/apache/james/transport/matchers/OrTest.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/matchers/OrTest.java?p2=james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/matchers/OrTest.java&p1=james/server/trunk/mailets/src/test/java/org/apache/james/transport/matchers/OrTest.java&r1=1026947&r2=1028005&rev=1028005&view=diff
==============================================================================
--- james/server/trunk/mailets/src/test/java/org/apache/james/transport/matchers/OrTest.java (original)
+++ james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/matchers/OrTest.java Wed Oct 27 15:27:58 2010
@@ -17,8 +17,11 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.transport.matchers;
+package org.apache.james.mailetcontainer.lib.matchers;
 
+import org.apache.james.mailetcontainer.lib.matchers.CompositeMatcher;
+import org.apache.james.mailetcontainer.lib.matchers.Or;
+import org.apache.james.transport.matchers.RecipientIs;
 import org.apache.mailet.MailAddress;
 import org.apache.mailet.Matcher;
 import org.apache.mailet.base.test.FakeMail;

Copied: james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/matchers/XorTest.java (from r1026947, james/server/trunk/mailets/src/test/java/org/apache/james/transport/matchers/XorTest.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/matchers/XorTest.java?p2=james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/matchers/XorTest.java&p1=james/server/trunk/mailets/src/test/java/org/apache/james/transport/matchers/XorTest.java&r1=1026947&r2=1028005&rev=1028005&view=diff
==============================================================================
--- james/server/trunk/mailets/src/test/java/org/apache/james/transport/matchers/XorTest.java (original)
+++ james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/matchers/XorTest.java Wed Oct 27 15:27:58 2010
@@ -17,8 +17,12 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.transport.matchers;
+package org.apache.james.mailetcontainer.lib.matchers;
 
+import org.apache.james.mailetcontainer.lib.matchers.CompositeMatcher;
+import org.apache.james.mailetcontainer.lib.matchers.Xor;
+import org.apache.james.transport.matchers.All;
+import org.apache.james.transport.matchers.RecipientIs;
 import org.apache.mailet.MailAddress;
 import org.apache.mailet.Matcher;
 import org.apache.mailet.base.test.FakeMail;



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