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]