You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commons-dev@ws.apache.org by as...@apache.org on 2009/03/27 12:48:47 UTC

svn commit: r759111 - in /webservices/commons/trunk/modules/transport/modules: base/src/main/java/org/apache/axis2/transport/base/ mail/ mail/src/main/java/org/apache/axis2/transport/mail/

Author: asankha
Date: Fri Mar 27 11:48:46 2009
New Revision: 759111

URL: http://svn.apache.org/viewvc?rev=759111&view=rev
Log:
Fix WSCOMMONS-454 (part of SYNAPSE-434 - for Mail transport)

Modified:
    webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractPollTableEntry.java
    webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractPollingTransportListener.java
    webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/BaseConstants.java
    webservices/commons/trunk/modules/transport/modules/mail/pom.xml
    webservices/commons/trunk/modules/transport/modules/mail/src/main/java/org/apache/axis2/transport/mail/MailConstants.java
    webservices/commons/trunk/modules/transport/modules/mail/src/main/java/org/apache/axis2/transport/mail/PollTableEntry.java

Modified: webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractPollTableEntry.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractPollTableEntry.java?rev=759111&r1=759110&r2=759111&view=diff
==============================================================================
--- webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractPollTableEntry.java (original)
+++ webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractPollTableEntry.java Fri Mar 27 11:48:46 2009
@@ -41,6 +41,8 @@
     private long pollInterval;
     /** state of the last poll */
     private int lastPollState;
+    /** can polling occur in parallel? */
+    private boolean concurrentPollingAllowed = false;
     /** The timer task that will trigger the next poll */
     TimerTask timerTask;
     /** Flag indicating whether polling has been canceled. */
@@ -87,4 +89,12 @@
     public void setLastPollState(int lastPollState) {
         this.lastPollState = lastPollState;
     }
+
+    public boolean isConcurrentPollingAllowed() {
+        return concurrentPollingAllowed;
+    }
+
+    public void setConcurrentPollingAllowed(boolean concurrentPollingAllowed) {
+        this.concurrentPollingAllowed = concurrentPollingAllowed;
+    }
 }

Modified: webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractPollingTransportListener.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractPollingTransportListener.java?rev=759111&r1=759110&r2=759111&view=diff
==============================================================================
--- webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractPollingTransportListener.java (original)
+++ webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractPollingTransportListener.java Fri Mar 27 11:48:46 2009
@@ -42,7 +42,7 @@
     @Override
     public void init(ConfigurationContext cfgCtx,
             TransportInDescription transportIn) throws AxisFault {
-        
+
         timer = new Timer("PollTimer");
         super.init(cfgCtx, transportIn);
         T entry = createPollTableEntry(transportIn);
@@ -96,9 +96,12 @@
                         } else {
                             poll(entry);
                         }
-                        synchronized (entry) {
-                            if (!entry.canceled) {
-                                schedulePoll(entry, pollInterval);
+
+                        if (!entry.isConcurrentPollingAllowed()) {
+                            synchronized (entry) {
+                                if (!entry.canceled) {
+                                    schedulePoll(entry, pollInterval);
+                                }
                             }
                         }
                     }
@@ -106,7 +109,11 @@
             }
         };
         entry.timerTask = timerTask;
-        timer.schedule(timerTask, pollInterval);
+        if (entry.isConcurrentPollingAllowed()) {
+            timer.scheduleAtFixedRate(timerTask, pollInterval, pollInterval);
+        } else {
+            timer.schedule(timerTask, pollInterval);
+        }
     }
 
     private void cancelPoll(T entry) {

Modified: webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/BaseConstants.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/BaseConstants.java?rev=759111&r1=759110&r2=759111&view=diff
==============================================================================
--- webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/BaseConstants.java (original)
+++ webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/BaseConstants.java Fri Mar 27 11:48:46 2009
@@ -91,6 +91,10 @@
      */
     public static final String TRANSPORT_POLL_INTERVAL = "transport.PollInterval";
     /**
+     * Could polling take place in parallel, i.e. starting at fixed intervals?
+     */
+    public static final String TRANSPORT_POLL_IN_PARALLEL = "transport.ConcurrentPollingAllowed";
+    /**
      * The default poll interval in milliseconds.
      */
     public static final int DEFAULT_POLL_INTERVAL = 5 * 60 * 1000; // 5 mins by default

Modified: webservices/commons/trunk/modules/transport/modules/mail/pom.xml
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/mail/pom.xml?rev=759111&r1=759110&r2=759111&view=diff
==============================================================================
--- webservices/commons/trunk/modules/transport/modules/mail/pom.xml (original)
+++ webservices/commons/trunk/modules/transport/modules/mail/pom.xml Fri Mar 27 11:48:46 2009
@@ -106,8 +106,22 @@
     </plugins>
   </build>
 
+  <repositories>
+    <repository>
+        <id>java.net</id>
+        <name>Java.net Maven 2 Repository</name>
+        <url>http://download.java.net/maven/2</url>
+    </repository>
+  </repositories>
+
   <dependencies>
     <dependency>
+      <groupId>javax.mail</groupId>
+      <artifactId>mail</artifactId>
+      <version>1.4.2</version>
+    </dependency>
+
+    <dependency>
       <groupId>org.apache.axis2</groupId>
       <artifactId>axis2-transport-base</artifactId>
       <version>${version}</version>

Modified: webservices/commons/trunk/modules/transport/modules/mail/src/main/java/org/apache/axis2/transport/mail/MailConstants.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/mail/src/main/java/org/apache/axis2/transport/mail/MailConstants.java?rev=759111&r1=759110&r2=759111&view=diff
==============================================================================
--- webservices/commons/trunk/modules/transport/modules/mail/src/main/java/org/apache/axis2/transport/mail/MailConstants.java (original)
+++ webservices/commons/trunk/modules/transport/modules/mail/src/main/java/org/apache/axis2/transport/mail/MailConstants.java Fri Mar 27 11:48:46 2009
@@ -39,6 +39,8 @@
     public static final String TRANSPORT_MAIL_MOVE_AFTER_PROCESS = "transport.mail.MoveAfterProcess";
     public static final String TRANSPORT_MAIL_MOVE_AFTER_FAILURE = "transport.mail.MoveAfterFailure";
 
+    public static final String TRANSPORT_MAIL_PROCESS_IN_PARALLEL = "transport.mail.ProcessInParallel";
+
     public static final String MAX_RETRY_COUNT   = "transport.mail.MaxRetryCount";
     public static final String RECONNECT_TIMEOUT = "transport.mail.ReconnectTimeout";
 

Modified: webservices/commons/trunk/modules/transport/modules/mail/src/main/java/org/apache/axis2/transport/mail/PollTableEntry.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/mail/src/main/java/org/apache/axis2/transport/mail/PollTableEntry.java?rev=759111&r1=759110&r2=759111&view=diff
==============================================================================
--- webservices/commons/trunk/modules/transport/modules/mail/src/main/java/org/apache/axis2/transport/mail/PollTableEntry.java (original)
+++ webservices/commons/trunk/modules/transport/modules/mail/src/main/java/org/apache/axis2/transport/mail/PollTableEntry.java Fri Mar 27 11:48:46 2009
@@ -22,6 +22,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.StringTokenizer;
+import java.util.Collections;
 
 import javax.mail.Session;
 import javax.mail.internet.AddressException;
@@ -76,6 +77,10 @@
     private String moveAfterProcess;
     /** folder to move the email after failure */
     private String moveAfterFailure;
+    /** Should mail be processed in parallel? e.g. with IMAP */
+    private boolean processingMailInParallel = false;
+    /** UIDs of messages currently being processed */
+    private List<String> uidList = Collections.synchronizedList(new ArrayList<String>());
 
     private int maxRetryCount;
     private long reconnectTimeout;
@@ -252,4 +257,24 @@
             return true;
         }
     }
+
+    public boolean isProcessingMailInParallel() {
+        return processingMailInParallel;
+    }
+
+    public void setProcessingMailInParallel(boolean processingMailInParallel) {
+        this.processingMailInParallel = processingMailInParallel;
+    }
+
+    public synchronized void processingUID(String uid) {
+        this.uidList.add(uid);
+    }
+
+    public synchronized boolean isProcessingUID(String uid) {
+        return this.uidList.contains(uid);
+    }
+
+    public synchronized void removeUID(String uid) {
+        this.uidList.remove(uid);
+    }
 }