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 ba...@apache.org on 2006/07/10 17:24:49 UTC

svn commit: r420564 - in /james/server/trunk/src: java/org/apache/james/core/MimeMessageWrapper.java test/org/apache/james/core/MimeMessageWrapperTest.java test/org/apache/james/mailrepository/AvalonMailRepositoryTest.java

Author: bago
Date: Mon Jul 10 08:24:48 2006
New Revision: 420564

URL: http://svn.apache.org/viewvc?rev=420564&view=rev
Log:
Further mimemessage handling optimisation conservative changes (not a code revert, but a logical revert) (JAMES-559)
It seems to work even without this change because of a weird behaviour of MimeMessage.saveChanges in Sun Javamail.

Modified:
    james/server/trunk/src/java/org/apache/james/core/MimeMessageWrapper.java
    james/server/trunk/src/test/org/apache/james/core/MimeMessageWrapperTest.java
    james/server/trunk/src/test/org/apache/james/mailrepository/AvalonMailRepositoryTest.java

Modified: james/server/trunk/src/java/org/apache/james/core/MimeMessageWrapper.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/core/MimeMessageWrapper.java?rev=420564&r1=420563&r2=420564&view=diff
==============================================================================
--- james/server/trunk/src/java/org/apache/james/core/MimeMessageWrapper.java (original)
+++ james/server/trunk/src/java/org/apache/james/core/MimeMessageWrapper.java Mon Jul 10 08:24:48 2006
@@ -410,10 +410,16 @@
 
 
     private synchronized void checkModifyHeaders() throws MessagingException {
+        // Disable only-header loading optimizations for JAMES-559
+        if (!messageParsed) {
+            loadMessage();
+        }
+        // End JAMES-559
         if (headers == null) {
             loadHeaders();
         }
         modified = true;
+        saved = false;
         headersModified = true;
     }
 
@@ -446,6 +452,7 @@
      */
     public synchronized void setDataHandler(DataHandler arg0) throws MessagingException {
         modified = true;
+        saved = false;
         bodyModified = true;
         super.setDataHandler(arg0);
     }

Modified: james/server/trunk/src/test/org/apache/james/core/MimeMessageWrapperTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/core/MimeMessageWrapperTest.java?rev=420564&r1=420563&r2=420564&view=diff
==============================================================================
--- james/server/trunk/src/test/org/apache/james/core/MimeMessageWrapperTest.java (original)
+++ james/server/trunk/src/test/org/apache/james/core/MimeMessageWrapperTest.java Mon Jul 10 08:24:48 2006
@@ -125,6 +125,7 @@
         assertFalse(mw.isModified());
     }
 
+    /** this is commented out due optimisation reverts (JAMES-559) 
     public void testDeferredMessageLoadingWhileWriting() throws MessagingException, IOException {
         mw.setMessageLoadable(false);
         assertEquals("foo",mw.getSubject());
@@ -136,6 +137,7 @@
         mw.setMessageLoadable(true);
         
     }
+    */
 
     public void testDeferredHeaderLoading() throws MessagingException, IOException {
         mw.setHeadersLoadable(false);

Modified: james/server/trunk/src/test/org/apache/james/mailrepository/AvalonMailRepositoryTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/mailrepository/AvalonMailRepositoryTest.java?rev=420564&r1=420563&r2=420564&view=diff
==============================================================================
--- james/server/trunk/src/test/org/apache/james/mailrepository/AvalonMailRepositoryTest.java (original)
+++ james/server/trunk/src/test/org/apache/james/mailrepository/AvalonMailRepositoryTest.java Mon Jul 10 08:24:48 2006
@@ -108,5 +108,69 @@
         mr.remove("mail1");
 
     }
+
+
+    /**
+     * This test has been written as a proof to:
+     * http://issues.apache.org/jira/browse/JAMES-559
+     */
+    public void testJames559WithoutSaveChanges() throws Exception {
+        AvalonMailRepository mr = new AvalonMailRepository();
+        MockStore mockStore = new MockStore();
+        File_Persistent_Stream_Repository file_Persistent_Stream_Repository = new File_Persistent_Stream_Repository();
+        MockContext mockContext = new MockContext(new File("."));
+        file_Persistent_Stream_Repository.contextualize(mockContext);
+        file_Persistent_Stream_Repository.enableLogging(new MockLogger());
+        DefaultConfiguration defaultConfiguration2 = new DefaultConfiguration("conf");
+        defaultConfiguration2.setAttribute("destinationURL", "file://var/mr");
+        file_Persistent_Stream_Repository.configure(defaultConfiguration2);
+        file_Persistent_Stream_Repository.initialize();
+        mockStore.add("STREAM.mr", file_Persistent_Stream_Repository);
+        File_Persistent_Object_Repository file_Persistent_Object_Repository = new File_Persistent_Object_Repository();
+        file_Persistent_Object_Repository.contextualize(mockContext);
+        file_Persistent_Object_Repository.enableLogging(new MockLogger());
+        DefaultConfiguration defaultConfiguration22 = new DefaultConfiguration("conf");
+        defaultConfiguration22.setAttribute("destinationURL", "file://var/mr");
+        file_Persistent_Object_Repository.configure(defaultConfiguration22);
+        file_Persistent_Object_Repository.initialize();
+        mockStore.add("OBJECT.mr", file_Persistent_Object_Repository);
+        mr.setStore(mockStore);
+
+        mr.enableLogging(new MockLogger());
+        DefaultConfiguration defaultConfiguration = new DefaultConfiguration("ReposConf");
+        defaultConfiguration.setAttribute("destinationURL","file://var/mr");
+        defaultConfiguration.setAttribute("type","MAIL");
+        mr.configure(defaultConfiguration);
+        mr.initialize();
+
+        MimeMessageInputStreamSource mmis = null;
+        try {
+            mmis = new MimeMessageInputStreamSource("test", new SharedByteArrayInputStream((content+sep+body).getBytes()));
+        } catch (MessagingException e) {
+        }
+        MimeMessage mimeMessage = new MimeMessageCopyOnWriteProxy(mmis);
+        Collection recipients = new ArrayList();
+        recipients.add(new MailAddress("rec1","domain.com"));
+        recipients.add(new MailAddress("rec2","domain.com"));
+        MailImpl m = new MailImpl("mail1",new MailAddress("sender","domain.com"),recipients,mimeMessage);
+        mr.store(m);
+        
+        Mail m2 = mr.retrieve("mail1");
+        m2.getMessage().setHeader("X-Header", "foobar");
+        
+        mr.store(m2);
+        // ALWAYS remember to dispose mails!
+        ContainerUtil.dispose(m2);
+        
+        m2 = mr.retrieve("mail1");
+        assertEquals(m.getMessage().getContent().toString(),m2.getMessage().getContent().toString());
+        
+        m.dispose();
+        ContainerUtil.dispose(m2);
+        
+        mr.remove("mail1");
+
+    }
+
 }
 



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