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]

Attachment: signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil

Reply via email to