Looks good for me after first review. BTW, the funny is that the attachment is now intact ;-P
bye Norman Am Montag, den 04.09.2006, 15:12 -0400 schrieb Noel J. Bergman: > > Attached is a first pass at an attempt to fix. > > [EMAIL PROTECTED] list filters! :-( > > Ok, attached to JAMES-603 issue, and included for reference below (although > the mailing list will corrupt the formatting). > > --- Noel > > Index: src/java/org/apache/james/mailrepository/JDBCSpoolRepository.java > =================================================================== > --- src/java/org/apache/james/mailrepository/JDBCSpoolRepository.java > (revision 439942) > +++ src/java/org/apache/james/mailrepository/JDBCSpoolRepository.java > (working copy) > @@ -189,12 +189,12 @@ > //Loop through until we are either out of pending messages or > have a message > // that we can lock > PendingMessage next = null; > - while ((next = getNextPendingMessage()) != null && > !Thread.currentThread().isInterrupted()) { > + while ((next = getNextPendingMessage(filter)) != null && > !Thread.currentThread().isInterrupted()) { > //Check whether this is time to expire > > - boolean shouldProcess = filter.accept (next.key, > next.state, next.lastUpdated, next.errorMessage); > + // boolean shouldProcess = filter.accept (next.key, > next.state, next.lastUpdated, next.errorMessage); > > - if (shouldProcess && lock(next.key)) { > + if (/*shouldProcess && */ lock(next.key)) { > try { > Mail mail = retrieve(next.key); > // Retrieve can return null if the mail is no > longer on the spool > @@ -241,11 +241,12 @@ > * checks the last time pending messages was loaded and load if > * it's been more than 1 second (should be configurable). > */ > - private PendingMessage getNextPendingMessage() { > + private PendingMessage > getNextPendingMessage(SpoolRepository.AcceptFilter filter) { > synchronized (pendingMessages) { > if (pendingMessages.size() == 0 && pendingMessagesLoadTime < > System.currentTimeMillis()) { > - pendingMessagesLoadTime = LOAD_TIME_MININUM + > System.currentTimeMillis(); > - loadPendingMessages(); > + // pendingMessagesLoadTime = LOAD_TIME_MININUM + > System.currentTimeMillis(); > + loadPendingMessages(filter); > + pendingMessagesLoadTime = Math.max(filter.getWaitTime(), > LOAD_TIME_MININUM) + System.currentTimeMillis(); > } > > if (pendingMessages.size() == 0) { > @@ -259,7 +260,7 @@ > /** > * Retrieves the pending messages that are in the database > */ > - private void loadPendingMessages() { > + private void loadPendingMessages(SpoolRepository.AcceptFilter filter) { > //Loads a vector with PendingMessage objects > synchronized (pendingMessages) { > pendingMessages.clear(); > @@ -272,7 +273,11 @@ > listMessages = > conn.prepareStatement(sqlQueries.getSqlString("listMess > agesSQL", true)); > listMessages.setString(1, repositoryName); > - listMessages.setMaxRows(maxPendingMessages); > + // Too simplistic. When filtering, we may need to see > + // more than just maxPendingMessages to load the > + // cache, so just hope that the driver and server use > + // cursors properly. > + // --> listMessages.setMaxRows(maxPendingMessages); > rsListMessages = listMessages.executeQuery(); > // Continue to have it loop through the list of messages > until we hit > // a possible message, or we retrieve maxPendingMessages > messages. > @@ -283,7 +288,9 @@ > String state = rsListMessages.getString(2); > long lastUpdated = > rsListMessages.getTimestamp(3).getTime(); > String errorMessage = rsListMessages.getString(4); > - pendingMessages.add(new PendingMessage(key, state, > lastUpdated, errorMessage)); > + if (filter.accept(key, state, lastUpdated, > errorMessage)) { > + pendingMessages.add(new PendingMessage(key, state, > lastUpdated, errorMessage)); > + } > } > } catch (SQLException sqle) { > //Log it and avoid reloading for a bit > > !EXCUBATOR:1,44fc7acc45119465627162! > --------------------------------------------------------------------- To > unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: > [EMAIL PROTECTED]
signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil