Ok. Attached is the new version using a byte[] to
store the mime message. The other change is in
MailImpl.java to instantiate the new class.
Performance went from ~5500 10.9kB messages/min to
~6800 messages/min.
--- Gabor Kincses <[EMAIL PROTECTED]> wrote:
> Why? Is it the synchronization overhead?
>
> Which one should I use? I'm not finding anything
> other than the java.io.
>
> Thanks,
> Gabor
>
> --- Serge Knystautas <[EMAIL PROTECTED]> wrote:
>
> > Gabor Kincses wrote:
> > > Ok, I found it. MimeMessageInputStreamSource
> > should
> > > really be called
> MimeMessageFileInputStreamSource,
> > > then a MimeMessageByteArrayInputStreamSource
> could
> > be
> > > written, which stores the freshly parsed out
> > message
> > > in a static hash of ByteArrayInputStreams
> instead
> > of
> > > temp files. The dispose method would remove the
> > entry
> > > from the hash.
> >
> > Sounds good, though I'd recommend using commons
> io's
> >
> > bytearrayoutputstream instead of the one with the
> > JDK.
> >
> > --
> > Serge Knystautas
> > Lokitech >> software . strategy . design >>
> > http://www.lokitech.com
> > p. 301.656.5501
> > e. [EMAIL PROTECTED]
> >
> >
>
---------------------------------------------------------------------
> > To unsubscribe, e-mail:
> > [EMAIL PROTECTED]
> > For additional commands, e-mail:
> > [EMAIL PROTECTED]
> >
> >
>
>
> =====
> Gabor Kincses
> Running Mandrake Linux 10.0
>
>
>
> __________________________________
> Do you Yahoo!?
> Yahoo! Mail - now with 250MB free storage. Learn
> more.
> http://info.mail.yahoo.com/mail_250
>
>
---------------------------------------------------------------------
> To unsubscribe, e-mail:
> [EMAIL PROTECTED]
> For additional commands, e-mail:
> [EMAIL PROTECTED]
>
>
=====
Gabor Kincses
Running Mandrake Linux 10.0
__________________________________
Do you Yahoo!?
Yahoo! Mail - You care about security. So do we.
http://promotions.yahoo.com/new_mail/***********************************************************************
* Copyright (c) 2000-2004 The Apache Software Foundation. *
* All rights reserved. *
* ------------------------------------------------------------------- *
* Licensed under the Apache License, Version 2.0 (the "License"); you *
* may not use this file except in compliance with the License. You *
* may obtain a copy of the License at: *
* *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, software *
* distributed under the License is distributed on an "AS IS" BASIS, *
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or *
* implied. See the License for the specific language governing *
* permissions and limitations under the License. *
***********************************************************************/
package org.apache.james.core;
import java.io.*;
import javax.mail.MessagingException;
import org.apache.avalon.framework.activity.Disposable;
/**
* Takes an input stream and creates a repeatable input stream source
* for a MimeMessageWrapper. It does this by completely reading the
* input stream and saving that to a temporary file that should delete on exit,
* or when this object is GC'd.
*
* @see MimeMessageWrapper
*
*
*/
public class MimeMessageByteArrayInputStreamSource
extends MimeMessageSource
implements Disposable {
/**
* Random key into the cache
*/
String sourceId = null;
/**
* The mime bytes
*/
byte[] bytes = null;
/**
* @param key
* @param in
* @throws MessagingException
*/
/**
* Construct a new MimeMessageByteArrayInputStreamSource from an
* <code>InputStream</code> that contains the bytes of a
* MimeMessage.
*
* @param key the prefix for the name of the temp file
* @param in the stream containing the MimeMessage
*
* @throws MessagingException if an error occurs while trying to store
* the stream
*/
public MimeMessageByteArrayInputStreamSource(String key, InputStream in)
throws MessagingException {
//We want to immediately read this into a byte array
//Create a byte array and channel the input stream into it
OutputStream out = null;
ByteArrayOutputStream bout = null;
try {
out = new BufferedOutputStream(bout = new ByteArrayOutputStream());
int b = -1;
while ((b = in.read()) != -1) {
out.write(b);
}
out.flush();
sourceId = key;
bytes = bout.toByteArray();
} catch (IOException ioe) {
throw new MessagingException("Unable to retrieve the data: " + ioe.getMessage(), ioe);
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException ioe) {
// Ignored - logging unavailable to log this non-fatal error.
}
try {
if (in != null) {
in.close();
}
} catch (IOException ioe) {
// Ignored - logging unavailable to log this non-fatal error.
}
}
}
/**
* Returns the unique identifier of this input stream source
*
* @return the unique identifier for this MimeMessageByteArrayInputStreamSource
*/
public String getSourceId() {
return sourceId;
}
/**
* Get an input stream to retrieve the data stored in the temporary file
*
* @return a <code>BufferedInputStream</code> containing the data
*/
public synchronized InputStream getInputStream() throws IOException {
return new BufferedInputStream(new ByteArrayInputStream(bytes));
}
/**
* Get the size of the temp file
*
* @return the size of the temp file
*
* @throws IOException if an error is encoutered while computing the size of the message
*/
public long getMessageSize() throws IOException {
return bytes.length;
}
/**
* @see org.apache.avalon.framework.activity.Disposable#dispose()
*/
public void dispose() {
bytes = null;
}
/**
* <p>Finalizer that closes and deletes the temp file. Very bad.</p>
* We're leaving this in temporarily, while also establishing a more
* formal mechanism for cleanup through use of the dispose() method.
*
*/
public void finalize() {
dispose();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]