james-server-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Stefano Bagnara" <apa...@bago.org>
Subject Re: Spoolmanager blues
Date Wed, 07 Sep 2005 09:30:44 GMT
> > Can you try downgrading to 2.2.0 and verify wether the 
> issue is there 
> > or not?
> 
> Will do that today.
> 
> > Can you try using db/derby to check wether the issue is 
> there or not?
> >
> 
> Sure.

I'm testing a patch to both JDBC and Avalon repositories.
It seems working better than before. I'll run my stress-tests and eventually
commit the code so you can test it, too!

Stefano

------


Index:
james/src/java/org/apache/james/mailrepository/AvalonMailRepository.java
===================================================================
--- james/src/java/org/apache/james/mailrepository/AvalonMailRepository.java
(revision 233041)
+++ james/src/java/org/apache/james/mailrepository/AvalonMailRepository.java
(working copy)
@@ -205,6 +205,7 @@
 //            synchronized (this) {
 //                notifyAll();
 //            }
+            notify();
             return true;
         } else {
             return false;
Index:
james/src/java/org/apache/james/mailrepository/JDBCMailRepository.java
===================================================================
--- james/src/java/org/apache/james/mailrepository/JDBCMailRepository.java
(revision 233041)
+++ james/src/java/org/apache/james/mailrepository/JDBCMailRepository.java
(working copy)
@@ -494,7 +494,7 @@
      *
      * @return true if successfully released the lock, false otherwise
      */
-    public synchronized boolean unlock(String key) {
+    public boolean unlock(String key) {
         if (lock.unlock(key)) {
             if ((DEEP_DEBUG) && (getLogger().isDebugEnabled())) {
                 StringBuffer debugBuffer =
@@ -508,6 +508,7 @@
                 getLogger().debug(debugBuffer.toString());
             }
 //            notifyAll();
+            notify();
             return true;
         } else {
             return false;
@@ -521,7 +522,7 @@
      *
      * @return true if successfully obtained the lock, false otherwise
      */
-    public synchronized boolean lock(String key) {
+    public boolean lock(String key) {
         if (lock.lock(key)) {
             if ((DEEP_DEBUG) && (getLogger().isDebugEnabled())) {
                 StringBuffer debugBuffer =
@@ -546,7 +547,17 @@
      */
     public void store(MailImpl mc) throws MessagingException {
         Connection conn = null;
+        boolean wasLocked = true;
+        String key = mc.getName();
         try {
+            synchronized(this) {
+	              wasLocked = lock.isLocked(key);
+	
+	              if (!wasLocked) {
+	                  //If it wasn't locked, we want a lock during the
store
+	                  lock.lock(key);
+	              } 
+            }
             conn = datasource.getConnection();
 
             //Need to determine whether need to insert this record, or
update it.
@@ -775,6 +786,10 @@
             throw new MessagingException("Exception caught while storing
mail Container: " + e);
         } finally {
             theJDBCUtil.closeJDBCConnection(conn);
+            if (!wasLocked) {
+                //If it wasn't locked, we need to now unlock
+                lock.unlock(key);
+            } 
         }
     }
  


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


Mime
View raw message