You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by lh...@apache.org on 2008/09/10 12:48:07 UTC

svn commit: r693780 - in /servicemix/components/bindings/servicemix-mail/trunk/src: main/java/org/apache/servicemix/mail/ main/java/org/apache/servicemix/mail/marshaler/ test/java/org/apache/servicemix/mail/

Author: lhein
Date: Wed Sep 10 03:48:06 2008
New Revision: 693780

URL: http://svn.apache.org/viewvc?rev=693780&view=rev
Log:
applied patch for the following issues:
- SM-1568
- SM-1569
thanks to Ivan Pryvalov for the help

Modified:
    servicemix/components/bindings/servicemix-mail/trunk/src/main/java/org/apache/servicemix/mail/MailSenderEndpoint.java
    servicemix/components/bindings/servicemix-mail/trunk/src/main/java/org/apache/servicemix/mail/marshaler/AbstractMailMarshaler.java
    servicemix/components/bindings/servicemix-mail/trunk/src/main/java/org/apache/servicemix/mail/marshaler/DefaultMailMarshaler.java
    servicemix/components/bindings/servicemix-mail/trunk/src/test/java/org/apache/servicemix/mail/DefaultMailMarshalerTest.java

Modified: servicemix/components/bindings/servicemix-mail/trunk/src/main/java/org/apache/servicemix/mail/MailSenderEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-mail/trunk/src/main/java/org/apache/servicemix/mail/MailSenderEndpoint.java?rev=693780&r1=693779&r2=693780&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-mail/trunk/src/main/java/org/apache/servicemix/mail/MailSenderEndpoint.java (original)
+++ servicemix/components/bindings/servicemix-mail/trunk/src/main/java/org/apache/servicemix/mail/MailSenderEndpoint.java Wed Sep 10 03:48:06 2008
@@ -101,6 +101,14 @@
                 // debug the session
                 session.setDebug(this.debugMode);
 
+                // get the transport from session
+                Transport transport = session.getTransport(config.getProtocol());
+
+                // Connect only once here
+                // Transport.send() disconnects after each send
+                // Usually, no username and password is required for SMTP
+                transport.connect(config.getHost(), config.getPort(), config.getUsername(), config.getPassword());
+                
                 // Define message
                 MimeMessage msg = new MimeMessage(session);
 
@@ -108,13 +116,16 @@
                 this.marshaler.convertJBIToMail(msg, exchange, in, this.sender, this.receiver);
 
                 // Send message
-                Transport.send(msg);
+                transport.sendMessage(msg, msg.getAllRecipients());
+                
+                // close transport
+                transport.close();
             } catch (MessagingException mex) {
                 logger.error("Error sending mail...", mex);
                 throw mex;
             } finally {
                 // delete all temporary allocated resources
-                this.marshaler.cleanUpResources();
+                this.marshaler.cleanUpResources(exchange.getExchangeId());
             }
         }
     }
@@ -150,6 +161,14 @@
                 // debug the session
                 session.setDebug(this.debugMode);
 
+                // get the transport from session
+                Transport transport = session.getTransport(config.getProtocol());
+
+                // Connect only once here
+                // Transport.send() disconnects after each send
+                // Usually, no username and password is required for SMTP
+                transport.connect(config.getHost(), config.getPort(), config.getUsername(), config.getPassword());
+                                
                 // Define message
                 MimeMessage msg = new MimeMessage(session);
 
@@ -157,7 +176,10 @@
                 this.marshaler.convertJBIToMail(msg, exchange, in, this.sender, this.receiver);
 
                 // Send message
-                Transport.send(msg);
+                transport.sendMessage(msg, msg.getAllRecipients());
+                
+                // close transport
+                transport.close();
 
                 // quit the exchange
                 out.setContent(new StringSource("<ack />"));
@@ -166,7 +188,7 @@
                 throw mex;
             } finally {
                 // delete all temporary allocated resources
-                this.marshaler.cleanUpResources();
+                this.marshaler.cleanUpResources(exchange.getExchangeId());
             }
         }
     }

Modified: servicemix/components/bindings/servicemix-mail/trunk/src/main/java/org/apache/servicemix/mail/marshaler/AbstractMailMarshaler.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-mail/trunk/src/main/java/org/apache/servicemix/mail/marshaler/AbstractMailMarshaler.java?rev=693780&r1=693779&r2=693780&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-mail/trunk/src/main/java/org/apache/servicemix/mail/marshaler/AbstractMailMarshaler.java (original)
+++ servicemix/components/bindings/servicemix-mail/trunk/src/main/java/org/apache/servicemix/mail/marshaler/AbstractMailMarshaler.java Wed Sep 10 03:48:06 2008
@@ -18,6 +18,7 @@
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -165,7 +166,7 @@
      */
     public static final String DUMMY_CONTENT = "no content";
     
-    private List<File> temporaryFiles = new ArrayList<File>();
+    private Map< String, List<File> > temporaryFilesMap = Collections.synchronizedMap(new HashMap<String, List<File> >());
     
     /**
      * This method is used to convert a mime mail message received via an 
@@ -234,21 +235,31 @@
     }
     
     /**
-     * adds a temporary file resource to the list
+     * adds a temporary file resource to the list of to be cleaned up resources
      * 
-     * @param tmpFile   the temporary file to delete after sending mail
+     * @param id        the id of the message exchange
+     * @param tmpFile   the temp resource
      */
-    protected final void addTemporaryResource(File tmpFile) {
-        this.temporaryFiles.add(tmpFile);
-    }    
-    
+    protected final void addTemporaryResource(String id, File tmpFile) { 
+        if (!this.temporaryFilesMap.containsKey(id)) {
+            this.temporaryFilesMap.put(id, new ArrayList<File>()); 
+        }
+        this.temporaryFilesMap.get(id).add(tmpFile); 
+    }
+
     /**
-     * deletes all temporary resources
+     * deletes all temporary resources of a given exchange id
+     * 
+     * @param id        the exchange id
      */
-    public final void cleanUpResources() {
-        for (File f : this.temporaryFiles) {
-            f.delete();
+    public final void cleanUpResources(String id) {
+        List<File> list = this.temporaryFilesMap.get(id);
+        if (list != null) {
+            for (File f : list) { 
+                f.delete(); 
+            }
+            list.clear();
+            this.temporaryFilesMap.remove(id);
         }
-        this.temporaryFiles.clear();
     }
 }

Modified: servicemix/components/bindings/servicemix-mail/trunk/src/main/java/org/apache/servicemix/mail/marshaler/DefaultMailMarshaler.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-mail/trunk/src/main/java/org/apache/servicemix/mail/marshaler/DefaultMailMarshaler.java?rev=693780&r1=693779&r2=693780&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-mail/trunk/src/main/java/org/apache/servicemix/mail/marshaler/DefaultMailMarshaler.java (original)
+++ servicemix/components/bindings/servicemix-mail/trunk/src/main/java/org/apache/servicemix/mail/marshaler/DefaultMailMarshaler.java Wed Sep 10 03:48:06 2008
@@ -37,11 +37,11 @@
 import javax.mail.Message;
 import javax.mail.Multipart;
 import javax.mail.Part;
-import javax.mail.util.ByteArrayDataSource;
 import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeBodyPart;
 import javax.mail.internet.MimeMessage;
 import javax.mail.internet.MimeMultipart;
+import javax.mail.util.ByteArrayDataSource;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -143,7 +143,7 @@
                     log.debug("Saved temp file: " + f.getName() + " with length: " + f.length());
                     
                     // add the file to the temporary resources list
-                    addTemporaryResource(f);                    
+                    addTemporaryResource(exchange.getExchangeId(), f);                    
                     // Create another body part
                     messageBodyPart = new MimeBodyPart();
                     // Set the data handler to the attachment

Modified: servicemix/components/bindings/servicemix-mail/trunk/src/test/java/org/apache/servicemix/mail/DefaultMailMarshalerTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-mail/trunk/src/test/java/org/apache/servicemix/mail/DefaultMailMarshalerTest.java?rev=693780&r1=693779&r2=693780&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-mail/trunk/src/test/java/org/apache/servicemix/mail/DefaultMailMarshalerTest.java (original)
+++ servicemix/components/bindings/servicemix-mail/trunk/src/test/java/org/apache/servicemix/mail/DefaultMailMarshalerTest.java Wed Sep 10 03:48:06 2008
@@ -109,7 +109,7 @@
         MimeMessage mail = prepareTextMail(false);
 
         // prepare the jbi objects
-        InOnly exchange = new InOnlyImpl();
+        InOnly exchange = new InOnlyImpl("id");
         NormalizedMessage nmsg = exchange.createMessage();
 
         // do conversion
@@ -132,7 +132,7 @@
         MimeMessage mail = prepareHTMLMail(false);
 
         // prepare the jbi objects
-        InOnly exchange = new InOnlyImpl();
+        InOnly exchange = new InOnlyImpl("id");
         NormalizedMessage nmsg = exchange.createMessage();
 
         // do conversion
@@ -155,7 +155,7 @@
         MimeMessage mail = prepareBothMail(false);
 
         // prepare the jbi objects
-        InOnly exchange = new InOnlyImpl();
+        InOnly exchange = new InOnlyImpl("id");
         NormalizedMessage nmsg = exchange.createMessage();
 
         // do conversion
@@ -180,7 +180,7 @@
         MimeMessage mail = prepareTextMail(true);
 
         // prepare the jbi objects
-        InOnly exchange = new InOnlyImpl();
+        InOnly exchange = new InOnlyImpl("id");
         NormalizedMessage nmsg = exchange.createMessage();
 
         // do conversion
@@ -216,7 +216,7 @@
         MimeMessage mail = prepareHTMLMail(true);
 
         // prepare the jbi objects
-        InOnly exchange = new InOnlyImpl();
+        InOnly exchange = new InOnlyImpl("id");
         NormalizedMessage nmsg = exchange.createMessage();
 
         // do conversion
@@ -253,7 +253,7 @@
         MimeMessage mail = prepareBothMail(true);
 
         // prepare the jbi objects
-        InOnly exchange = new InOnlyImpl();
+        InOnly exchange = new InOnlyImpl("id");
         NormalizedMessage nmsg = exchange.createMessage();
 
         // do conversion
@@ -287,7 +287,7 @@
      */
     public void testJbiToPlainText() throws Exception {
         MimeMessage mail = new MimeMessage(session);
-        InOnly exchange = new InOnlyImpl();
+        InOnly exchange = new InOnlyImpl("id");
         NormalizedMessage nmsg = exchange.createMessage();
 
         // prepare headers
@@ -325,7 +325,7 @@
      */
     public void testJbiToHTML() throws Exception {
         MimeMessage mail = new MimeMessage(session);
-        InOnly exchange = new InOnlyImpl();
+        InOnly exchange = new InOnlyImpl("id");
         NormalizedMessage nmsg = exchange.createMessage();
 
         // prepare headers
@@ -364,7 +364,7 @@
      */
     public void testJbiToBoth() throws Exception {
         MimeMessage mail = new MimeMessage(session);
-        InOnly exchange = new InOnlyImpl();
+        InOnly exchange = new InOnlyImpl("id");
         NormalizedMessage nmsg = exchange.createMessage();
 
         // prepare headers
@@ -407,7 +407,7 @@
      */
     public void testRawTextToMail() throws Exception {
         MimeMessage mail = new MimeMessage(session);
-        InOnly exchange = new InOnlyImpl();
+        InOnly exchange = new InOnlyImpl("id");
         NormalizedMessage nmsg = exchange.createMessage();
 
         // prepare headers
@@ -445,7 +445,7 @@
      */
     public void testRawHTMLToMail() throws Exception {
         MimeMessage mail = new MimeMessage(session);
-        InOnly exchange = new InOnlyImpl();
+        InOnly exchange = new InOnlyImpl("id");
         NormalizedMessage nmsg = exchange.createMessage();
 
         // prepare headers
@@ -483,7 +483,7 @@
      */
     public void testJbiWithAttachmentsToPlainText() throws Exception {
         MimeMessage mail = new MimeMessage(session);
-        InOnly exchange = new InOnlyImpl();
+        InOnly exchange = new InOnlyImpl("id");
         NormalizedMessage nmsg = exchange.createMessage();
 
         // prepare headers
@@ -533,7 +533,7 @@
      */
     public void testJbiWithAttachmentsToHTML() throws Exception {
         MimeMessage mail = new MimeMessage(session);
-        InOnly exchange = new InOnlyImpl();
+        InOnly exchange = new InOnlyImpl("id");
         NormalizedMessage nmsg = exchange.createMessage();
 
         // prepare headers
@@ -583,7 +583,7 @@
      */
     public void testJbiWithAttachmentsToBoth() throws Exception {
         MimeMessage mail = new MimeMessage(session);
-        InOnly exchange = new InOnlyImpl();
+        InOnly exchange = new InOnlyImpl("id");
         NormalizedMessage nmsg = exchange.createMessage();
 
         // prepare headers
@@ -637,7 +637,7 @@
      */
     public void testRawTextWithAttachmentsToMail() throws Exception {
         MimeMessage mail = new MimeMessage(session);
-        InOnly exchange = new InOnlyImpl();
+        InOnly exchange = new InOnlyImpl("id");
         NormalizedMessage nmsg = exchange.createMessage();
 
         // prepare headers
@@ -687,7 +687,7 @@
      */
     public void testRawHTMLWithAttachmentsToMail() throws Exception {
         MimeMessage mail = new MimeMessage(session);
-        InOnly exchange = new InOnlyImpl();
+        InOnly exchange = new InOnlyImpl("id");
         NormalizedMessage nmsg = exchange.createMessage();
 
         // prepare headers