noel        2003/02/04 13:05:45

  Modified:    src/java/org/apache/james/mailrepository
                        AvalonSpoolRepository.java JDBCMailRepository.java
                        JDBCSpoolRepository.java
               src/java/org/apache/mailet SpoolRepository.java
  Log:
  made SpoolRepository.accept() interruptable; logged 'impossible' exceptions
  
  Revision  Changes    Path
  1.13      +14 -8     
jakarta-james/src/java/org/apache/james/mailrepository/AvalonSpoolRepository.java
  
  Index: AvalonSpoolRepository.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-james/src/java/org/apache/james/mailrepository/AvalonSpoolRepository.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- AvalonSpoolRepository.java        14 Jan 2003 13:58:21 -0000      1.12
  +++ AvalonSpoolRepository.java        4 Feb 2003 21:05:41 -0000       1.13
  @@ -38,11 +38,11 @@
        *
        * @return the key for the mail
        */
  -    public synchronized String accept() {
  +    public synchronized String accept() throws InterruptedException {
           if ((DEEP_DEBUG) && (getLogger().isDebugEnabled())) {
               getLogger().debug("Method accept() called");
           }
  -        while (true) {
  +        while (!Thread.currentThread().isInterrupted()) {
               try {
                   for(Iterator it = list(); it.hasNext(); ) {
   
  @@ -64,11 +64,14 @@
                   }
   
                   wait();
  -            } catch (InterruptedException ignored) {
  -            } catch (ConcurrentModificationException ignoredAlso) {
  +            } catch (InterruptedException ex) {
  +                throw ex;
  +            } catch (ConcurrentModificationException cme) {
                  // Should never get here now that list methods clones keyset for 
iterator
  +                getLogger().error("CME in spooler - please report to 
http://james.apache.org";, cme);
               }
           }
  +        throw new InterruptedException();
       }
   
       /**
  @@ -82,11 +85,11 @@
        *
        * @return the key for the mail
        */
  -    public synchronized String accept(long delay) {
  +    public synchronized String accept(long delay) throws InterruptedException {
           if ((DEEP_DEBUG) && (getLogger().isDebugEnabled())) {
               getLogger().debug("Method accept(delay) called");
           }
  -        while (true) {
  +        while (!Thread.currentThread().isInterrupted()) {
               long youngest = 0;
               for (Iterator it = list(); it.hasNext(); ) {
                   String s = it.next().toString();
  @@ -137,10 +140,13 @@
                   } else {
                       wait(youngest - System.currentTimeMillis());
                   }
  -            } catch (InterruptedException ignored) {
  -            } catch (ConcurrentModificationException ignoredAlso) {
  +            } catch (InterruptedException ex) {
  +                throw ex;
  +            } catch (ConcurrentModificationException cme) {
                  // Should never get here now that list methods clones keyset for 
iterator
  +                getLogger().error("CME in spooler - please report to 
http://james.apache.org";, cme);
               }
           }
  +        throw new InterruptedException();
       }
   }
  
  
  
  1.39      +1 -1      
jakarta-james/src/java/org/apache/james/mailrepository/JDBCMailRepository.java
  
  Index: JDBCMailRepository.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-james/src/java/org/apache/james/mailrepository/JDBCMailRepository.java,v
  retrieving revision 1.38
  retrieving revision 1.39
  diff -u -r1.38 -r1.39
  --- JDBCMailRepository.java   2 Feb 2003 23:36:16 -0000       1.38
  +++ JDBCMailRepository.java   4 Feb 2003 21:05:41 -0000       1.39
  @@ -755,7 +755,7 @@
               rsListMessages = listMessages.executeQuery();
   
               List messageList = new ArrayList();
  -            while (rsListMessages.next() /* && 
!Thread.currentThread().isInterrupted() -- post 2.1 enable this (NjB) */) {
  +            while (rsListMessages.next() && 
!Thread.currentThread().isInterrupted()) {
                   messageList.add(rsListMessages.getString(1));
               }
               return messageList.iterator();
  
  
  
  1.19      +13 -10    
jakarta-james/src/java/org/apache/james/mailrepository/JDBCSpoolRepository.java
  
  Index: JDBCSpoolRepository.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-james/src/java/org/apache/james/mailrepository/JDBCSpoolRepository.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- JDBCSpoolRepository.java  14 Jan 2003 13:58:21 -0000      1.18
  +++ JDBCSpoolRepository.java  4 Feb 2003 21:05:41 -0000       1.19
  @@ -95,12 +95,12 @@
       /**
        * Return the key of a message to process.  This is a message in the spool that 
is not locked.
        */
  -    public String accept() {
  -        while (true) {
  +    public String accept() throws InterruptedException {
  +        while (!Thread.currentThread().isInterrupted()) {
               //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) {
  +            while ((next = getNextPendingMessage()) != null && 
!Thread.currentThread().isInterrupted()) {
                   if (lock(next.key)) {
                       return next.key;
                   }
  @@ -117,9 +117,11 @@
                       //System.err.println(errorBuffer.toString());
                       wait(WAIT_LIMIT);
                   }
  -            } catch (InterruptedException ignored) {
  +            } catch (InterruptedException ex) {
  +                throw ex;
               }
           }
  +        throw new InterruptedException();
       }
   
       /**
  @@ -127,13 +129,13 @@
        * then check the last updated time, and don't try it until the long 'delay' 
parameter
        * milliseconds has passed.
        */
  -    public synchronized String accept(long delay) {
  -        while (true) {
  +    public synchronized String accept(long delay) throws InterruptedException {
  +        while (!Thread.currentThread().isInterrupted()) {
               //Loop through until we are either out of pending messages or have a 
message
               // that we can lock
               PendingMessage next = null;
               long sleepUntil = 0;
  -            while ((next = getNextPendingMessage()) != null) {
  +            while ((next = getNextPendingMessage()) != null && 
!Thread.currentThread().isInterrupted()) {
                   //Check whether this is time to expire
                   boolean shouldProcess = false;
                   if (Mail.ERROR.equals(next.state)) {
  @@ -172,10 +174,11 @@
                       //System.err.println(errorBuffer.toString());
                       wait(waitTime);
                   }
  -            } catch (InterruptedException ignored) {
  +            } catch (InterruptedException ex) {
  +                throw ex;
               }
  -
           }
  +        throw new InterruptedException();
       }
   
       /**
  @@ -233,7 +236,7 @@
                   //  a possible message, or we retrieve 1000 messages.  This 1000 
cap is to
                   //  avoid loading thousands or hundreds of thousands of messages 
when the
                   //  spool is enourmous.
  -                while (rsListMessages.next() && pendingMessages.size() < 1000) {
  +                while (rsListMessages.next() && pendingMessages.size() < 1000 && 
!Thread.currentThread().isInterrupted()) {
                       String key = rsListMessages.getString(1);
                       String state = rsListMessages.getString(2);
                       long lastUpdated = rsListMessages.getTimestamp(3).getTime();
  
  
  
  1.4       +2 -2      jakarta-james/src/java/org/apache/mailet/SpoolRepository.java
  
  Index: SpoolRepository.java
  ===================================================================
  RCS file: /home/cvs/jakarta-james/src/java/org/apache/mailet/SpoolRepository.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SpoolRepository.java      14 Jan 2003 13:42:10 -0000      1.3
  +++ SpoolRepository.java      4 Feb 2003 21:05:43 -0000       1.4
  @@ -30,7 +30,7 @@
        *
        * @return the key for the mail
        */
  -    String accept();
  +    String accept() throws InterruptedException;
   
       /**
        * Returns the key for an arbitrarily select mail deposited in this Repository 
that
  @@ -41,5 +41,5 @@
        *
        * @return the key for the mail
        */
  -    String accept(long delay);
  +    String accept(long delay) throws InterruptedException;
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to