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 2011/06/22 20:45:19 UTC

svn commit: r1138577 - in /james/protocols/trunk: ./ api/ api/src/main/java/org/apache/james/protocols/api/ smtp/src/main/java/org/apache/james/protocols/smtp/core/ smtp/src/main/java/org/apache/james/protocols/smtp/hook/

Author: norman
Date: Wed Jun 22 18:45:18 2011
New Revision: 1138577

URL: http://svn.apache.org/viewvc?rev=1138577&view=rev
Log:
Add lifecycle support via the LifecycleAwareProtocolHandler interface. Also add an interface to load ProtocolHandlers, inject resources and call lifecycle methods. See PROTOCOLS-24

Added:
    james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LifecycleAwareProtocolHandler.java
    james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ProtocolHandler.java
    james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ProtocolHandlerLoader.java
Modified:
    james/protocols/trunk/api/pom.xml
    james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/CommandHandler.java
    james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/CommandHandlerResultHandler.java
    james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ConnectHandler.java
    james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ConnectHandlerResultHandler.java
    james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/HandlersPackage.java
    james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LineHandler.java
    james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LineHandlerResultHandler.java
    james/protocols/trunk/pom.xml
    james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineFilter.java
    james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/hook/Hook.java
    james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HookResultHook.java

Modified: james/protocols/trunk/api/pom.xml
URL: http://svn.apache.org/viewvc/james/protocols/trunk/api/pom.xml?rev=1138577&r1=1138576&r2=1138577&view=diff
==============================================================================
--- james/protocols/trunk/api/pom.xml (original)
+++ james/protocols/trunk/api/pom.xml Wed Jun 22 18:45:18 2011
@@ -77,5 +77,9 @@
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
     </dependency>
+    <dependency>
+      <groupId>commons-configuration</groupId>
+      <artifactId>commons-configuration</artifactId>
+    </dependency>
   </dependencies>
 </project>
\ No newline at end of file

Modified: james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/CommandHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/CommandHandler.java?rev=1138577&r1=1138576&r2=1138577&view=diff
==============================================================================
--- james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/CommandHandler.java (original)
+++ james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/CommandHandler.java Wed Jun 22 18:45:18 2011
@@ -31,7 +31,7 @@ import java.util.Collection;
  * therefore the command handlers must store all the state information
  * in the Session object
  */
- public interface CommandHandler<Session extends ProtocolSession> {
+ public interface CommandHandler<Session extends ProtocolSession> extends ProtocolHandler{
     /**
      * Handle the command
     **/

Modified: james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/CommandHandlerResultHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/CommandHandlerResultHandler.java?rev=1138577&r1=1138576&r2=1138577&view=diff
==============================================================================
--- james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/CommandHandlerResultHandler.java (original)
+++ james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/CommandHandlerResultHandler.java Wed Jun 22 18:45:18 2011
@@ -19,7 +19,7 @@
 
 package org.apache.james.protocols.api;
 
-public interface CommandHandlerResultHandler<R extends Response, S extends ProtocolSession> {
+public interface CommandHandlerResultHandler<R extends Response, S extends ProtocolSession> extends ProtocolHandler{
 
     /**
      * Get called when a {@link Response} was returned from the {@link CommandHandler}

Modified: james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ConnectHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ConnectHandler.java?rev=1138577&r1=1138576&r2=1138577&view=diff
==============================================================================
--- james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ConnectHandler.java (original)
+++ james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ConnectHandler.java Wed Jun 22 18:45:18 2011
@@ -27,7 +27,7 @@ package org.apache.james.protocols.api;
  * therefore the handlers must store all the state information
  * in the Session object
  */
-public interface ConnectHandler<Session extends ProtocolSession> {
+public interface ConnectHandler<Session extends ProtocolSession> extends ProtocolHandler{
     /**
      * Handle connection and disconnect if true is returned
      * 

Modified: james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ConnectHandlerResultHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ConnectHandlerResultHandler.java?rev=1138577&r1=1138576&r2=1138577&view=diff
==============================================================================
--- james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ConnectHandlerResultHandler.java (original)
+++ james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ConnectHandlerResultHandler.java Wed Jun 22 18:45:18 2011
@@ -25,7 +25,7 @@ package org.apache.james.protocols.api;
  *
  * @param <S>
  */
-public interface ConnectHandlerResultHandler<S extends ProtocolSession> {
+public interface ConnectHandlerResultHandler<S extends ProtocolSession> extends ProtocolHandler{
     
     /**
      * Called after the {@link ConnectHandler} returned a result

Modified: james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/HandlersPackage.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/HandlersPackage.java?rev=1138577&r1=1138576&r2=1138577&view=diff
==============================================================================
--- james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/HandlersPackage.java (original)
+++ james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/HandlersPackage.java Wed Jun 22 18:45:18 2011
@@ -28,7 +28,7 @@ import java.util.List;
  * a single object.
  * This is used for the default set of CoreCommands.
  */
-public interface HandlersPackage {
+public interface HandlersPackage extends ProtocolHandler{
     
     /**
      * Return a List which contains a set of CommandHandlers

Added: james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LifecycleAwareProtocolHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LifecycleAwareProtocolHandler.java?rev=1138577&view=auto
==============================================================================
--- james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LifecycleAwareProtocolHandler.java (added)
+++ james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LifecycleAwareProtocolHandler.java Wed Jun 22 18:45:18 2011
@@ -0,0 +1,45 @@
+/****************************************************************
+ * 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.protocols.api;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationException;
+
+/**
+ * This interface allows to handle lifecycles for handlers and hooks
+ *
+ */
+public interface LifecycleAwareProtocolHandler extends ProtocolHandler{
+
+    
+    /**
+     * Init with the given {@link Configuration}
+     * 
+     * @param config
+     * @throws ConfigurationException
+     */
+    public void init(Configuration config) throws ConfigurationException;
+    
+    /**
+     * Destroy object
+     */
+    public void destroy();
+
+
+}

Modified: james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LineHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LineHandler.java?rev=1138577&r1=1138576&r2=1138577&view=diff
==============================================================================
--- james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LineHandler.java (original)
+++ james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LineHandler.java Wed Jun 22 18:45:18 2011
@@ -24,7 +24,7 @@ package org.apache.james.protocols.api;
  * 
  * Only one {@link LineHandler} will get called per line
  */
-public interface LineHandler<Session extends ProtocolSession> {
+public interface LineHandler<Session extends ProtocolSession> extends ProtocolHandler{
      
     /**
      * Processing the give line. The line includes the CRLF delimiter.

Modified: james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LineHandlerResultHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LineHandlerResultHandler.java?rev=1138577&r1=1138576&r2=1138577&view=diff
==============================================================================
--- james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LineHandlerResultHandler.java (original)
+++ james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LineHandlerResultHandler.java Wed Jun 22 18:45:18 2011
@@ -26,7 +26,7 @@ package org.apache.james.protocols.api;
  *
  * @param <S>
  */
-public interface LineHandlerResultHandler<S extends ProtocolSession> {
+public interface LineHandlerResultHandler<S extends ProtocolSession> extends ProtocolHandler {
 
     
     /**

Added: james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ProtocolHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ProtocolHandler.java?rev=1138577&view=auto
==============================================================================
--- james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ProtocolHandler.java (added)
+++ james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ProtocolHandler.java Wed Jun 22 18:45:18 2011
@@ -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.protocols.api;
+
+
+/**
+ * Just the base interface for all kind of "protocol" handlers.
+ * 
+ * Every of them should implement this interface
+ * 
+ */
+public interface ProtocolHandler {
+  
+}

Added: james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ProtocolHandlerLoader.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ProtocolHandlerLoader.java?rev=1138577&view=auto
==============================================================================
--- james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ProtocolHandlerLoader.java (added)
+++ james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ProtocolHandlerLoader.java Wed Jun 22 18:45:18 2011
@@ -0,0 +1,64 @@
+/****************************************************************
+ * 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.protocols.api;
+
+import org.apache.commons.configuration.Configuration;
+
+/**
+ * Implementations of this interface are responsible for loading instances
+ * of {@link ProtocolHandler}. This includes to inject all needed resources and 
+ * execute any lifecycle methods
+ * 
+ *
+ */
+public interface ProtocolHandlerLoader {
+
+    /**
+     * Load the {@link ProtocolHandler} and make sure all lifecycle methods are called and all
+     * needed services injected.
+     * 
+     * The class to load is identified by the class attribute in the config
+     * 
+     * @param config
+     * @return handler
+     * @throws LoadingException
+     */
+    public ProtocolHandler load(Configuration config) throws LoadingException;
+    
+    
+    /**
+     * Exception which will get thrown if the loading of a {@link ProtocolHandler} failed 
+     * 
+     *
+     */
+    public class LoadingException extends Exception {
+        /**
+         * 
+         */
+        private static final long serialVersionUID = 1710169767810301710L;
+
+        public LoadingException(String msg, Throwable t) {
+            super(msg, t);
+        }
+        
+        public LoadingException(String msg) {
+            super(msg);
+        }
+    }
+}

Modified: james/protocols/trunk/pom.xml
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pom.xml?rev=1138577&r1=1138576&r2=1138577&view=diff
==============================================================================
--- james/protocols/trunk/pom.xml (original)
+++ james/protocols/trunk/pom.xml Wed Jun 22 18:45:18 2011
@@ -362,6 +362,22 @@
         <artifactId>slf4j-api</artifactId>
         <version>1.6.1</version>
       </dependency>
+      
+      <dependency>
+        <groupId>commons-configuration</groupId>
+        <artifactId>commons-configuration</artifactId>
+        <version>1.6</version>
+        <exclusions>
+          <exclusion>
+            <artifactId>commons-digester</artifactId>
+            <groupId>commons-digester</groupId>
+          </exclusion>
+          <exclusion>
+            <artifactId>commons-beanutils-core</artifactId>
+            <groupId>commons-beanutils</groupId>
+          </exclusion>
+        </exclusions>
+      </dependency>
       <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-simple</artifactId>

Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineFilter.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineFilter.java?rev=1138577&r1=1138576&r2=1138577&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineFilter.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineFilter.java Wed Jun 22 18:45:18 2011
@@ -22,13 +22,14 @@
 package org.apache.james.protocols.smtp.core;
 
 import org.apache.james.protocols.api.LineHandler;
+import org.apache.james.protocols.api.ProtocolHandler;
 import org.apache.james.protocols.smtp.SMTPSession;
 
 /**
  * DataLineFilter are used to check the Data stream while the message is
  * being received.
  */
-public interface DataLineFilter {
+public interface DataLineFilter extends ProtocolHandler{
     
     /**
      * Handle line processing

Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/hook/Hook.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/hook/Hook.java?rev=1138577&r1=1138576&r2=1138577&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/hook/Hook.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/hook/Hook.java Wed Jun 22 18:45:18 2011
@@ -18,11 +18,13 @@
  ****************************************************************/
 package org.apache.james.protocols.smtp.hook;
 
+import org.apache.james.protocols.api.ProtocolHandler;
+
 /**
  * Just and marker interface for the different Hooks
  * 
  *
  */
-public interface Hook {
+public interface Hook extends ProtocolHandler{
 
 }

Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HookResultHook.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HookResultHook.java?rev=1138577&r1=1138576&r2=1138577&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HookResultHook.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HookResultHook.java Wed Jun 22 18:45:18 2011
@@ -22,7 +22,7 @@ package org.apache.james.protocols.smtp.
 
 import org.apache.james.protocols.smtp.SMTPSession;
 
-public interface HookResultHook {
+public interface HookResultHook extends Hook{
     
     HookResult onHookResult(SMTPSession session,HookResult result, long executionTime, Hook object);
 }



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