You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by se...@apache.org on 2001/08/06 06:14:13 UTC
cvs commit: jakarta-james/src/java/org/apache/james/mailrepository AvalonMailRepository.java AvalonSpoolRepository.java JDBCMailRepository.java JDBCSpoolRepository.java
serge 01/08/05 21:14:13
Modified: src/java/org/apache/james/mailrepository
AvalonMailRepository.java
AvalonSpoolRepository.java JDBCMailRepository.java
JDBCSpoolRepository.java
Log:
Fixed locking code... lock/unlock now return boolean, and lock object is private so the repository's lock/unlock methods should be called instead.
Revision Changes Path
1.5 +15 -14 jakarta-james/src/java/org/apache/james/mailrepository/AvalonMailRepository.java
Index: AvalonMailRepository.java
===================================================================
RCS file: /home/cvs/jakarta-james/src/java/org/apache/james/mailrepository/AvalonMailRepository.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- AvalonMailRepository.java 2001/08/06 03:42:18 1.4
+++ AvalonMailRepository.java 2001/08/06 04:14:13 1.5
@@ -46,7 +46,7 @@
extends AbstractLoggable
implements MailRepository, Component, Configurable, Composable {
- protected Lock lock;
+ private Lock lock;
protected static boolean DEEP_DEBUG = false;
private static final String TYPE = "MAIL";
private Store store;
@@ -93,7 +93,7 @@
sr = (StreamRepository) store.select(streamConfiguration);
or = (ObjectRepository) store.select(objectConfiguration);
lock = new Lock();
- getLogger().debug(this.getClass().getName() + " created in " + destination);
+ getLogger().debug(this.getClass().getName() + " created in " + destination);
} catch (Exception e) {
final String message = "Failed to retrieve Store component:" + e.getMessage();
getLogger().error( message, e );
@@ -101,21 +101,21 @@
}
}
- public synchronized void unlock(Object key) {
-
+ public synchronized boolean unlock(String key) {
if (lock.unlock(key)) {
notifyAll();
+ return true;
} else {
- throw new LockException("Your thread do not own the lock of record " + key);
+ return false;
}
}
-
- public synchronized void lock(Object key) {
+ public synchronized boolean lock(String key) {
if (lock.lock(key)) {
notifyAll();
+ return true;
} else {
- throw new LockException("Record " + key + " already locked by another thread");
+ return false;
}
}
@@ -157,12 +157,13 @@
}
public void remove(String key) {
- try {
- lock( key);
- sr.remove(key);
- or.remove(key);
- } finally {
- unlock(key);
+ if (lock(key)) {
+ try {
+ sr.remove(key);
+ or.remove(key);
+ } finally {
+ unlock(key);
+ }
}
}
1.2 +24 -16 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.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AvalonSpoolRepository.java 2001/05/11 09:25:59 1.1
+++ AvalonSpoolRepository.java 2001/08/06 04:14:13 1.2
@@ -23,32 +23,34 @@
* type="MAIL"
* model="SYNCHRONOUS"/>
* Requires a logger called MailRepository.
- *
+ *
* @version 1.0.0, 24/04/1999
* @author Federico Barbieri <sc...@pop.systemy.it>
* @author Charles Benett <ch...@benett1.demon.co.uk>
*/
-public class AvalonSpoolRepository
- extends AvalonMailRepository
+public class AvalonSpoolRepository
+ extends AvalonMailRepository
implements SpoolRepository {
public synchronized String accept() {
- if (DEEP_DEBUG) getLogger().debug("Method accept() called");
+ if (DEEP_DEBUG) {
+ getLogger().debug("Method accept() called");
+ }
while (true) {
for(Iterator it = list(); it.hasNext(); ) {
-
+
String s = it.next().toString();
- if (DEEP_DEBUG) getLogger().debug("Found item " + s
+ if (DEEP_DEBUG) {
+ getLogger().debug("Found item " + s
+ " in spool.");
- if (lock.lock(s)) {
- if (DEEP_DEBUG) getLogger().debug("accept() has locked: "
+ }
+ if (lock(s)) {
+ if (DEEP_DEBUG) {
+ getLogger().debug("accept() has locked: "
+ s);
+ }
return s;
}
- // Object o = it.next();
- //if (lock.lock(o)) {
- // return o.toString();
- //}
}
try {
wait();
@@ -58,16 +60,22 @@
}
public synchronized String accept(long delay) {
- if (DEEP_DEBUG) getLogger().debug("Method accept(delay) called");
+ if (DEEP_DEBUG) {
+ getLogger().debug("Method accept(delay) called");
+ }
while (true) {
long youngest = 0;
for (Iterator it = list(); it.hasNext(); ) {
String s = it.next().toString();
- if (DEEP_DEBUG) getLogger().debug("Found item " + s
+ if (DEEP_DEBUG) {
+ getLogger().debug("Found item " + s
+ " in spool.");
- if (lock.lock(s)) {
- if (DEEP_DEBUG) getLogger().debug("accept(delay) has"
+ }
+ if (lock(s)) {
+ if (DEEP_DEBUG) {
+ getLogger().debug("accept(delay) has"
+ " locked: " + s);
+ }
//We have a lock on this object... let's grab the message
// and see if it's a valid time.
MailImpl mail = retrieve(s);
1.2 +23 -21 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.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- JDBCMailRepository.java 2001/08/06 03:42:18 1.1
+++ JDBCMailRepository.java 2001/08/06 04:14:13 1.2
@@ -69,7 +69,7 @@
extends AbstractLoggable
implements MailRepository, Component, Configurable, Composable {
- protected Lock lock;
+ private Lock lock;
protected String destination;
protected String tableName;
protected String repositoryName;
@@ -151,19 +151,21 @@
}
}
- public synchronized void unlock(Object key) {
+ public synchronized boolean unlock(String key) {
if (lock.unlock(key)) {
notifyAll();
+ return true;
} else {
- throw new LockException("Your thread does not own the lock of record " + key);
+ return false;
}
}
- public synchronized void lock(Object key) {
+ public synchronized boolean lock(String key) {
if (lock.lock(key)) {
notifyAll();
+ return true;
} else {
- throw new LockException("Record " + key + " already locked by another thread");
+ return false;
}
}
@@ -351,24 +353,24 @@
public void remove(String key) {
//System.err.println("removing " + key);
- try {
- lock(key);
-
- Connection conn = getConnection();
- PreparedStatement removeMessage = conn.prepareStatement(sqlQueries.getProperty("removeMessageSQL"));
- removeMessage.setString(1, key);
- removeMessage.setString(2, repositoryName);
- removeMessage.execute();
- removeMessage.close();
- conn.close();
+ if (lock(key)) {
+ try {
+ Connection conn = getConnection();
+ PreparedStatement removeMessage = conn.prepareStatement(sqlQueries.getProperty("removeMessageSQL"));
+ removeMessage.setString(1, key);
+ removeMessage.setString(2, repositoryName);
+ removeMessage.execute();
+ removeMessage.close();
+ conn.close();
- if (sr != null) {
- sr.remove(key);
+ if (sr != null) {
+ sr.remove(key);
+ }
+ } catch (Exception me) {
+ throw new RuntimeException("Exception while removing mail: " + me.getMessage());
+ } finally {
+ unlock(key);
}
- } catch (Exception me) {
- throw new RuntimeException("Exception while removing mail: " + me.getMessage());
- } finally {
- unlock(key);
}
}
1.2 +2 -2 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.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- JDBCSpoolRepository.java 2001/08/06 03:42:18 1.1
+++ JDBCSpoolRepository.java 2001/08/06 04:14:13 1.2
@@ -74,7 +74,7 @@
while (rsListMessages.next()) {
String message = rsListMessages.getString(1);
- if (lock.lock(message)) {
+ if (lock(message)) {
rsListMessages.close();
listMessages.close();
conn.close();
@@ -123,7 +123,7 @@
process = true;
}
- if (process && lock.lock(message)) {
+ if (process && lock(message)) {
rsListMessages.close();
listMessages.close();
conn.close();
---------------------------------------------------------------------
To unsubscribe, e-mail: james-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: james-dev-help@jakarta.apache.org