Hi,

I checked the last patch and it failed to go through cleanly.

Here's an additional attempt (I also added the patch to an issue in JIRA : https://issues.apache.org/jira/browse/JAMES-829)

Thanks,
Kev
Index: 
core-library/src/main/java/org/apache/james/mailrepository/clean/CleanMailRepositoryService.java
===================================================================
--- 
core-library/src/main/java/org/apache/james/mailrepository/clean/CleanMailRepositoryService.java
    (revision 0)
+++ 
core-library/src/main/java/org/apache/james/mailrepository/clean/CleanMailRepositoryService.java
    (revision 0)
@@ -0,0 +1,143 @@
+/****************************************************************
+ * 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.mailrepository.clean;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.avalon.cornerstone.services.datasources.DataSourceSelector;
+import org.apache.avalon.cornerstone.services.scheduler.PeriodicTimeTrigger;
+import org.apache.avalon.cornerstone.services.scheduler.TimeScheduler;
+import org.apache.avalon.framework.activity.Disposable;
+import org.apache.avalon.framework.activity.Initializable;
+import org.apache.avalon.framework.configuration.Configurable;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.container.ContainerUtil;
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.avalon.framework.service.Serviceable;
+
+public class CleanMailRepositoryService 
+       extends AbstractLogEnabled implements Serviceable, Configurable, 
Initializable, Disposable{
+
+       /**
+     * Configuration object for this service
+     */
+    private Configuration conf;
+
+    private DataSourceSelector datasources;
+    
+    private String datasourceName;
+    
+    /**
+     * The service manager that allows access to the system services
+     */
+    private ServiceManager manager;
+
+    /**
+     * The scheduler service that is used to trigger fetch tasks.
+     */
+    private TimeScheduler scheduler;
+    
+    /**
+     * Whether this service is enabled.
+     */
+    private volatile boolean enabled = false;
+       
+    private List taskNames = new ArrayList();
+    
+    public void setScheduler(TimeScheduler ts) {
+       scheduler = ts;
+    }
+    
+       public void service(ServiceManager m) throws ServiceException {
+               manager = m;
+       }
+
+       public void configure(Configuration c) throws ConfigurationException {
+               conf = c;
+               Configuration config = c.getChild( "repositoryPath" );
+               String destination = config.getValue();
+        // normalize the destination, to simplify processing.
+        if ( ! destination.endsWith("/") ) {
+            destination += "/";
+        }
+        // Parse the DestinationURL for the name of the datasource,
+        // the table to use, and the (optional) repository Key.
+        // Split on "/", starting after "db://"
+        List urlParams = new ArrayList();
+        int start = 5;
+        
+        int end = destination.indexOf('/', start);
+        while ( end > -1 ) {
+            urlParams.add(destination.substring(start, end));
+            start = end + 1;
+            end = destination.indexOf('/', start);
+        }
+        datasourceName = (String)urlParams.get(0);
+       }
+
+       public void initialize() throws Exception {
+               //set if enabled in config
+               enabled = conf.getAttributeAsBoolean( "enabled", false );
+               if( enabled ) {
+                       TimeScheduler scheduler = (TimeScheduler) 
manager.lookup( TimeScheduler.ROLE );
+                       datasources = (DataSourceSelector) manager.lookup( 
DataSourceSelector.ROLE ); 
+            setScheduler( scheduler );
+            
+            Configuration[] confs = conf.getChildren( "cleanup" );
+            for(int i=0; i<confs.length; i++) {
+               Configuration conf = confs[i];
+                String cleanName = conf.getAttribute( "name" );
+                Integer interval = new Integer( conf.getChild( "interval" 
).getValue() );
+                
+                MailCleaner mc = new MailCleaner();
+                mc.setDatasources( datasources );
+                mc.setDataSourceName( datasourceName );
+                /* avalon specific initialization */
+                ContainerUtil.enableLogging( mc,getLogger().getChildLogger( 
cleanName ) );
+                ContainerUtil.service( mc,manager );
+                ContainerUtil.configure( mc,conf );
+                
+                /* initialize scheduling */
+                PeriodicTimeTrigger fetchTrigger =
+                        new PeriodicTimeTrigger( 0, interval.intValue() );
+                scheduler.addTrigger( cleanName, fetchTrigger, mc );
+                taskNames.add( cleanName );
+            }
+            if (getLogger().isInfoEnabled()) getLogger().info("MailCleaner 
Started");
+               } else {
+                       if (getLogger().isInfoEnabled()) 
getLogger().info("MailCleaner Disabled");
+               }
+       }
+
+       public void dispose() {
+               if ( enabled ) {
+            getLogger().info( "MailCleaner dispose..." );
+            for(Iterator i = taskNames.iterator(); i.hasNext();) {
+                scheduler.removeTrigger( (String) i.next() );
+            }
+            getLogger().info( "MailCleaner ...dispose end" );
+        }
+       }
+}
\ No newline at end of file
Index: 
core-library/src/main/java/org/apache/james/mailrepository/clean/CleanMailRepositoryService.xinfo
===================================================================
--- 
core-library/src/main/java/org/apache/james/mailrepository/clean/CleanMailRepositoryService.xinfo
   (revision 0)
+++ 
core-library/src/main/java/org/apache/james/mailrepository/clean/CleanMailRepositoryService.xinfo
   (revision 0)
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<!--
+  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.                                           
+ -->
+<blockinfo>
+
+  <!-- section to describe block -->
+  <block>
+    <version>1.0</version>
+  </block>
+
+  <!-- services that are offered by this block -->
+  <services/>
+
+  <dependencies>
+    <dependency>
+      <service 
name="org.apache.avalon.cornerstone.services.datasources.DataSourceSelector" 
version="1.0"/>
+    </dependency>
+    <dependency> 
+      <service 
name="org.apache.avalon.cornerstone.services.scheduler.TimeScheduler" 
version="1.0"/>
+    </dependency> 
+  </dependencies>  
+</blockinfo>
\ No newline at end of file
Index: 
core-library/src/main/java/org/apache/james/mailrepository/clean/MailCleaner.java
===================================================================
--- 
core-library/src/main/java/org/apache/james/mailrepository/clean/MailCleaner.java
   (revision 0)
+++ 
core-library/src/main/java/org/apache/james/mailrepository/clean/MailCleaner.java
   (revision 0)
@@ -0,0 +1,116 @@
+/****************************************************************
+ * 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.mailrepository.clean;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.Calendar;
+import java.util.Date;
+
+import org.apache.avalon.cornerstone.services.datasources.DataSourceSelector;
+import org.apache.avalon.cornerstone.services.scheduler.Target;
+import org.apache.avalon.excalibur.datasource.DataSourceComponent;
+import org.apache.avalon.framework.configuration.Configurable;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.james.util.JDBCUtil;
+
+public class MailCleaner extends AbstractLogEnabled implements Configurable, 
Target {
+       
+       private boolean cleaning;
+       private int delay;
+       private String schema;
+       private String table;
+       private DataSourceSelector datasources;
+       private String dataSourceName;
+       private DataSourceComponent dataSourceComponent;
+       
+       public MailCleaner() {
+               super();
+       }
+       
+       public void configure(Configuration conf) throws ConfigurationException 
{
+               try {
+                       setDataSourceComponent( (DataSourceComponent) 
datasources.select( dataSourceName ) );
+               } catch(Exception e) {
+                       throw new ConfigurationException( e.getMessage() );
+               }
+               Configuration mConf = conf.getChild( "mail-cleaner" );
+               delay = mConf.getAttributeAsInteger( "delay" );
+               schema = mConf.getAttribute( "schema" );
+               table = mConf.getAttribute( "table" );
+       }
+
+       public void targetTriggered(String arg0) {
+               if( isCleaning() )
+                       return;
+               
+               setCleaning( true );
+               getLogger().info( "Cleaning..." );
+               
+               Connection con = null;          
+               //take X days off today
+               Calendar cal = Calendar.getInstance();
+               cal.setTime(new Date());
+               cal.add(Calendar.DAY_OF_MONTH, -delay);
+               Timestamp lastUpdated = new Timestamp( cal.getTimeInMillis() );
+               try {
+                       con = dataSourceComponent.getConnection();
+                       PreparedStatement ps = con.prepareStatement(
+                                       "DELETE FROM "+schema+"."+table+" t 
WHERE t.last_updated < ?"
+                       );
+                       ps.setTimestamp(1, lastUpdated);
+                       ps.executeUpdate();
+               } catch (SQLException e) {
+                       e.printStackTrace();
+               } finally {
+                       new JDBCUtil(){
+                               protected void delegatedLog(String errorString){
+                                       return;
+                               }
+                       }.closeJDBCConnection( con );
+                       
+                       setCleaning( false );
+               }
+       }
+
+       public boolean isCleaning() {
+               return cleaning;
+       }
+
+       public void setCleaning(boolean cleaning) {
+               this.cleaning = cleaning;
+       }
+
+       public void setDatasources(DataSourceSelector dss) {
+               datasources = dss;
+       }
+       
+       public void setDataSourceName(String datasourceName) {
+               this.dataSourceName = datasourceName;
+       }
+       
+       public void setDataSourceComponent(DataSourceComponent 
dataSourceComponent) {
+        this.dataSourceComponent = dataSourceComponent;
+    }
+}
\ No newline at end of file
Index: 
core-library/src/main/java/org/apache/james/mailrepository/clean/CleanMailRepositoryService.java
===================================================================
--- 
core-library/src/main/java/org/apache/james/mailrepository/clean/CleanMailRepositoryService.java
    (revision 0)
+++ 
core-library/src/main/java/org/apache/james/mailrepository/clean/CleanMailRepositoryService.java
    (revision 0)
@@ -0,0 +1,143 @@
+/****************************************************************
+ * 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.mailrepository.clean;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.avalon.cornerstone.services.datasources.DataSourceSelector;
+import org.apache.avalon.cornerstone.services.scheduler.PeriodicTimeTrigger;
+import org.apache.avalon.cornerstone.services.scheduler.TimeScheduler;
+import org.apache.avalon.framework.activity.Disposable;
+import org.apache.avalon.framework.activity.Initializable;
+import org.apache.avalon.framework.configuration.Configurable;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.container.ContainerUtil;
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.avalon.framework.service.Serviceable;
+
+public class CleanMailRepositoryService 
+       extends AbstractLogEnabled implements Serviceable, Configurable, 
Initializable, Disposable{
+
+       /**
+     * Configuration object for this service
+     */
+    private Configuration conf;
+
+    private DataSourceSelector datasources;
+    
+    private String datasourceName;
+    
+    /**
+     * The service manager that allows access to the system services
+     */
+    private ServiceManager manager;
+
+    /**
+     * The scheduler service that is used to trigger fetch tasks.
+     */
+    private TimeScheduler scheduler;
+    
+    /**
+     * Whether this service is enabled.
+     */
+    private volatile boolean enabled = false;
+       
+    private List taskNames = new ArrayList();
+    
+    public void setScheduler(TimeScheduler ts) {
+       scheduler = ts;
+    }
+    
+       public void service(ServiceManager m) throws ServiceException {
+               manager = m;
+       }
+
+       public void configure(Configuration c) throws ConfigurationException {
+               conf = c;
+               Configuration config = c.getChild( "repositoryPath" );
+               String destination = config.getValue();
+        // normalize the destination, to simplify processing.
+        if ( ! destination.endsWith("/") ) {
+            destination += "/";
+        }
+        // Parse the DestinationURL for the name of the datasource,
+        // the table to use, and the (optional) repository Key.
+        // Split on "/", starting after "db://"
+        List urlParams = new ArrayList();
+        int start = 5;
+        
+        int end = destination.indexOf('/', start);
+        while ( end > -1 ) {
+            urlParams.add(destination.substring(start, end));
+            start = end + 1;
+            end = destination.indexOf('/', start);
+        }
+        datasourceName = (String)urlParams.get(0);
+       }
+
+       public void initialize() throws Exception {
+               //set if enabled in config
+               enabled = conf.getAttributeAsBoolean( "enabled", false );
+               if( enabled ) {
+                       TimeScheduler scheduler = (TimeScheduler) 
manager.lookup( TimeScheduler.ROLE );
+                       datasources = (DataSourceSelector) manager.lookup( 
DataSourceSelector.ROLE ); 
+            setScheduler( scheduler );
+            
+            Configuration[] confs = conf.getChildren( "cleanup" );
+            for(int i=0; i<confs.length; i++) {
+               Configuration conf = confs[i];
+                String cleanName = conf.getAttribute( "name" );
+                Integer interval = new Integer( conf.getChild( "interval" 
).getValue() );
+                
+                MailCleaner mc = new MailCleaner();
+                mc.setDatasources( datasources );
+                mc.setDataSourceName( datasourceName );
+                /* avalon specific initialization */
+                ContainerUtil.enableLogging( mc,getLogger().getChildLogger( 
cleanName ) );
+                ContainerUtil.service( mc,manager );
+                ContainerUtil.configure( mc,conf );
+                
+                /* initialize scheduling */
+                PeriodicTimeTrigger fetchTrigger =
+                        new PeriodicTimeTrigger( 0, interval.intValue() );
+                scheduler.addTrigger( cleanName, fetchTrigger, mc );
+                taskNames.add( cleanName );
+            }
+            if (getLogger().isInfoEnabled()) getLogger().info("MailCleaner 
Started");
+               } else {
+                       if (getLogger().isInfoEnabled()) 
getLogger().info("MailCleaner Disabled");
+               }
+       }
+
+       public void dispose() {
+               if ( enabled ) {
+            getLogger().info( "MailCleaner dispose..." );
+            for(Iterator i = taskNames.iterator(); i.hasNext();) {
+                scheduler.removeTrigger( (String) i.next() );
+            }
+            getLogger().info( "MailCleaner ...dispose end" );
+        }
+       }
+}
\ No newline at end of file
Index: 
core-library/src/main/java/org/apache/james/mailrepository/clean/CleanMailRepositoryService.xinfo
===================================================================
--- 
core-library/src/main/java/org/apache/james/mailrepository/clean/CleanMailRepositoryService.xinfo
   (revision 0)
+++ 
core-library/src/main/java/org/apache/james/mailrepository/clean/CleanMailRepositoryService.xinfo
   (revision 0)
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<!--
+  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.                                           
+ -->
+<blockinfo>
+
+  <!-- section to describe block -->
+  <block>
+    <version>1.0</version>
+  </block>
+
+  <!-- services that are offered by this block -->
+  <services/>
+
+  <dependencies>
+    <dependency>
+      <service 
name="org.apache.avalon.cornerstone.services.datasources.DataSourceSelector" 
version="1.0"/>
+    </dependency>
+    <dependency> 
+      <service 
name="org.apache.avalon.cornerstone.services.scheduler.TimeScheduler" 
version="1.0"/>
+    </dependency> 
+  </dependencies>  
+</blockinfo>
\ No newline at end of file
Index: 
core-library/src/main/java/org/apache/james/mailrepository/clean/MailCleaner.java
===================================================================
--- 
core-library/src/main/java/org/apache/james/mailrepository/clean/MailCleaner.java
   (revision 0)
+++ 
core-library/src/main/java/org/apache/james/mailrepository/clean/MailCleaner.java
   (revision 0)
@@ -0,0 +1,116 @@
+/****************************************************************
+ * 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.mailrepository.clean;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.Calendar;
+import java.util.Date;
+
+import org.apache.avalon.cornerstone.services.datasources.DataSourceSelector;
+import org.apache.avalon.cornerstone.services.scheduler.Target;
+import org.apache.avalon.excalibur.datasource.DataSourceComponent;
+import org.apache.avalon.framework.configuration.Configurable;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.james.util.JDBCUtil;
+
+public class MailCleaner extends AbstractLogEnabled implements Configurable, 
Target {
+       
+       private boolean cleaning;
+       private int delay;
+       private String schema;
+       private String table;
+       private DataSourceSelector datasources;
+       private String dataSourceName;
+       private DataSourceComponent dataSourceComponent;
+       
+       public MailCleaner() {
+               super();
+       }
+       
+       public void configure(Configuration conf) throws ConfigurationException 
{
+               try {
+                       setDataSourceComponent( (DataSourceComponent) 
datasources.select( dataSourceName ) );
+               } catch(Exception e) {
+                       throw new ConfigurationException( e.getMessage() );
+               }
+               Configuration mConf = conf.getChild( "mail-cleaner" );
+               delay = mConf.getAttributeAsInteger( "delay" );
+               schema = mConf.getAttribute( "schema" );
+               table = mConf.getAttribute( "table" );
+       }
+
+       public void targetTriggered(String arg0) {
+               if( isCleaning() )
+                       return;
+               
+               setCleaning( true );
+               getLogger().info( "Cleaning..." );
+               
+               Connection con = null;          
+               //take X days off today
+               Calendar cal = Calendar.getInstance();
+               cal.setTime(new Date());
+               cal.add(Calendar.DAY_OF_MONTH, -delay);
+               Timestamp lastUpdated = new Timestamp( cal.getTimeInMillis() );
+               try {
+                       con = dataSourceComponent.getConnection();
+                       PreparedStatement ps = con.prepareStatement(
+                                       "DELETE FROM "+schema+"."+table+" t 
WHERE t.last_updated < ?"
+                       );
+                       ps.setTimestamp(1, lastUpdated);
+                       ps.executeUpdate();
+               } catch (SQLException e) {
+                       e.printStackTrace();
+               } finally {
+                       new JDBCUtil(){
+                               protected void delegatedLog(String errorString){
+                                       return;
+                               }
+                       }.closeJDBCConnection( con );
+                       
+                       setCleaning( false );
+               }
+       }
+
+       public boolean isCleaning() {
+               return cleaning;
+       }
+
+       public void setCleaning(boolean cleaning) {
+               this.cleaning = cleaning;
+       }
+
+       public void setDatasources(DataSourceSelector dss) {
+               datasources = dss;
+       }
+       
+       public void setDataSourceName(String datasourceName) {
+               this.dataSourceName = datasourceName;
+       }
+       
+       public void setDataSourceComponent(DataSourceComponent 
dataSourceComponent) {
+        this.dataSourceComponent = dataSourceComponent;
+    }
+}
\ No newline at end of file
Index: 
mordred-library/src/main/java/org/apache/james/util/mordred/PoolConnEntry.java
===================================================================
--- 
mordred-library/src/main/java/org/apache/james/util/mordred/PoolConnEntry.java  
    (revision 578062)
+++ 
mordred-library/src/main/java/org/apache/james/util/mordred/PoolConnEntry.java  
    (working copy)
@@ -33,6 +33,7 @@
 
 /**
  * An entry in a connection pool.
+ * 
  *
  */
 public class PoolConnEntry implements java.sql.Connection{
@@ -426,4 +427,4 @@
         throw new SQLException("This is not a Jdbc 3.0 Compliant Connection");
     }
 
-}
+}
\ No newline at end of file
Index: phoenix-deployment/src/conf/james-server.xml
===================================================================
--- phoenix-deployment/src/conf/james-server.xml        (revision 578062)
+++ phoenix-deployment/src/conf/james-server.xml        (working copy)
@@ -122,6 +122,9 @@
       <category name="fetchmail" log-level="INFO">
         <log-target id-ref="fetchmail-target"/>
       </category>
+      <category name="mailclean" log-level="INFO">
+        <log-target id-ref="mailclean-target"/>
+      </category>
     </categories>
 
     <!-- Logger targets -->
@@ -347,6 +350,17 @@
           </or>
         </rotation>
       </file>
+      <file id="mailclean-target">
+        <filename>${app.home}/logs/mailclean</filename>
+        <format>%{time:dd/MM/yy HH:mm:ss} %5.5{priority} %{category}: 
%{message}\n%{throwable}</format>
+        <append>true</append>
+        <rotation type="unique" pattern="-yyyy-MM-dd-HH-mm" suffix=".log">
+          <or>
+            <date>dd</date>
+            <size>10485760</size>
+          </or>
+        </rotation>
+      </file>
     </targets>
   </logs>
 </server>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to