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 2010/10/30 13:10:46 UTC
svn commit: r1029021 - in /james/server/trunk:
core-library/src/main/java/org/apache/james/core/
mail-file/src/main/java/org/apache/james/mailrepository/file/
mail-jdbc/src/main/java/org/apache/james/mailrepository/jdbc/
Author: norman
Date: Sat Oct 30 11:10:46 2010
New Revision: 1029021
URL: http://svn.apache.org/viewvc?rev=1029021&view=rev
Log:
Re-enable efficient handling of wrapped MimeMessageWrapper by sharing the MimeMessageSource (JAMES-1095)
Modified:
james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageInputStreamSource.java
james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageSource.java
james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageWrapper.java
james/server/trunk/mail-file/src/main/java/org/apache/james/mailrepository/file/MimeMessageAvalonSource.java
james/server/trunk/mail-jdbc/src/main/java/org/apache/james/mailrepository/jdbc/MimeMessageJDBCSource.java
Modified: james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageInputStreamSource.java
URL: http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageInputStreamSource.java?rev=1029021&r1=1029020&r2=1029021&view=diff
==============================================================================
--- james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageInputStreamSource.java (original)
+++ james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageInputStreamSource.java Sat Oct 30 11:10:46 2010
@@ -26,7 +26,6 @@ import javax.mail.util.SharedFileInputSt
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
-import org.apache.james.lifecycle.Disposable;
import java.io.BufferedOutputStream;
import java.io.File;
@@ -49,8 +48,7 @@ import java.util.List;
*
*/
public class MimeMessageInputStreamSource
- extends MimeMessageSource
- implements Disposable {
+ extends MimeMessageSource {
private final List<InputStream> streams = new ArrayList<InputStream>();
@@ -179,10 +177,10 @@ public class MimeMessageInputStreamSourc
/*
* (non-Javadoc)
- * @see org.apache.james.lifecycle.Disposable#dispose()
+ * @see org.apache.james.core.MimeMessageSource#disposeSource()
*/
- public void dispose() {
- // explicit close all streams
+ public void disposeSource() {
+ // explicit close all streams
for (int i = 0; i < streams.size(); i++) {
IOUtils.closeQuietly(streams.get(i));
}
@@ -193,4 +191,5 @@ public class MimeMessageInputStreamSourc
file = null;
}
+
}
Modified: james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageSource.java
URL: http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageSource.java?rev=1029021&r1=1029020&r2=1029021&view=diff
==============================================================================
--- james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageSource.java (original)
+++ james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageSource.java Sat Oct 30 11:10:46 2010
@@ -24,6 +24,8 @@ package org.apache.james.core;
import java.io.IOException;
import java.io.InputStream;
+import org.apache.james.lifecycle.Disposable;
+
/**
* This defines a reusable datasource that can supply an input stream with
* MimeMessage data. This allows a MimeMessageWrapper or other classes to
@@ -31,7 +33,9 @@ import java.io.InputStream;
*
* @see MimeMessageWrapper
*/
-public abstract class MimeMessageSource {
+public abstract class MimeMessageSource implements Disposable{
+ private int shares = 0;
+
/**
* Returns a unique String ID that represents the location from where
* this file is loaded. This will be used to identify where the data
@@ -80,5 +84,31 @@ public abstract class MimeMessageSource
}
return size;
}
+
+ /**
+ * Share this instance and increase the share count
+ *
+ * @return instance
+ */
+ public final synchronized MimeMessageSource share() {
+ shares++;
+ return this;
+ }
+
+ /**
+ * Dispose this instance if its not shared anymore
+ */
+ public final synchronized void dispose() {
+ if (shares < 1) {
+ disposeSource();
+ }
+ shares--;
+
+ }
+
+ /**
+ * Get called by {@link #dispose()} if this instance is not shared anymore
+ */
+ protected abstract void disposeSource();
}
Modified: james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageWrapper.java
URL: http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageWrapper.java?rev=1029021&r1=1029020&r2=1029021&view=diff
==============================================================================
--- james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageWrapper.java (original)
+++ james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageWrapper.java Sat Oct 30 11:10:46 2010
@@ -34,6 +34,7 @@ import javax.mail.internet.MimeMessage;
import javax.mail.util.SharedByteArrayInputStream;
import java.io.BufferedWriter;
+import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -117,19 +118,21 @@ public class MimeMessageWrapper
// if the original is an unmodified MimeMessageWrapped we clone the headers and
// take its source.
- /* Temporary commented out because of JAMES-474
if (original instanceof MimeMessageWrapper && !((MimeMessageWrapper) original).bodyModified) {
- source = ((MimeMessageWrapper) original).source;
+ // call share so we are sure it will not dispose the message to early
+ source = ((MimeMessageWrapper) original).source.share();
// this probably speed up things
if (((MimeMessageWrapper) original).headers != null) {
ByteArrayOutputStream temp = new ByteArrayOutputStream();
+
+ //TODO: Remove the byte[] array usage
InternetHeaders ih = ((MimeMessageWrapper) original).headers;
MimeMessageUtil.writeHeadersTo(ih.getAllHeaderLines(),temp);
headers = createInternetHeaders(new ByteArrayInputStream(temp.toByteArray()));
headersModified = ((MimeMessageWrapper) original).headersModified;
}
}
- */
+
if (source == null) {
ByteArrayOutputStream bos;
Modified: james/server/trunk/mail-file/src/main/java/org/apache/james/mailrepository/file/MimeMessageAvalonSource.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mail-file/src/main/java/org/apache/james/mailrepository/file/MimeMessageAvalonSource.java?rev=1029021&r1=1029020&r2=1029021&view=diff
==============================================================================
--- james/server/trunk/mail-file/src/main/java/org/apache/james/mailrepository/file/MimeMessageAvalonSource.java (original)
+++ james/server/trunk/mail-file/src/main/java/org/apache/james/mailrepository/file/MimeMessageAvalonSource.java Sat Oct 30 11:10:46 2010
@@ -98,4 +98,12 @@ public class MimeMessageAvalonSource ext
}
return size;
}
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.core.MimeMessageSource#disposeSource()
+ */
+ protected void disposeSource() {
+ // nothing todo here
+ }
}
Modified: james/server/trunk/mail-jdbc/src/main/java/org/apache/james/mailrepository/jdbc/MimeMessageJDBCSource.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mail-jdbc/src/main/java/org/apache/james/mailrepository/jdbc/MimeMessageJDBCSource.java?rev=1029021&r1=1029020&r2=1029021&view=diff
==============================================================================
--- james/server/trunk/mail-jdbc/src/main/java/org/apache/james/mailrepository/jdbc/MimeMessageJDBCSource.java (original)
+++ james/server/trunk/mail-jdbc/src/main/java/org/apache/james/mailrepository/jdbc/MimeMessageJDBCSource.java Sat Oct 30 11:10:46 2010
@@ -274,4 +274,12 @@ public class MimeMessageJDBCSource exten
}
return result;
}
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.core.MimeMessageSource#disposeSource()
+ */
+ protected void disposeSource() {
+ // nothing todo here
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org