Author: bago Date: Thu Apr 27 02:43:34 2006 New Revision: 397494 URL: http://svn.apache.org/viewcvs?rev=397494&view=rev Log: Temp workaround for JAMES-466. Default size for in-memory bytearray usage instead of new streaming code is now 400MB. The streaming support can be "re-enabled" by adding a config.xml property to the repositories (inMemorySizeLimit)
Modified: james/server/trunk/src/java/org/apache/james/mailrepository/JDBCMailRepository.java james/server/trunk/src/java/org/apache/james/mailrepository/MessageInputStream.java Modified: james/server/trunk/src/java/org/apache/james/mailrepository/JDBCMailRepository.java URL: http://svn.apache.org/viewcvs/james/server/trunk/src/java/org/apache/james/mailrepository/JDBCMailRepository.java?rev=397494&r1=397493&r2=397494&view=diff ============================================================================== --- james/server/trunk/src/java/org/apache/james/mailrepository/JDBCMailRepository.java (original) +++ james/server/trunk/src/java/org/apache/james/mailrepository/JDBCMailRepository.java Thu Apr 27 02:43:34 2006 @@ -162,6 +162,11 @@ protected boolean jdbcMailAttributesReady = false; /** + * The size threshold for in memory handling of storing operations + */ + private int inMemorySizeLimit; + + /** * @see org.apache.avalon.framework.context.Contextualizable#contextualize(Context) */ public void contextualize(final Context context) @@ -252,6 +257,8 @@ .append("'"); getLogger().debug(logBuffer.toString()); } + + inMemorySizeLimit = conf.getChild("inMemorySizeLimit").getValueAsInteger(409600000); String filestore = conf.getChild("filestore").getValue(null); sqlFileName = conf.getChild("sqlFile").getValue(); @@ -665,7 +672,7 @@ PreparedStatement updateMessageBody = conn.prepareStatement(sqlQueries.getSqlString("updateMessageBodySQL", true)); try { - MessageInputStream is = new MessageInputStream(mc,sr); + MessageInputStream is = new MessageInputStream(mc,sr,inMemorySizeLimit); updateMessageBody.setBinaryStream(1,is,(int) is.getSize()); updateMessageBody.setString(2, mc.getName()); updateMessageBody.setString(3, repositoryName); @@ -706,7 +713,7 @@ insertMessage.setString(8, mc.getRemoteAddr()); insertMessage.setTimestamp(9, new java.sql.Timestamp(mc.getLastUpdated().getTime())); - MessageInputStream is = new MessageInputStream(mc,sr); + MessageInputStream is = new MessageInputStream(mc, sr, inMemorySizeLimit); insertMessage.setBinaryStream(10, is, (int) is.getSize()); Modified: james/server/trunk/src/java/org/apache/james/mailrepository/MessageInputStream.java URL: http://svn.apache.org/viewcvs/james/server/trunk/src/java/org/apache/james/mailrepository/MessageInputStream.java?rev=397494&r1=397493&r2=397494&view=diff ============================================================================== --- james/server/trunk/src/java/org/apache/james/mailrepository/MessageInputStream.java (original) +++ james/server/trunk/src/java/org/apache/james/mailrepository/MessageInputStream.java Thu Apr 27 02:43:34 2006 @@ -46,14 +46,14 @@ * Main constructor. If srep is not null than we are using dbfiles and we stream * the body to file and only the header to db. */ - public MessageInputStream(Mail mc, StreamRepository srep) throws IOException, MessagingException { + public MessageInputStream(Mail mc, StreamRepository srep, int sizeLimit) throws IOException, MessagingException { super(); caughtException = null; streamRep = srep; size = mc.getMessageSize(); // we use the pipes only when streamRep is null and the message size is greater than 4096 // Otherwise we should calculate the header size and not the message size when streamRep is not null (JAMES-475) - if (streamRep == null && size > 4096) { + if (streamRep == null && size > sizeLimit) { PipedOutputStream headerOut = new PipedOutputStream(); new Thread() { private Mail mail; --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]