You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2013/04/29 07:58:00 UTC
svn commit: r1476896 - in
/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb:
core/SimpleTransactionSynchronizationRegistry.java
resource/jdbc/router/FailOverRouter.java
Author: rmannibucau
Date: Mon Apr 29 05:57:59 2013
New Revision: 1476896
URL: http://svn.apache.org/r1476896
Log:
using TransactionSyncRegistry instead of a plain old map - Thanks David
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/SimpleTransactionSynchronizationRegistry.java
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/router/FailOverRouter.java
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/SimpleTransactionSynchronizationRegistry.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/SimpleTransactionSynchronizationRegistry.java?rev=1476896&r1=1476895&r2=1476896&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/SimpleTransactionSynchronizationRegistry.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/SimpleTransactionSynchronizationRegistry.java Mon Apr 29 05:57:59 2013
@@ -41,16 +41,13 @@ public class SimpleTransactionSynchroniz
}
}
- public Object getResource(Object key) {
- Transaction transaction = getActiveTransaction();
-
- Map<Object, Object> resources = transactionResources.get(transaction);
+ public Object getResource(final Object key) {
+ final Transaction transaction = getActiveTransaction();
+ final Map<Object, Object> resources = transactionResources.get(transaction);
if (resources == null) {
return null;
}
-
- Object value = resources.get(key);
- return value;
+ return resources.get(key);
}
public void putResource(Object key, Object value) {
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/router/FailOverRouter.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/router/FailOverRouter.java?rev=1476896&r1=1476895&r2=1476896&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/router/FailOverRouter.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/router/FailOverRouter.java Mon Apr 29 05:57:59 2013
@@ -17,16 +17,16 @@
package org.apache.openejb.resource.jdbc.router;
import org.apache.openejb.OpenEJB;
+import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
import javax.naming.NamingException;
import javax.sql.DataSource;
import javax.sql.XADataSource;
-import javax.transaction.Synchronization;
-import javax.transaction.SystemException;
import javax.transaction.Transaction;
import javax.transaction.TransactionManager;
+import javax.transaction.TransactionSynchronizationRegistry;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -36,8 +36,6 @@ import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
@@ -124,7 +122,8 @@ public class FailOverRouter extends Abst
}
private static class FacadeHandler implements InvocationHandler {
- private final Map<Transaction, DataSource> txDs = new ConcurrentHashMap<Transaction, DataSource>();
+ private static final TransactionSynchronizationRegistry SYNCHRONIZATION_REGISTRY = SystemInstance.get().getComponent(TransactionSynchronizationRegistry.class);
+ private static final String DATASOURCE_KEY = "router_datasource_in_use";
private final Collection<DataSource> delegates;
private final String strategy;
@@ -153,8 +152,8 @@ public class FailOverRouter extends Abst
final Transaction transaction = txMgr.getTransaction();
if (transaction != null) {
-
- final DataSource currentDs = txDs.get(transaction);
+
+ final DataSource currentDs = DataSource.class.cast(SYNCHRONIZATION_REGISTRY.getResource(DATASOURCE_KEY));
if (currentDs != null) {
return method.invoke(currentDs, args);
}
@@ -175,8 +174,7 @@ public class FailOverRouter extends Abst
}
if (transaction != null) { // if a tx is in progress save the datasource to use for the tx
- transaction.registerSynchronization(new CleanUpSynchronization(txDs));
- txDs.put(transaction, ds); // save the ds to use for this transaction
+ SYNCHRONIZATION_REGISTRY.putResource(DATASOURCE_KEY, ds);
break;
}
@@ -195,29 +193,6 @@ public class FailOverRouter extends Abst
}
}
- private static class CleanUpSynchronization implements Synchronization {
- private final Map<Transaction, DataSource> toClean;
-
- private CleanUpSynchronization(final Map<Transaction, DataSource> toClean) {
- this.toClean = toClean;
- }
-
- @Override
- public void beforeCompletion() {
- // no-op
- }
-
- @Override
- public void afterCompletion(final int status) {
- try {
- final Transaction transaction = OpenEJB.getTransactionManager().getTransaction();
- toClean.remove(transaction);
- } catch (final SystemException e) {
- // no-op
- }
- }
- }
-
private static Collection<DataSource> sortFollowingStrategy(final String strategy, final Collection<DataSource> delegates, final AtomicInteger idx) {
if (strategy == null) {
return delegates;