Author: amilas
Date: Sun Dec  7 20:28:42 2008
New Revision: 724248

URL: http://svn.apache.org/viewvc?rev=724248&view=rev
Log:
commiting the patch for SANDESHA2-184

Added:
    
webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/TransactionLock.java
Modified:
    
webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/JDBCTransaction.java
    
webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentStorageManager.java

Modified: 
webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/JDBCTransaction.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/JDBCTransaction.java?rev=724248&r1=724247&r2=724248&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/JDBCTransaction.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/JDBCTransaction.java
 Sun Dec  7 20:28:42 2008
@@ -70,6 +70,7 @@
                } catch (Exception ex) {
                }
                active = false;
+               pmgr.releaseTransactionLock();
        }
 
        public void rollback() {
@@ -80,6 +81,7 @@
                } catch (Exception ex) {
                }
                active = false;
+               pmgr.releaseTransactionLock();
        }
 
        public boolean isActive() {

Modified: 
webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentStorageManager.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentStorageManager.java?rev=724248&r1=724247&r2=724248&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentStorageManager.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentStorageManager.java
 Sun Dec  7 20:28:42 2008
@@ -82,6 +82,8 @@
        private static ThreadLocal threadTransaction = null;
        private static final Log log = 
LogFactory.getLog(PersistentStorageManager.class);
 
+       private TransactionLock transactionLock;
+
        public SandeshaThread getInvoker() {
                return invoker;
        }
@@ -136,6 +138,8 @@
                 log.debug(param.getName() + "=" + dbPassword);
             }
         }
+
+               this.transactionLock = new TransactionLock();
        }
 
        public void shutdown() {
@@ -176,8 +180,10 @@
        }
 
        public Transaction getTransaction() {
+
                Transaction transaction = (Transaction) threadTransaction.get();
                if (transaction == null) {
+                       this.acquireTransactionLock();
                        transaction = new JDBCTransaction(this);
                        threadTransaction.set(transaction);
                } else {
@@ -334,4 +340,25 @@
                }
        }
 
+       public void acquireTransactionLock() {
+               synchronized (this.transactionLock) {
+                       if (this.transactionLock.isAcquried()) {
+                               try {
+                                       this.transactionLock.wait();
+                               } catch (InterruptedException e) {
+                               }
+                               // keep on waiting until acquireTransactionLock 
gain
+                               this.acquireTransactionLock();
+                       } else {
+                               this.transactionLock.lock();
+                       }
+               }
+       }
+
+       public void releaseTransactionLock(){
+               synchronized(this.transactionLock){
+                       this.transactionLock.release();
+               }
+       }
+
 }

Added: 
webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/TransactionLock.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/TransactionLock.java?rev=724248&view=auto
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/TransactionLock.java
 (added)
+++ 
webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/TransactionLock.java
 Sun Dec  7 20:28:42 2008
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sandesha2.storage.jdbc;
+
+/**
+ * this class is uesd to acquireTransactionLock the transactions util active
+ * transaction is finished.
+ */
+public class TransactionLock {
+
+       //to keep whether an transaction has acquired the storage lock or not
+       private boolean isAcquried;
+
+       public void lock() {
+               this.isAcquried = true;
+       }
+
+       public void release() {
+               this.isAcquried = false;
+               this.notifyAll();
+       }
+
+       public boolean isAcquried() {
+               return this.isAcquried;
+       }
+
+}



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

Reply via email to