Index: src/java/org/apache/james/BaseConnectionHandler.java
===================================================================
RCS file: /home/cvs/jakarta-james/src/java/org/apache/james/BaseConnectionHandler.java,v
retrieving revision 1.8
diff -u -r1.8 BaseConnectionHandler.java
--- src/java/org/apache/james/BaseConnectionHandler.java	17 Apr 2002 02:56:31 -0000	1.8
+++ src/java/org/apache/james/BaseConnectionHandler.java	30 Apr 2002 07:51:11 -0000
@@ -7,14 +7,19 @@
  */
 package org.apache.james;
 
-import org.apache.avalon.cornerstone.services.connection.ConnectionHandler;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import org.apache.avalon.framework.component.ComponentException;
+import org.apache.avalon.framework.component.ComponentManager;
+import org.apache.avalon.framework.component.Composable;
 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 java.net.InetAddress;
-import java.net.UnknownHostException;
+import org.apache.avalon.cornerstone.services.connection.ConnectionHandler;
+import org.apache.avalon.cornerstone.services.scheduler.PeriodicTimeTrigger;
+import org.apache.avalon.cornerstone.services.scheduler.TimeScheduler;
+import org.apache.avalon.cornerstone.services.scheduler.Target;
 
 /**
  * Different connection handlers extend this class
@@ -23,10 +28,17 @@
  *
  * @author Harmeet Bedi <harmeet@kodemuse.com>
  */
-public class BaseConnectionHandler extends AbstractLogEnabled implements Configurable {
+public abstract class BaseConnectionHandler extends AbstractLogEnabled implements Configurable, Composable, Target {
+    protected TimeScheduler scheduler;
     protected int timeout;
     protected String helloName;
 
+    public void compose( final ComponentManager componentManager )
+        throws ComponentException
+    {
+        scheduler = (TimeScheduler)componentManager.lookup( TimeScheduler.ROLE );
+    }
+
     public void configure( final Configuration configuration )
         throws ConfigurationException {
 
@@ -51,5 +63,31 @@
      * Release a previously created ConnectionHandler e.g. for spooling.
      */
     public void releaseConnectionHandler(ConnectionHandler connectionHandler) {
+    }
+
+    /**
+     * Turn on connection timeout timer.
+     */
+    protected void addTimeoutTimer()
+    {
+        final PeriodicTimeTrigger trigger
+              = new PeriodicTimeTrigger( timeout, -1 );
+        scheduler.addTrigger( this.toString(), trigger, this );
+    }
+
+    /**
+     * Reset connection timeout timer.
+     */
+    protected void resetTimeoutTimer()
+    {
+        scheduler.resetTrigger(this.toString());
+    }
+
+    /**
+     * Turn off connection timeout timer.
+     */
+    protected void removeTimeoutTimer()
+    {
+        scheduler.removeTrigger(this.toString());
     }
 }
Index: src/java/org/apache/james/nntpserver/NNTPHandler.java
===================================================================
RCS file: /home/cvs/jakarta-james/src/java/org/apache/james/nntpserver/NNTPHandler.java,v
retrieving revision 1.11
diff -u -r1.11 NNTPHandler.java
--- src/java/org/apache/james/nntpserver/NNTPHandler.java	18 Jan 2002 02:48:36 -0000	1.11
+++ src/java/org/apache/james/nntpserver/NNTPHandler.java	30 Apr 2002 07:51:12 -0000
@@ -8,12 +8,8 @@
 package org.apache.james.nntpserver;
 
 import org.apache.avalon.cornerstone.services.connection.ConnectionHandler;
-import org.apache.avalon.cornerstone.services.scheduler.PeriodicTimeTrigger;
-import org.apache.avalon.cornerstone.services.scheduler.Target;
-import org.apache.avalon.cornerstone.services.scheduler.TimeScheduler;
 import org.apache.avalon.framework.component.ComponentException;
 import org.apache.avalon.framework.component.ComponentManager;
-import org.apache.avalon.framework.component.Composable;
 import org.apache.avalon.framework.configuration.Configurable;
 import org.apache.avalon.framework.logger.Logger;
 import org.apache.james.BaseConnectionHandler;
@@ -43,10 +39,7 @@
  * @author Harmeet <hbedi@apache.org>
  */
 public class NNTPHandler extends BaseConnectionHandler
-    implements ConnectionHandler, Composable, Configurable, Target {
-
-    // timeout controllers
-    private TimeScheduler scheduler;
+    implements ConnectionHandler, Configurable {
 
     // communciation.
     private Socket socket;
@@ -66,11 +59,11 @@
     public void compose( final ComponentManager componentManager )
         throws ComponentException
     {
+        super.compose( componentManager );
+
         //System.out.println(getClass().getName()+": compose - "+authRequired);
         auth = (AuthService)componentManager.
             lookup( "org.apache.james.nntpserver.AuthService" );
-        scheduler = (TimeScheduler)componentManager.
-            lookup( "org.apache.avalon.cornerstone.services.scheduler.TimeScheduler" );
         repo = (NNTPRepository)componentManager
             .lookup("org.apache.james.nntpserver.repository.NNTPRepository");
     }
@@ -105,8 +98,7 @@
         }
 
         try {
-            final PeriodicTimeTrigger trigger = new PeriodicTimeTrigger( timeout, -1 );
-            scheduler.addTrigger( this.toString(), trigger, this );
+            addTimeoutTimer();
 
             // section 7.1
             if ( repo.isReadOnly() )
@@ -115,12 +107,16 @@
                 writer.println("200 "+helloName+" NNTP Service Ready, posting permitted");
 
             while (parseCommand(reader.readLine()))
-                scheduler.resetTrigger(this.toString());
+            {
+                resetTimeoutTimer();
+            }
 
             reader.close();
             writer.close();
             socket.close();
-            scheduler.removeTrigger(this.toString());
+
+            removeTimeoutTimer();
+
             logger.info("Connection closed");
         } catch (Exception e) {
             doQUIT();
Index: src/java/org/apache/james/pop3server/POP3Handler.java
===================================================================
RCS file: /home/cvs/jakarta-james/src/java/org/apache/james/pop3server/POP3Handler.java,v
retrieving revision 1.6
diff -u -r1.6 POP3Handler.java
--- src/java/org/apache/james/pop3server/POP3Handler.java	27 Feb 2002 04:47:22 -0000	1.6
+++ src/java/org/apache/james/pop3server/POP3Handler.java	30 Apr 2002 07:51:13 -0000
@@ -8,13 +8,9 @@
 package org.apache.james.pop3server;
 
 import org.apache.avalon.cornerstone.services.connection.ConnectionHandler;
-import org.apache.avalon.cornerstone.services.scheduler.PeriodicTimeTrigger;
-import org.apache.avalon.cornerstone.services.scheduler.Target;
-import org.apache.avalon.cornerstone.services.scheduler.TimeScheduler;
 import org.apache.avalon.excalibur.collections.ListUtils;
 import org.apache.avalon.framework.component.ComponentException;
 import org.apache.avalon.framework.component.ComponentManager;
-import org.apache.avalon.framework.component.Composable;
 import org.apache.avalon.framework.configuration.Configurable;
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.ConfigurationException;
@@ -41,7 +37,7 @@
  */
 public class POP3Handler
     extends BaseConnectionHandler
-    implements ConnectionHandler, Composable, Configurable, Target {
+    implements ConnectionHandler, Configurable {
 
     private String softwaretype        = "JAMES POP3 Server " + Constants.SOFTWARE_VERSION;
 
@@ -49,7 +45,6 @@
     private MailServer mailServer;
     private MailRepository userInbox;
     private UsersRepository users;
-    private TimeScheduler scheduler;
 
     private Socket socket;
     private BufferedReader in;
@@ -81,13 +76,13 @@
 
     public void compose( final ComponentManager componentManager )
         throws ComponentException {
+        super.compose( componentManager );
+
         mailServer = (MailServer)componentManager.
             lookup( "org.apache.james.services.MailServer" );
         UsersStore usersStore = (UsersStore)componentManager.
             lookup( "org.apache.james.services.UsersStore" );
         users = usersStore.getRepository("LocalUsers");
-        scheduler = (TimeScheduler)componentManager.
-            lookup( "org.apache.avalon.cornerstone.services.scheduler.TimeScheduler" );
     }
 
     /**
@@ -116,17 +111,19 @@
         getLogger().info( "Connection from " + remoteHost + " (" + remoteIP + ")" );
 
         try {
-            final PeriodicTimeTrigger trigger = new PeriodicTimeTrigger( timeout, -1 );
-            scheduler.addTrigger( this.toString(), trigger, this );
+            addTimeoutTimer();
+
             state = AUTHENTICATION_READY;
             user = "unknown";
             out.println( OK_RESPONSE + " " + this.helloName +
                          " POP3 server (" + this.softwaretype + ") ready " );
             while (parseCommand(in.readLine())) {
-                scheduler.resetTrigger(this.toString());
+                resetTimeoutTimer();
             }
             socket.close();
-            scheduler.removeTrigger(this.toString());
+
+            removeTimeoutTimer();
+
             getLogger().info("Connection closed");
 
         } catch (Exception e) {
Index: src/java/org/apache/james/remotemanager/RemoteManagerHandler.java
===================================================================
RCS file: /home/cvs/jakarta-james/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java,v
retrieving revision 1.10
diff -u -r1.10 RemoteManagerHandler.java
--- src/java/org/apache/james/remotemanager/RemoteManagerHandler.java	17 Apr 2002 04:23:36 -0000	1.10
+++ src/java/org/apache/james/remotemanager/RemoteManagerHandler.java	30 Apr 2002 07:51:14 -0000
@@ -8,9 +8,6 @@
 package org.apache.james.remotemanager;
 
 import org.apache.avalon.cornerstone.services.connection.ConnectionHandler;
-import org.apache.avalon.cornerstone.services.scheduler.PeriodicTimeTrigger;
-import org.apache.avalon.cornerstone.services.scheduler.Target;
-import org.apache.avalon.cornerstone.services.scheduler.TimeScheduler;
 import org.apache.avalon.framework.component.ComponentException;
 import org.apache.avalon.framework.component.ComponentManager;
 import org.apache.avalon.framework.component.Composable;
@@ -50,12 +47,11 @@
  */
 public class RemoteManagerHandler
     extends BaseConnectionHandler
-    implements ConnectionHandler, Composable, Configurable, Target {
+    implements ConnectionHandler, Configurable {
 
     private UsersStore usersStore;
     private UsersRepository users;
     private boolean inLocalUsers = true;
-    private TimeScheduler scheduler;
     private MailServer mailServer;
 
     private BufferedReader in;
@@ -79,9 +75,8 @@
 
     public void compose( final ComponentManager componentManager )
         throws ComponentException {
+        super.compose( componentManager );
 
-        scheduler = (TimeScheduler)componentManager.
-            lookup( "org.apache.avalon.cornerstone.services.scheduler.TimeScheduler" );
         mailServer = (MailServer)componentManager.
             lookup( "org.apache.james.services.MailServer" );
         usersStore = (UsersStore)componentManager.
@@ -108,8 +103,8 @@
           }
         */
 
-        final PeriodicTimeTrigger trigger = new PeriodicTimeTrigger( timeout, -1 );
-        scheduler.addTrigger( this.toString(), trigger, this );
+        addTimeoutTimer();
+
         socket = connection;
         String remoteHost = socket.getInetAddress().getHostName();
         String remoteIP = socket.getInetAddress().getHostAddress();
@@ -123,7 +118,8 @@
             String login = null;
             String password = null;
             do {
-                scheduler.resetTrigger(this.toString());
+                resetTimeoutTimer();
+
                 if (login != null) {
                     final String message = "Login failed for " + login;
                     out.println( message );
@@ -135,14 +131,14 @@
                 password = in.readLine().trim();
             } while (!password.equals(admaccount.get(login)) || password.length() == 0);
 
-            scheduler.resetTrigger(this.toString());
+            resetTimeoutTimer();
 
             out.println( "Welcome " + login + ". HELP for a list of commands" );
             getLogger().info("Login for " + login + " succesful");
 
             try {
                 while (parseCommand(in.readLine())) {
-                    scheduler.resetTrigger(this.toString());
+                    resetTimeoutTimer();
                 }
             } catch (IOException ioe) {
                 //We can cleanly ignore this as it's probably a socket timeout
@@ -160,7 +156,7 @@
                                " (" + remoteIP + ")");
         }
 
-        scheduler.removeTrigger(this.toString());
+        removeTimeoutTimer();
     }
 
     public void targetTriggered( final String triggerName ) {
Index: src/java/org/apache/james/smtpserver/SMTPHandler.java
===================================================================
RCS file: /home/cvs/jakarta-james/src/java/org/apache/james/smtpserver/SMTPHandler.java,v
retrieving revision 1.17
diff -u -r1.17 SMTPHandler.java
--- src/java/org/apache/james/smtpserver/SMTPHandler.java	17 Apr 2002 03:19:32 -0000	1.17
+++ src/java/org/apache/james/smtpserver/SMTPHandler.java	30 Apr 2002 07:51:14 -0000
@@ -8,12 +8,8 @@
 package org.apache.james.smtpserver;
 
 import org.apache.avalon.cornerstone.services.connection.ConnectionHandler;
-import org.apache.avalon.cornerstone.services.scheduler.PeriodicTimeTrigger;
-import org.apache.avalon.cornerstone.services.scheduler.Target;
-import org.apache.avalon.cornerstone.services.scheduler.TimeScheduler;
 import org.apache.avalon.framework.component.ComponentException;
 import org.apache.avalon.framework.component.ComponentManager;
-import org.apache.avalon.framework.component.Composable;
 import org.apache.avalon.framework.configuration.Configurable;
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.ConfigurationException;
@@ -49,7 +45,7 @@
  */
 public class SMTPHandler
     extends BaseConnectionHandler
-    implements ConnectionHandler, Composable, Configurable, Target {
+    implements ConnectionHandler, Configurable {
 
     public final static String SERVER_NAME = "SERVER_NAME";
     public final static String SERVER_TYPE = "SERVER_TYPE";
@@ -78,7 +74,6 @@
     private boolean authRequired = false;
     private boolean verifyIdentity = false;
 
-    private TimeScheduler scheduler;
     private UsersRepository users;
     private MailServer mailServer;
 
@@ -109,10 +104,10 @@
 
     public void compose( final ComponentManager componentManager )
         throws ComponentException {
+        super.compose( componentManager );
+
         mailServer = (MailServer)componentManager.lookup(
                                  "org.apache.james.services.MailServer");
-        scheduler = (TimeScheduler)componentManager.lookup(
-            "org.apache.avalon.cornerstone.services.scheduler.TimeScheduler");
         UsersStore usersStore = (UsersStore)componentManager.lookup(
             "org.apache.james.services.UsersStore" );
         users = usersStore.getRepository("LocalUsers");
@@ -153,18 +148,18 @@
             // Initially greet the connector
             // Format is:  Sat,  24 Jan 1998 13:16:09 -0500
 
-            final PeriodicTimeTrigger trigger
-                  = new PeriodicTimeTrigger( timeout, -1 );
-            scheduler.addTrigger( this.toString(), trigger, this );
+            addTimeoutTimer();
+
             out.println("220 " + this.helloName + " SMTP Server ("
                         + softwaretype + ") ready "
                         + RFC822DateFormat.toString(new Date()));
 
             while  (parseCommand(in.readLine())) {
-                scheduler.resetTrigger(this.toString());
+                resetTimeoutTimer();
             }
             socket.close();
-            scheduler.removeTrigger(this.toString());
+
+            removeTimeoutTimer();
         } catch (SocketException se) {
             getLogger().debug("Socket to " + remoteHost
                               + " closed remotely.", se );

