From a96dacc09a17bc4aec26e9158ebc9491ced1ec8f Mon Sep 17 00:00:00 2001 From: "David M. Lloyd" Date: Wed, 11 Jan 2017 09:12:19 -0600 Subject: [PATCH] Transaction client integration (part 2) - use transaction API classes from the transaction client --- .../LocalTransactionContextService.java | 24 ++++--------------- .../service/TransactionManagerService.java | 15 +++++++----- ...sactionSynchronizationRegistryService.java | 14 ++++++----- .../txn/service/UserTransactionService.java | 14 ++++++----- .../subsystem/TransactionSubsystemAdd.java | 5 +--- 5 files changed, 31 insertions(+), 41 deletions(-) diff --git a/transactions/src/main/java/org/jboss/as/txn/service/LocalTransactionContextService.java b/transactions/src/main/java/org/jboss/as/txn/service/LocalTransactionContextService.java index ff4f3008a363..91b90ad94f64 100644 --- a/transactions/src/main/java/org/jboss/as/txn/service/LocalTransactionContextService.java +++ b/transactions/src/main/java/org/jboss/as/txn/service/LocalTransactionContextService.java @@ -26,10 +26,6 @@ import java.security.PrivilegedAction; -import javax.resource.spi.XATerminator; -import javax.transaction.TransactionManager; -import javax.transaction.TransactionSynchronizationRegistry; - import org.jboss.msc.service.Service; import org.jboss.msc.service.StartContext; import org.jboss.msc.service.StartException; @@ -46,10 +42,8 @@ */ public final class LocalTransactionContextService implements Service { private LocalTransactionContext context; - private final InjectedValue xaTerminatorInjector = new InjectedValue<>(); private final InjectedValue extendedJBossXATerminatorInjector = new InjectedValue<>(); - private final InjectedValue transactionManagerInjector = new InjectedValue<>(); - private final InjectedValue transactionSynchronizationRegistryInjector = new InjectedValue<>(); + private final InjectedValue transactionManagerInjector = new InjectedValue<>(); public LocalTransactionContextService() { } @@ -57,9 +51,9 @@ public LocalTransactionContextService() { public void start(final StartContext context) throws StartException { JBossLocalTransactionProvider.Builder builder = JBossLocalTransactionProvider.builder(); builder.setExtendedJBossXATerminator(extendedJBossXATerminatorInjector.getValue()); - builder.setTransactionManager(transactionManagerInjector.getValue()); - builder.setTransactionSynchronizationRegistry(transactionSynchronizationRegistryInjector.getValue()); - builder.setXATerminator(xaTerminatorInjector.getValue()); + builder.setTransactionManager(transactionManagerInjector.getValue().getTransactionManager()); + builder.setTransactionSynchronizationRegistry(transactionManagerInjector.getValue().getTransactionSynchronizationRegistry()); + builder.setXATerminator(transactionManagerInjector.getValue().getJbossXATerminator()); final LocalTransactionContext transactionContext = this.context = new LocalTransactionContext(builder.build()); // TODO: replace this with per-CL settings for embedded use and to support remote UserTransaction doPrivileged((PrivilegedAction) () -> { @@ -77,22 +71,14 @@ public void stop(final StopContext context) { }); } - public InjectedValue getXATerminatorInjector() { - return xaTerminatorInjector; - } - public InjectedValue getExtendedJBossXATerminatorInjector() { return extendedJBossXATerminatorInjector; } - public InjectedValue getTransactionManagerInjector() { + public InjectedValue getTransactionManagerInjector() { return transactionManagerInjector; } - public InjectedValue getTransactionSynchronizationRegistryInjector() { - return transactionSynchronizationRegistryInjector; - } - public LocalTransactionContext getValue() throws IllegalStateException, IllegalArgumentException { return context; } diff --git a/transactions/src/main/java/org/jboss/as/txn/service/TransactionManagerService.java b/transactions/src/main/java/org/jboss/as/txn/service/TransactionManagerService.java index d92625ee2f3d..7e638699c57e 100644 --- a/transactions/src/main/java/org/jboss/as/txn/service/TransactionManagerService.java +++ b/transactions/src/main/java/org/jboss/as/txn/service/TransactionManagerService.java @@ -29,7 +29,7 @@ import org.jboss.msc.service.ServiceController; import org.jboss.msc.service.ServiceName; import org.jboss.msc.service.ServiceTarget; -import org.jboss.msc.value.InjectedValue; +import org.wildfly.transaction.client.ContextTransactionManager; /** * Service responsible for getting the {@link TransactionManager}. @@ -41,17 +41,20 @@ public class TransactionManagerService extends AbstractService injectedArjunaTM = new InjectedValue(); + private static final TransactionManagerService INSTANCE = new TransactionManagerService(); + + private TransactionManagerService() { + } public static ServiceController addService(final ServiceTarget target) { - TransactionManagerService service = new TransactionManagerService(); - ServiceBuilder serviceBuilder = target.addService(SERVICE_NAME, service); - serviceBuilder.addDependency(ArjunaTransactionManagerService.SERVICE_NAME, com.arjuna.ats.jbossatx.jta.TransactionManagerService.class, service.injectedArjunaTM); + ServiceBuilder serviceBuilder = target.addService(SERVICE_NAME, INSTANCE); + // This is really a dependency on the global context. TODO: Break this later; no service is needed for TM really + serviceBuilder.addDependency(TxnServices.JBOSS_TXN_LOCAL_TRANSACTION_CONTEXT); return serviceBuilder.install(); } @Override public TransactionManager getValue() throws IllegalStateException { - return injectedArjunaTM.getValue().getTransactionManager(); + return ContextTransactionManager.getInstance(); } } diff --git a/transactions/src/main/java/org/jboss/as/txn/service/TransactionSynchronizationRegistryService.java b/transactions/src/main/java/org/jboss/as/txn/service/TransactionSynchronizationRegistryService.java index 270b903cd62e..f28a62c8b419 100644 --- a/transactions/src/main/java/org/jboss/as/txn/service/TransactionSynchronizationRegistryService.java +++ b/transactions/src/main/java/org/jboss/as/txn/service/TransactionSynchronizationRegistryService.java @@ -28,7 +28,7 @@ import org.jboss.msc.service.ServiceController; import org.jboss.msc.service.ServiceName; import org.jboss.msc.service.ServiceTarget; -import org.jboss.msc.value.InjectedValue; +import org.wildfly.transaction.client.ContextTransactionSynchronizationRegistry; /** * Service that exposes the TransactionSynchronizationRegistry @@ -38,17 +38,19 @@ public class TransactionSynchronizationRegistryService extends AbstractService { public static final ServiceName SERVICE_NAME = TxnServices.JBOSS_TXN_SYNCHRONIZATION_REGISTRY; - private final InjectedValue injectedArjunaTM = new InjectedValue(); + private static final TransactionSynchronizationRegistryService INSTANCE = new TransactionSynchronizationRegistryService(); + + private TransactionSynchronizationRegistryService() { + } public static ServiceController addService(final ServiceTarget target) { - TransactionSynchronizationRegistryService service = new TransactionSynchronizationRegistryService(); - ServiceBuilder serviceBuilder = target.addService(SERVICE_NAME, service); - serviceBuilder.addDependency(ArjunaTransactionManagerService.SERVICE_NAME, com.arjuna.ats.jbossatx.jta.TransactionManagerService.class, service.injectedArjunaTM); + ServiceBuilder serviceBuilder = target.addService(SERVICE_NAME, INSTANCE); + serviceBuilder.addDependency(TxnServices.JBOSS_TXN_LOCAL_TRANSACTION_CONTEXT); return serviceBuilder.install(); } @Override public TransactionSynchronizationRegistry getValue() throws IllegalStateException { - return injectedArjunaTM.getValue().getTransactionSynchronizationRegistry(); + return ContextTransactionSynchronizationRegistry.getInstance(); } } diff --git a/transactions/src/main/java/org/jboss/as/txn/service/UserTransactionService.java b/transactions/src/main/java/org/jboss/as/txn/service/UserTransactionService.java index 6280a0229246..35fd9d25da2f 100644 --- a/transactions/src/main/java/org/jboss/as/txn/service/UserTransactionService.java +++ b/transactions/src/main/java/org/jboss/as/txn/service/UserTransactionService.java @@ -29,7 +29,7 @@ import org.jboss.msc.service.ServiceController; import org.jboss.msc.service.ServiceName; import org.jboss.msc.service.ServiceTarget; -import org.jboss.msc.value.InjectedValue; +import org.wildfly.transaction.client.LocalUserTransaction; /** * Service responsible for getting the {@link UserTransaction}. @@ -40,17 +40,19 @@ public class UserTransactionService extends AbstractService { public static final ServiceName SERVICE_NAME = TxnServices.JBOSS_TXN_USER_TRANSACTION; - private final InjectedValue injectedArjunaTM = new InjectedValue(); + private static final UserTransactionService INSTANCE = new UserTransactionService(); + + private UserTransactionService() { + } public static ServiceController addService(final ServiceTarget target) { - UserTransactionService service = new UserTransactionService(); - ServiceBuilder serviceBuilder = target.addService(SERVICE_NAME, service); - serviceBuilder.addDependency(ArjunaTransactionManagerService.SERVICE_NAME, com.arjuna.ats.jbossatx.jta.TransactionManagerService.class, service.injectedArjunaTM); + ServiceBuilder serviceBuilder = target.addService(SERVICE_NAME, INSTANCE); + serviceBuilder.addDependency(TxnServices.JBOSS_TXN_LOCAL_TRANSACTION_CONTEXT); return serviceBuilder.install(); } @Override public UserTransaction getValue() throws IllegalStateException { - return injectedArjunaTM.getValue().getUserTransaction(); + return LocalUserTransaction.getInstance(); } } diff --git a/transactions/src/main/java/org/jboss/as/txn/subsystem/TransactionSubsystemAdd.java b/transactions/src/main/java/org/jboss/as/txn/subsystem/TransactionSubsystemAdd.java index b19dc9a265bf..a1c56b5b0c82 100644 --- a/transactions/src/main/java/org/jboss/as/txn/subsystem/TransactionSubsystemAdd.java +++ b/transactions/src/main/java/org/jboss/as/txn/subsystem/TransactionSubsystemAdd.java @@ -31,7 +31,6 @@ import java.util.LinkedList; import java.util.List; -import javax.resource.spi.XATerminator; import javax.transaction.TransactionManager; import javax.transaction.TransactionSynchronizationRegistry; import javax.transaction.UserTransaction; @@ -241,10 +240,8 @@ protected void performBoottime(OperationContext context, ModelNode operation, Mo // Register WildFly transaction services - TODO: this should eventually be separated from the Narayana subsystem final LocalTransactionContextService localTransactionContextService = new LocalTransactionContextService(); context.getServiceTarget().addService(TxnServices.JBOSS_TXN_LOCAL_TRANSACTION_CONTEXT, localTransactionContextService) - .addDependency(TxnServices.JBOSS_TXN_XA_TERMINATOR, XATerminator.class, localTransactionContextService.getXATerminatorInjector()) .addDependency(TxnServices.JBOSS_TXN_EXTENDED_JBOSS_XA_TERMINATOR, ExtendedJBossXATerminator.class, localTransactionContextService.getExtendedJBossXATerminatorInjector()) - .addDependency(TxnServices.JBOSS_TXN_TRANSACTION_MANAGER, TransactionManager.class, localTransactionContextService.getTransactionManagerInjector()) - .addDependency(TxnServices.JBOSS_TXN_SYNCHRONIZATION_REGISTRY, TransactionSynchronizationRegistry.class, localTransactionContextService.getTransactionSynchronizationRegistryInjector()) + .addDependency(TxnServices.JBOSS_TXN_ARJUNA_TRANSACTION_MANAGER, com.arjuna.ats.jbossatx.jta.TransactionManagerService.class, localTransactionContextService.getTransactionManagerInjector()) .addDependency(TxnServices.JBOSS_TXN_ARJUNA_RECOVERY_MANAGER) // no injection .setInitialMode(Mode.ACTIVE) .install();