[jboss-cvs] JBossAS SVN: r93532 - in projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager: listener and 3 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Sep 15 09:41:07 EDT 2009
Author: gurkanerdogdu
Date: 2009-09-15 09:41:06 -0400 (Tue, 15 Sep 2009)
New Revision: 93532
Modified:
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/AbstractConnectionManager.java
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/CachedConnectionManager.java
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ConnectionValidator.java
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/IdleRemover.java
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/ConnectionListenerFactory.java
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/TxConnectionListener.java
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/AbstractPool.java
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/SubPoolContext.java
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/transaction/TransactionSynchronizer.java
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/tx/TxConnectionManager.java
Log:
[JBJCA-167] Generic Connection Manager Implementation.
Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/AbstractConnectionManager.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/AbstractConnectionManager.java 2009-09-15 13:24:01 UTC (rev 93531)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/AbstractConnectionManager.java 2009-09-15 13:41:06 UTC (rev 93532)
@@ -486,7 +486,7 @@
/**
* {@inheritDoc}
*/
- public TransactionManager getTransactionManagerInstance()
+ public TransactionManager getTransactionManager()
{
return null;
}
Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/CachedConnectionManager.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/CachedConnectionManager.java 2009-09-15 13:24:01 UTC (rev 93531)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/CachedConnectionManager.java 2009-09-15 13:41:06 UTC (rev 93532)
@@ -127,13 +127,6 @@
public void setTransactionManager(TransactionManager transactionManager)
{
this.transactionManager = transactionManager;
-
- // FIXME we should be injecting onto the synchronizer directly
- if (this.transactionManager != null)
- {
- TransactionSynchronizer.setTransactionManager(transactionManager);
- }
-
}
Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ConnectionValidator.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ConnectionValidator.java 2009-09-15 13:24:01 UTC (rev 93531)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ConnectionValidator.java 2009-09-15 13:41:06 UTC (rev 93532)
@@ -22,6 +22,21 @@
package org.jboss.jca.core.connectionmanager;
+import org.jboss.jca.core.connectionmanager.pool.InternalManagedConnectionPool;
+
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+import org.jboss.logging.Logger;
+
/**
* Connection validator class.
*
@@ -31,22 +46,241 @@
*/
public class ConnectionValidator
{
+ /**Logger instance*/
+ private static Logger logger = Logger.getLogger(ConnectionValidator.class);
+
+ /**Validator thread name*/
+ private static final String VALIDATOR_THREAD_NAME = "JBossConnectionValidator";
+
+ /**Registered internal pool instances*/
+ private CopyOnWriteArrayList<InternalManagedConnectionPool> registeredPools =
+ new CopyOnWriteArrayList<InternalManagedConnectionPool>();
+
+ /**Validator executor service*/
+ private ExecutorService executorService = null;
+
+ /**Singleton instance*/
+ private static ConnectionValidator instance = new ConnectionValidator();
+
+ /** The interval */
+ private long interval = Long.MAX_VALUE;
+
+ /** The next */
+ //important initialization!
+ private long next = Long.MAX_VALUE;
+
+ /**Lock for condition*/
+ private Lock lock = new ReentrantLock();
+
+ /**Condition*/
+ private Condition condition = lock.newCondition();
+
+
/**
+ * Private constructor.
+ */
+ private ConnectionValidator()
+ {
+ this.executorService = Executors.newSingleThreadExecutor(new ValidatorThreadFactory());
+ this.executorService.execute(new JBossConnectionValidator());
+ }
+
+ /**
* Register pool for connection validation.
* @param mcp managed connection pool
* @param interval validation interval
*/
- public static void registerPool(IdleConnectionRemovalSupport mcp, long interval)
+ public static void registerPool(InternalManagedConnectionPool mcp, long interval)
{
-
+ instance.internalRegisterPool(mcp, interval);
}
/**
* Unregister pool instance for connection validation.
* @param mcp pool instance
*/
- public static void unregisterPool(IdleConnectionRemovalSupport mcp)
+ public static void unregisterPool(InternalManagedConnectionPool mcp)
{
+ instance.internalUnregisterPool(mcp);
+ }
+
+ private void internalRegisterPool(InternalManagedConnectionPool mcp, long interval)
+ {
+ try
+ {
+ this.lock.lock();
+
+ this.registeredPools.addIfAbsent(mcp);
+
+ if (interval > 1 && interval / 2 < this.interval)
+ {
+ this.interval = interval / 2;
+ long maybeNext = System.currentTimeMillis() + this.interval;
+ if (next > maybeNext && maybeNext > 0)
+ {
+ next = maybeNext;
+ if (logger.isDebugEnabled())
+ {
+ logger.debug("internalRegisterPool: about to notify thread: old next: " +
+ next + ", new next: " + maybeNext);
+ }
+
+ this.condition.signal();
+
+ }
+ }
+
+ }
+ finally
+ {
+ this.lock.unlock();
+ }
+ }
+
+ private void internalUnregisterPool(InternalManagedConnectionPool mcp)
+ {
+ this.registeredPools.remove(mcp);
+ if (this.registeredPools.size() == 0)
+ {
+ if (logger.isDebugEnabled())
+ {
+ logger.debug("internalUnregisterPool: setting interval to Long.MAX_VALUE");
+ }
+
+ interval = Long.MAX_VALUE;
+ }
}
+
+ /**
+ * Setup context class loader.
+ */
+ private void setupContextClassLoader()
+ {
+ // Could be null if loaded from system classloader
+ final ClassLoader cl = ConnectionValidator.class.getClassLoader();
+ if (cl == null)
+ {
+ return;
+ }
+
+ SecurityManager sm = System.getSecurityManager();
+
+ if (sm == null)
+ {
+ Thread.currentThread().setContextClassLoader(cl);
+
+ return;
+ }
+
+ AccessController.doPrivileged(new PrivilegedAction<Object>()
+ {
+ public Object run()
+ {
+ Thread.currentThread().setContextClassLoader(cl);
+
+ return null;
+ }
+ });
+ }
+
+ /**
+ * Wait for background thread.
+ */
+ public static void waitForBackgroundThread()
+ {
+ try
+ {
+ instance.lock.lock();
+
+ }
+ finally
+ {
+ instance.lock.unlock();
+ }
+ }
+
+
+ /**
+ * Thread factory.
+ */
+ private static class ValidatorThreadFactory implements ThreadFactory
+ {
+ /**
+ * {@inheritDoc}
+ */
+ public Thread newThread(Runnable r)
+ {
+ Thread thread = new Thread(r, ConnectionValidator.VALIDATOR_THREAD_NAME);
+ thread.setDaemon(true);
+
+ return thread;
+ }
+ }
+
+ /**
+ * JBossConnectionValidator.
+ *
+ */
+ private class JBossConnectionValidator implements Runnable
+ {
+
+ /**
+ * {@inheritDoc}
+ */
+ public void run()
+ {
+ setupContextClassLoader();
+
+ try
+ {
+ lock.lock();
+
+ while (true)
+ {
+ boolean result = instance.condition.await(instance.interval, TimeUnit.MILLISECONDS);
+
+ if (logger.isTraceEnabled())
+ {
+ logger.trace("Result of await ConnectionValidator: " + result);
+ }
+
+ if (logger.isDebugEnabled())
+ {
+ logger.debug("run: ConnectionValidator notifying pools, interval: " + interval);
+ }
+
+ for (InternalManagedConnectionPool mcp : registeredPools)
+ {
+ mcp.validateConnections();
+ }
+
+ next = System.currentTimeMillis() + interval;
+
+ if (next < 0)
+ {
+ next = Long.MAX_VALUE;
+ }
+ }
+ }
+ catch (InterruptedException e)
+ {
+ logger.info("run: ConnectionValidator has been interrupted, returning");
+
+ return;
+ }
+ catch (RuntimeException e)
+ {
+ logger.warn("run: ConnectionValidator ignored unexpected runtime exception", e);
+ }
+ catch (Exception e)
+ {
+ logger.warn("run: ConnectionValidator ignored unexpected error", e);
+ }
+ finally
+ {
+ lock.unlock();
+ }
+ }
+ }
}
Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/IdleRemover.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/IdleRemover.java 2009-09-15 13:24:01 UTC (rev 93531)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/IdleRemover.java 2009-09-15 13:41:06 UTC (rev 93532)
@@ -22,32 +22,263 @@
package org.jboss.jca.core.connectionmanager;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+import org.jboss.logging.Logger;
+
/**
- * Idle remover.
+ * Connection validator class.
+ *
* @author <a href="mailto:gurkanerdogdu at yahoo.com">Gurkan Erdogdu</a>
* @version $Rev$ $Date$
*
*/
public class IdleRemover
{
+ /**Logger instance*/
+ private static Logger logger = Logger.getLogger(IdleRemover.class);
+
+ /**Validator thread name*/
+ private static final String VALIDATOR_THREAD_NAME = "JBossConnectionValidator";
+
+ /**Registered internal pool instances*/
+ private CopyOnWriteArrayList<IdleConnectionRemovalSupport> registeredPools =
+ new CopyOnWriteArrayList<IdleConnectionRemovalSupport>();
+
+ /**Validator executor service*/
+ private ExecutorService executorService = null;
+
+ /**Singleton instance*/
+ private static IdleRemover instance = new IdleRemover();
+
+ /** The interval */
+ private long interval = Long.MAX_VALUE;
+ /** The next */
+ //important initialization!
+ private long next = Long.MAX_VALUE;
+
+ /**Lock for condition*/
+ private Lock lock = new ReentrantLock();
+
+ /**Condition*/
+ private Condition condition = lock.newCondition();
+
+
/**
- * Register pool for idle removal.
- * @param mcp pool instance
- * @param interval interval for removal
+ * Private constructor.
*/
+ private IdleRemover()
+ {
+ this.executorService = Executors.newSingleThreadExecutor(new ValidatorThreadFactory());
+ this.executorService.execute(new JBossConnectionValidator());
+ }
+
+ /**
+ * Register pool for connection validation.
+ * @param mcp managed connection pool
+ * @param interval validation interval
+ */
public static void registerPool(IdleConnectionRemovalSupport mcp, long interval)
{
-
+ instance.internalRegisterPool(mcp, interval);
}
/**
- * Unregister pool for idle removal.
+ * Unregister pool instance for connection validation.
* @param mcp pool instance
*/
public static void unregisterPool(IdleConnectionRemovalSupport mcp)
{
+ instance.internalUnregisterPool(mcp);
+ }
+
+ private void internalRegisterPool(IdleConnectionRemovalSupport mcp, long interval)
+ {
+ try
+ {
+ this.lock.lock();
+
+ this.registeredPools.addIfAbsent(mcp);
+
+ if (interval > 1 && interval / 2 < this.interval)
+ {
+ this.interval = interval / 2;
+ long maybeNext = System.currentTimeMillis() + this.interval;
+ if (next > maybeNext && maybeNext > 0)
+ {
+ next = maybeNext;
+ if (logger.isDebugEnabled())
+ {
+ logger.debug("internalRegisterPool: about to notify thread: old next: " +
+ next + ", new next: " + maybeNext);
+ }
+
+ this.condition.signal();
+
+ }
+ }
+
+ }
+ finally
+ {
+ this.lock.unlock();
+ }
+ }
+
+ private void internalUnregisterPool(IdleConnectionRemovalSupport mcp)
+ {
+ this.registeredPools.remove(mcp);
+ if (this.registeredPools.size() == 0)
+ {
+ if (logger.isDebugEnabled())
+ {
+ logger.debug("internalUnregisterPool: setting interval to Long.MAX_VALUE");
+ }
+
+ interval = Long.MAX_VALUE;
+ }
}
+
+ /**
+ * Setup context class loader.
+ */
+ private void setupContextClassLoader()
+ {
+ // Could be null if loaded from system classloader
+ final ClassLoader cl = IdleRemover.class.getClassLoader();
+ if (cl == null)
+ {
+ return;
+ }
+
+ SecurityManager sm = System.getSecurityManager();
+
+ if (sm == null)
+ {
+ Thread.currentThread().setContextClassLoader(cl);
+
+ return;
+ }
+
+ AccessController.doPrivileged(new PrivilegedAction<Object>()
+ {
+ public Object run()
+ {
+ Thread.currentThread().setContextClassLoader(cl);
+
+ return null;
+ }
+ });
+ }
+
+ /**
+ * Wait for background thread.
+ */
+ public static void waitForBackgroundThread()
+ {
+ try
+ {
+ instance.lock.lock();
+
+ }
+ finally
+ {
+ instance.lock.unlock();
+ }
+ }
+
+
+ /**
+ * Thread factory.
+ */
+ private static class ValidatorThreadFactory implements ThreadFactory
+ {
+ /**
+ * {@inheritDoc}
+ */
+ public Thread newThread(Runnable r)
+ {
+ Thread thread = new Thread(r, IdleRemover.VALIDATOR_THREAD_NAME);
+ thread.setDaemon(true);
+
+ return thread;
+ }
+ }
+
+ /**
+ * JBossConnectionValidator.
+ *
+ */
+ private class JBossConnectionValidator implements Runnable
+ {
+
+ /**
+ * {@inheritDoc}
+ */
+ public void run()
+ {
+ setupContextClassLoader();
+
+ try
+ {
+ lock.lock();
+
+ while (true)
+ {
+ boolean result = instance.condition.await(instance.interval, TimeUnit.MILLISECONDS);
+
+ if (logger.isTraceEnabled())
+ {
+ logger.trace("Result of await ConnectionValidator: " + result);
+ }
+
+ if (logger.isDebugEnabled())
+ {
+ logger.debug("run: ConnectionValidator notifying pools, interval: " + interval);
+ }
+
+ for (IdleConnectionRemovalSupport mcp : registeredPools)
+ {
+ mcp.removeIdleConnections();
+ }
+
+ next = System.currentTimeMillis() + interval;
+
+ if (next < 0)
+ {
+ next = Long.MAX_VALUE;
+ }
+ }
+ }
+ catch (InterruptedException e)
+ {
+ logger.info("run: ConnectionValidator has been interrupted, returning");
+
+ return;
+ }
+ catch (RuntimeException e)
+ {
+ logger.warn("run: ConnectionValidator ignored unexpected runtime exception", e);
+ }
+ catch (Exception e)
+ {
+ logger.warn("run: ConnectionValidator ignored unexpected error", e);
+ }
+ finally
+ {
+ lock.unlock();
+ }
+ }
+ }
}
Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/ConnectionListenerFactory.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/ConnectionListenerFactory.java 2009-09-15 13:24:01 UTC (rev 93531)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/ConnectionListenerFactory.java 2009-09-15 13:41:06 UTC (rev 93532)
@@ -57,5 +57,5 @@
*
* @return the transaction manager
*/
- TransactionManager getTransactionManagerInstance();
+ TransactionManager getTransactionManager();
}
Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/TxConnectionListener.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/TxConnectionListener.java 2009-09-15 13:24:01 UTC (rev 93531)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/TxConnectionListener.java 2009-09-15 13:41:06 UTC (rev 93532)
@@ -127,7 +127,7 @@
// not a real issue.
// No transaction associated with the thread
- TransactionManager tm = getConnectionManager().getTransactionManagerInstance();
+ TransactionManager tm = getConnectionManager().getTransactionManager();
int status = tm.getStatus();
if (status == Status.STATUS_NO_TRANSACTION)
{
Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/AbstractPool.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/AbstractPool.java 2009-09-15 13:24:01 UTC (rev 93531)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/AbstractPool.java 2009-09-15 13:41:06 UTC (rev 93532)
@@ -161,7 +161,7 @@
if (subPoolContext == null)
{
SubPoolContext newSubPoolContext = new SubPoolContext(getTransactionManager(), mcf, clf, subject,
- cri, poolParams, log);
+ cri, poolParams);
subPoolContext = subPools.putIfAbsent(key, newSubPoolContext);
if (subPoolContext == null)
{
@@ -182,7 +182,7 @@
{
if (clf != null)
{
- return clf.getTransactionManagerInstance();
+ return clf.getTransactionManager();
}
else
{
Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/SubPoolContext.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/SubPoolContext.java 2009-09-15 13:24:01 UTC (rev 93531)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/SubPoolContext.java 2009-09-15 13:41:06 UTC (rev 93532)
@@ -29,7 +29,6 @@
import javax.security.auth.Subject;
import javax.transaction.TransactionManager;
-import org.jboss.logging.Logger;
import org.jboss.tm.TransactionLocal;
/**
@@ -56,10 +55,9 @@
* @param subject the subject
* @param cri the connection request info
* @param poolParams the pool parameters
- * @param log the log
*/
public SubPoolContext(TransactionManager tm, ManagedConnectionFactory mcf, ConnectionListenerFactory clf,
- Subject subject, ConnectionRequestInfo cri, PoolParams poolParams, Logger log)
+ Subject subject, ConnectionRequestInfo cri, PoolParams poolParams)
{
subPool = new InternalManagedConnectionPool(mcf, clf, subject, cri, poolParams);
if (tm != null)
Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/transaction/TransactionSynchronizer.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/transaction/TransactionSynchronizer.java 2009-09-15 13:24:01 UTC (rev 93531)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/transaction/TransactionSynchronizer.java 2009-09-15 13:41:06 UTC (rev 93532)
@@ -22,6 +22,8 @@
package org.jboss.jca.core.connectionmanager.transaction;
import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.ReentrantLock;
import javax.transaction.RollbackException;
import javax.transaction.Synchronization;
@@ -60,13 +62,19 @@
private Thread enlistingThread;
/** Unenlisted */
- private CopyOnWriteArrayList<Synchronization> unenlisted;
+ private CopyOnWriteArrayList<Synchronization> unenlisted = new CopyOnWriteArrayList<Synchronization>();
/** Enlisted */
- private CopyOnWriteArrayList<Synchronization> enlisted;
+ private CopyOnWriteArrayList<Synchronization> enlisted = new CopyOnWriteArrayList<Synchronization>();
/** The cached connection manager synchronization */
private Synchronization ccmSynch;
+
+ /**Lock*/
+ private ReentrantLock lockObject = new ReentrantLock();
+
+ /**Condition*/
+ private Condition condition = this.lockObject.newCondition();
/**
* Initialization.
@@ -106,16 +114,23 @@
public CopyOnWriteArrayList<Synchronization> getUnenlisted()
{
Thread currentThread = Thread.currentThread();
+
while (enlistingThread != null && enlistingThread != currentThread)
{
boolean interrupted = false;
try
{
- wait();
+ this.lockObject.lock();
+
+ this.condition.await();
}
catch (InterruptedException e)
{
interrupted = true;
+ }
+ finally
+ {
+ this.lockObject.unlock();
}
if (interrupted)
@@ -123,6 +138,7 @@
currentThread.interrupt();
}
}
+
CopyOnWriteArrayList<Synchronization> result = unenlisted;
unenlisted = null;
@@ -160,17 +176,28 @@
*/
public void enlisted()
{
- Thread currentThread = Thread.currentThread();
- if (enlistingThread == null || enlistingThread != currentThread)
+ try
{
- log.warn("Thread " + currentThread + " not the enlisting thread " +
- enlistingThread, new Exception("STACKTRACE"));
+ this.lockObject.lock();
- return;
+ Thread currentThread = Thread.currentThread();
+
+ if (enlistingThread == null || enlistingThread != currentThread)
+ {
+ log.warn("Thread " + currentThread + " not the enlisting thread " +
+ enlistingThread, new Exception("STACKTRACE"));
+
+ return;
+ }
+
+ enlistingThread = null;
+
+ this.condition.signalAll();
}
-
- enlistingThread = null;
- notifyAll();
+ finally
+ {
+ this.lockObject.unlock();
+ }
}
/**
@@ -331,5 +358,6 @@
{
log.warn("Transaction " + tx + " error in after completion " + synch, t);
}
- }
+ }
+
}
Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/tx/TxConnectionManager.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/tx/TxConnectionManager.java 2009-09-15 13:24:01 UTC (rev 93531)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/tx/TxConnectionManager.java 2009-09-15 13:41:06 UTC (rev 93532)
@@ -125,7 +125,7 @@
public class TxConnectionManager extends AbstractConnectionManager
{
/**Transaction manager instance*/
- private TransactionManager tm;
+ private TransactionManager transactionManager;
/**Interleaving or not*/
private boolean interleaving;
@@ -159,18 +159,18 @@
* Gets transaction manager instance.
* @return transaction manager
*/
- public TransactionManager getTransactionManagerInstance()
+ public TransactionManager getTransactionManager()
{
- return tm;
+ return this.transactionManager;
}
/**
* Sets transaction manager.
* @param tm transaction manager
*/
- public void setTransactionManagerInstance(TransactionManager tm)
+ public void setTransactionManager(TransactionManager tm)
{
- this.tm = tm;
+ this.transactionManager = tm;
}
/**
@@ -316,10 +316,17 @@
*/
public long getTimeLeftBeforeTransactionTimeout(boolean errorRollback) throws RollbackException
{
- if (tm == null)
- throw new IllegalStateException("No transaction manager: " + getCachedConnectionManager());
- if (tm instanceof TransactionTimeoutConfiguration)
- return ((TransactionTimeoutConfiguration) tm).getTimeLeftBeforeTransactionTimeout(errorRollback);
+ if (this.transactionManager == null)
+ {
+ throw new IllegalStateException("No transaction manager: " + getCachedConnectionManager());
+ }
+
+ if (this.transactionManager instanceof TransactionTimeoutConfiguration)
+ {
+ return ((TransactionTimeoutConfiguration) this.transactionManager).
+ getTimeLeftBeforeTransactionTimeout(errorRollback);
+ }
+
return -1;
}
@@ -329,16 +336,21 @@
@Override
public void checkTransactionActive() throws RollbackException, SystemException
{
- if (tm == null)
- throw new IllegalStateException("No transaction manager: " + getCachedConnectionManager());
- Transaction tx = tm.getTransaction();
+ if (this.transactionManager == null)
+ {
+ throw new IllegalStateException("No transaction manager: " + getCachedConnectionManager());
+ }
+
+ Transaction tx = this.transactionManager.getTransaction();
if (tx != null)
{
int status = tx.getStatus();
// Only allow states that will actually succeed
if (status != Status.STATUS_ACTIVE && status != Status.STATUS_PREPARING &&
status != Status.STATUS_PREPARED && status != Status.STATUS_COMMITTING)
- throw new RollbackException("Transaction " + tx + " cannot proceed " + TxUtils.getStatusAsString(status));
+ {
+ throw new RollbackException("Transaction " + tx + " cannot proceed " + TxUtils.getStatusAsString(status));
+ }
}
}
@@ -351,11 +363,16 @@
Transaction trackByTransaction = null;
try
{
- Transaction tx = tm.getTransaction();
+ Transaction tx = this.transactionManager.getTransaction();
if (tx != null && !TxUtils.isActive(tx))
- throw new ResourceException("Transaction is not active: tx=" + tx);
+ {
+ throw new ResourceException("Transaction is not active: tx=" + tx);
+ }
+
if (!interleaving)
- trackByTransaction = tx;
+ {
+ trackByTransaction = tx;
+ }
}
catch (Throwable t)
{
@@ -363,7 +380,10 @@
}
if (this.trace)
- getLog().trace("getManagedConnection interleaving=" + interleaving + " tx=" + trackByTransaction);
+ {
+ getLog().trace("getManagedConnection interleaving=" + interleaving + " tx=" + trackByTransaction);
+ }
+
return super.getManagedConnection(trackByTransaction, subject, cri);
}
@@ -447,12 +467,14 @@
{
XAResource xaResource = null;
- if (localTransactions)
+ if (this.localTransactions)
{
xaResource = new LocalXAResource(this);
if (xaResourceTimeout != 0)
- getLog().debug("XAResource transaction timeout cannot be set for local transactions: " + getJndiName());
+ {
+ getLog().debug("XAResource transaction timeout cannot be set for local transactions: " + getJndiName());
+ }
}
else
@@ -508,7 +530,7 @@
*/
public boolean isTransactional()
{
- return !TxUtils.isCompleted(tm);
+ return !TxUtils.isCompleted(this.transactionManager);
}
/**
More information about the jboss-cvs-commits
mailing list