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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to