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 18:46:20 UTC
svn commit: r1029113 - 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 16:46:20 2010
New Revision: 1029113
URL: http://svn.apache.org/viewvc?rev=1029113&view=rev
Log:
Make sure the shared MimeMessageSource will not get confused on multiple dispose() calls on the same instance. For this we keep track of the instances (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/mail-file/src/main/java/org/apache/james/mailrepository/file/MimeMessageStreamRepositorySource.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=1029113&r1=1029112&r2=1029113&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 16:46:20 2010
@@ -78,6 +78,7 @@ public class MimeMessageInputStreamSourc
*/
public MimeMessageInputStreamSource(String key, InputStream in)
throws MessagingException {
+ super();
//We want to immediately read this into a temporary file
//Create a temp file and channel the input stream into it
OutputStream fout = null;
@@ -119,6 +120,7 @@ public class MimeMessageInputStreamSourc
}
public MimeMessageInputStreamSource(String key) throws MessagingException {
+ super();
try {
file = File.createTempFile(key, ".m64");
sourceId = file.getCanonicalPath();
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=1029113&r1=1029112&r2=1029113&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 16:46:20 2010
@@ -23,6 +23,8 @@ package org.apache.james.core;
import java.io.IOException;
import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
import org.apache.james.lifecycle.Disposable;
@@ -34,7 +36,12 @@ import org.apache.james.lifecycle.Dispos
* @see MimeMessageWrapper
*/
public abstract class MimeMessageSource implements Disposable{
- private int shares = 0;
+ private final List<MimeMessageSource> shares = new ArrayList<MimeMessageSource>();
+
+
+ public MimeMessageSource() {
+ shares.add(this);
+ }
/**
* Returns a unique String ID that represents the location from where
@@ -90,20 +97,23 @@ public abstract class MimeMessageSource
*
* @return instance
*/
- public final synchronized MimeMessageSource share() {
- shares++;
- return this;
+ public final SharedMimeMessageSource share() {
+ synchronized (shares) {
+ SharedMimeMessageSource share = new SharedMimeMessageSource(this);
+ return share;
+ }
+
}
/**
* Dispose this instance if its not shared anymore
*/
- public final synchronized void dispose() {
- if (shares < 1) {
- disposeSource();
+ public final void dispose() {
+ synchronized (shares) {
+ if (shares.size() == 0) {
+ disposeSource();
+ }
}
- shares--;
-
}
/**
@@ -111,4 +121,39 @@ public abstract class MimeMessageSource
*/
protected abstract void disposeSource();
+
+ public final class SharedMimeMessageSource extends MimeMessageSource {
+
+ private MimeMessageSource source;
+
+ public SharedMimeMessageSource(MimeMessageSource source) {
+ super();
+ this.source = source;
+ }
+
+ @Override
+ protected void disposeSource() {
+ synchronized (shares) {
+ if (shares.remove(SharedMimeMessageSource.this)) {
+ source.dispose();
+ }
+ }
+
+ }
+
+ @Override
+ public InputStream getInputStream() throws IOException {
+ return source.getInputStream();
+ }
+
+ @Override
+ public String getSourceId() {
+ return source.getSourceId();
+ }
+
+ public MimeMessageSource getWrapped() {
+ return source;
+ }
+
+ }
}
Modified: james/server/trunk/mail-file/src/main/java/org/apache/james/mailrepository/file/MimeMessageStreamRepositorySource.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mail-file/src/main/java/org/apache/james/mailrepository/file/MimeMessageStreamRepositorySource.java?rev=1029113&r1=1029112&r2=1029113&view=diff
==============================================================================
--- james/server/trunk/mail-file/src/main/java/org/apache/james/mailrepository/file/MimeMessageStreamRepositorySource.java (original)
+++ james/server/trunk/mail-file/src/main/java/org/apache/james/mailrepository/file/MimeMessageStreamRepositorySource.java Sat Oct 30 16:46:20 2010
@@ -57,6 +57,8 @@ public class MimeMessageStreamRepository
* @param key The key for the particular stream in the stream repository to be used by this data source.
*/
public MimeMessageStreamRepositorySource(StreamRepository sr, String repositoryName, String key) {
+ super();
+
this.sr = sr;
this.repositoryName = repositoryName;
this.key = key;
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=1029113&r1=1029112&r2=1029113&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 16:46:20 2010
@@ -85,6 +85,8 @@ public class MimeMessageJDBCSource exten
*/
public MimeMessageJDBCSource(JDBCMailRepository repository,
String key, StreamRepository sr) throws IOException {
+ super();
+
if (repository == null) {
throw new IOException("Repository is null");
}
@@ -100,6 +102,7 @@ public class MimeMessageJDBCSource exten
// this is optional
retrieveMessageBodySizeSQL =
repository.sqlQueries.getSqlString("retrieveMessageBodySizeSQL");
+
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org