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 pa...@apache.org on 2009/09/30 18:25:06 UTC

svn commit: r820334 - /webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryTransaction.java

Author: parsonsd
Date: Wed Sep 30 16:25:05 2009
New Revision: 820334

URL: http://svn.apache.org/viewvc?rev=820334&view=rev
Log:
General Performance Improvements

Modified:
    webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryTransaction.java

Modified: webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryTransaction.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryTransaction.java?rev=820334&r1=820333&r2=820334&view=diff
==============================================================================
--- webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryTransaction.java (original)
+++ webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/storage/inmemory/InMemoryTransaction.java Wed Sep 30 16:25:05 2009
@@ -19,15 +19,11 @@
 
 package org.apache.sandesha2.storage.inmemory;
 
-import java.security.PrivilegedAction;
 import java.util.ArrayList;
 import java.util.Iterator;
-import java.util.Map;
-import java.util.Map.Entry;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.ReentrantLock;
 
-import org.apache.axis2.java.security.AccessController;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.sandesha2.i18n.SandeshaMessageHelper;
@@ -46,25 +42,6 @@
 
 	private static final Log log = LogFactory.getLog(InMemoryTransaction.class);
 
-	private static int deadlockTimeoutSeconds = 25;
-	
-	// Allow the deadlock timeout to be configured to help debug
-	static{
-		String deadlockProperty = AccessController.doPrivileged(new PrivilegedAction<String>(){
-			public String run() {
-				return System.getProperty("deadlockTimeout");
-			}});
-		if(deadlockProperty != null){
-			try{
-				deadlockTimeoutSeconds = Integer.parseInt(deadlockProperty);
-			}catch(Exception e){
-				if(log.isDebugEnabled()){
-					log.debug("Exception encountered processing the deadlockTimeout property: "+deadlockProperty,e);
-				}
-			}
-		}
-	}
-	
 	private InMemoryStorageManager manager;
 	private String threadName;
 	private ArrayList<RMBean> enlistedBeans = new ArrayList<RMBean>();
@@ -81,12 +58,11 @@
 		this.useSerialization = useSerialization;
 		if(LoggingControl.isAnyTracingEnabled() && log.isDebugEnabled()) log.debug("Exit: InMemoryTransaction::<init>, " + this);
 	}
-
-    public void commit() {
-        releaseLocks();
-        if (sentMessages && useSerialization) manager.getSender().wakeThread();
-        active = false;
-    }
+	
+	public void commit() {
+		releaseLocks();
+		active = false;
+	}
 
 	public void rollback() {
 		releaseLocks();
@@ -117,7 +93,9 @@
 	
 	public void enlist(RMBean bean) {
 		if(LoggingControl.isAnyTracingEnabled() && log.isDebugEnabled()) log.debug("Entry: InMemoryTransaction::enlist, " + bean);
+		
 		if(isActive()){
+		
 		  if (bean != null) {
 			DummyTransaction tran = null;
 			synchronized (bean) {
@@ -128,67 +106,44 @@
 				}
 			}
 
-			boolean locked = false;
-			int count = 0;
-			while (!locked) {
-				locked = tran.tryLock();
-				if (!locked) {
-
-					try {
-						locked = tran.tryLock(5, TimeUnit.SECONDS);
-						if (!locked) {
-							count++;
-							if (log.isDebugEnabled())
-								log.debug("Waiting for bean lock 5 seconds");
-							if(count>=deadlockTimeoutSeconds){ // If we've been failed for xx seconds, lets log and give up.
-								deadlockTrace();
-								String message = "Possible deadlock enlisting bean.";
-								IllegalStateException e = new IllegalStateException(message);
-								if(LoggingControl.isAnyTracingEnabled() && log.isDebugEnabled()) log.debug("Possible deadlock enlisting bean.", e);
-								throw e;
-							}
-						}
-					} catch (InterruptedException e) {
-						log.warn("InterruptedException encountered enlisting bean", e);
+			try {
+				boolean locked = false;
+				while (!locked) {
+					if (tran.tryLock() || tran.tryLock(5, TimeUnit.SECONDS)) {
+						enlistedBeans.add(bean);
+						locked=true;
+					} else {
+						if (log.isDebugEnabled())
+							log.debug("Waiting for bean lock 5 seconds");
+
 					}
 				}
-
-				if (locked)
-					enlistedBeans.add(bean);
-
 			}
-		}
-	} else {
-		String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.noTransaction);
-		IllegalStateException e = new IllegalStateException(message);
-		if(LoggingControl.isAnyTracingEnabled() && log.isDebugEnabled()) log.debug("An attempt to enlist new work to an InMemoryTransaction that has previously been committed or rolled back.", e);
-		throw e;
-	}
-		if(LoggingControl.isAnyTracingEnabled() && log.isDebugEnabled()) log.debug("Exit: InMemoryTransaction::enlist");
-	}
-	
-	private static synchronized void deadlockTrace(){
-		Map<Thread, StackTraceElement[]> map = Thread.getAllStackTraces();
-		log.warn("Possible deadlock enlisting bean. Threads: ");
-		for(Entry<Thread, StackTraceElement[]> entry: map.entrySet()){
-			log.warn(entry.getKey().toString());
-			for(StackTraceElement ste: entry.getValue()){
-				log.warn("\tat "+ste.toString());
+			catch (InterruptedException e) {
+				log.warn("InterruptedException encountered enlisting bean",e);
 			}
+		  }
+		} else {
+			String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.noTransaction);
+			IllegalStateException e = new IllegalStateException(message);
+			if(LoggingControl.isAnyTracingEnabled() && log.isDebugEnabled()) log.debug("An attempt to enlist new work to an InMemoryTransaction that has previously been committed or rolled back.", e);
+			throw e;
 		}
+		
+		if(LoggingControl.isAnyTracingEnabled() && log.isDebugEnabled()) log.debug("Exit: InMemoryTransaction::enlist");
 	}
-	
+		
 	private void releaseLocks() {
 		if(LoggingControl.isAnyTracingEnabled() && log.isDebugEnabled()) log.debug("Entry: InMemoryTransaction::releaseLocks, " + this);
 		manager.removeTransaction(this);
 
-		Iterator<RMBean> beans = enlistedBeans.iterator();
+		Iterator beans = enlistedBeans.iterator();
 		while(beans.hasNext()) {
-			RMBean bean = beans.next();
+			RMBean bean = (RMBean) beans.next();
 			DummyTransaction tran = (DummyTransaction) bean.getTransaction();
 			tran.unlock();
 		}
-		enlistedBeans.clear();
+		enlistedBeans=new ArrayList<RMBean>();
 		
 		if(LoggingControl.isAnyTracingEnabled() && log.isDebugEnabled()) log.debug("Exit: InMemoryTransaction::releaseLocks");
 	}
@@ -222,4 +177,3 @@
 
 
 
-



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