You are viewing a plain text version of this content. The canonical link for it is here.
Posted to sandesha-dev@ws.apache.org by am...@apache.org on 2008/12/08 05:28:43 UTC

svn commit: r724248 - in /webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc: JDBCTransaction.java PersistentStorageManager.java TransactionLock.java

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: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org