Skip to content

Commit

Permalink
Transaction client integration (part 2) - use transaction API classes…
Browse files Browse the repository at this point in the history
… from the transaction client
  • Loading branch information
dmlloyd committed Jan 13, 2017
1 parent 5eb816e commit a96dacc
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 41 deletions.
Expand Up @@ -26,10 +26,6 @@


import java.security.PrivilegedAction; 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.Service;
import org.jboss.msc.service.StartContext; import org.jboss.msc.service.StartContext;
import org.jboss.msc.service.StartException; import org.jboss.msc.service.StartException;
Expand All @@ -46,20 +42,18 @@
*/ */
public final class LocalTransactionContextService implements Service<LocalTransactionContext> { public final class LocalTransactionContextService implements Service<LocalTransactionContext> {
private LocalTransactionContext context; private LocalTransactionContext context;
private final InjectedValue<XATerminator> xaTerminatorInjector = new InjectedValue<>();
private final InjectedValue<ExtendedJBossXATerminator> extendedJBossXATerminatorInjector = new InjectedValue<>(); private final InjectedValue<ExtendedJBossXATerminator> extendedJBossXATerminatorInjector = new InjectedValue<>();
private final InjectedValue<TransactionManager> transactionManagerInjector = new InjectedValue<>(); private final InjectedValue<com.arjuna.ats.jbossatx.jta.TransactionManagerService> transactionManagerInjector = new InjectedValue<>();
private final InjectedValue<TransactionSynchronizationRegistry> transactionSynchronizationRegistryInjector = new InjectedValue<>();


public LocalTransactionContextService() { public LocalTransactionContextService() {
} }


public void start(final StartContext context) throws StartException { public void start(final StartContext context) throws StartException {
JBossLocalTransactionProvider.Builder builder = JBossLocalTransactionProvider.builder(); JBossLocalTransactionProvider.Builder builder = JBossLocalTransactionProvider.builder();
builder.setExtendedJBossXATerminator(extendedJBossXATerminatorInjector.getValue()); builder.setExtendedJBossXATerminator(extendedJBossXATerminatorInjector.getValue());
builder.setTransactionManager(transactionManagerInjector.getValue()); builder.setTransactionManager(transactionManagerInjector.getValue().getTransactionManager());
builder.setTransactionSynchronizationRegistry(transactionSynchronizationRegistryInjector.getValue()); builder.setTransactionSynchronizationRegistry(transactionManagerInjector.getValue().getTransactionSynchronizationRegistry());
builder.setXATerminator(xaTerminatorInjector.getValue()); builder.setXATerminator(transactionManagerInjector.getValue().getJbossXATerminator());
final LocalTransactionContext transactionContext = this.context = new LocalTransactionContext(builder.build()); final LocalTransactionContext transactionContext = this.context = new LocalTransactionContext(builder.build());
// TODO: replace this with per-CL settings for embedded use and to support remote UserTransaction // TODO: replace this with per-CL settings for embedded use and to support remote UserTransaction
doPrivileged((PrivilegedAction<Void>) () -> { doPrivileged((PrivilegedAction<Void>) () -> {
Expand All @@ -77,22 +71,14 @@ public void stop(final StopContext context) {
}); });
} }


public InjectedValue<XATerminator> getXATerminatorInjector() {
return xaTerminatorInjector;
}

public InjectedValue<ExtendedJBossXATerminator> getExtendedJBossXATerminatorInjector() { public InjectedValue<ExtendedJBossXATerminator> getExtendedJBossXATerminatorInjector() {
return extendedJBossXATerminatorInjector; return extendedJBossXATerminatorInjector;
} }


public InjectedValue<TransactionManager> getTransactionManagerInjector() { public InjectedValue<com.arjuna.ats.jbossatx.jta.TransactionManagerService> getTransactionManagerInjector() {
return transactionManagerInjector; return transactionManagerInjector;
} }


public InjectedValue<TransactionSynchronizationRegistry> getTransactionSynchronizationRegistryInjector() {
return transactionSynchronizationRegistryInjector;
}

public LocalTransactionContext getValue() throws IllegalStateException, IllegalArgumentException { public LocalTransactionContext getValue() throws IllegalStateException, IllegalArgumentException {
return context; return context;
} }
Expand Down
Expand Up @@ -29,7 +29,7 @@
import org.jboss.msc.service.ServiceController; import org.jboss.msc.service.ServiceController;
import org.jboss.msc.service.ServiceName; import org.jboss.msc.service.ServiceName;
import org.jboss.msc.service.ServiceTarget; 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}. * Service responsible for getting the {@link TransactionManager}.
Expand All @@ -41,17 +41,20 @@ public class TransactionManagerService extends AbstractService<TransactionManage


public static final ServiceName SERVICE_NAME = TxnServices.JBOSS_TXN_TRANSACTION_MANAGER; public static final ServiceName SERVICE_NAME = TxnServices.JBOSS_TXN_TRANSACTION_MANAGER;


private final InjectedValue<com.arjuna.ats.jbossatx.jta.TransactionManagerService> injectedArjunaTM = new InjectedValue<com.arjuna.ats.jbossatx.jta.TransactionManagerService>(); private static final TransactionManagerService INSTANCE = new TransactionManagerService();

private TransactionManagerService() {
}


public static ServiceController<TransactionManager> addService(final ServiceTarget target) { public static ServiceController<TransactionManager> addService(final ServiceTarget target) {
TransactionManagerService service = new TransactionManagerService(); ServiceBuilder<TransactionManager> serviceBuilder = target.addService(SERVICE_NAME, INSTANCE);
ServiceBuilder<TransactionManager> serviceBuilder = target.addService(SERVICE_NAME, service); // This is really a dependency on the global context. TODO: Break this later; no service is needed for TM really
serviceBuilder.addDependency(ArjunaTransactionManagerService.SERVICE_NAME, com.arjuna.ats.jbossatx.jta.TransactionManagerService.class, service.injectedArjunaTM); serviceBuilder.addDependency(TxnServices.JBOSS_TXN_LOCAL_TRANSACTION_CONTEXT);
return serviceBuilder.install(); return serviceBuilder.install();
} }


@Override @Override
public TransactionManager getValue() throws IllegalStateException { public TransactionManager getValue() throws IllegalStateException {
return injectedArjunaTM.getValue().getTransactionManager(); return ContextTransactionManager.getInstance();
} }
} }
Expand Up @@ -28,7 +28,7 @@
import org.jboss.msc.service.ServiceController; import org.jboss.msc.service.ServiceController;
import org.jboss.msc.service.ServiceName; import org.jboss.msc.service.ServiceName;
import org.jboss.msc.service.ServiceTarget; import org.jboss.msc.service.ServiceTarget;
import org.jboss.msc.value.InjectedValue; import org.wildfly.transaction.client.ContextTransactionSynchronizationRegistry;


/** /**
* Service that exposes the TransactionSynchronizationRegistry * Service that exposes the TransactionSynchronizationRegistry
Expand All @@ -38,17 +38,19 @@
public class TransactionSynchronizationRegistryService extends AbstractService<TransactionSynchronizationRegistry> { public class TransactionSynchronizationRegistryService extends AbstractService<TransactionSynchronizationRegistry> {
public static final ServiceName SERVICE_NAME = TxnServices.JBOSS_TXN_SYNCHRONIZATION_REGISTRY; public static final ServiceName SERVICE_NAME = TxnServices.JBOSS_TXN_SYNCHRONIZATION_REGISTRY;


private final InjectedValue<com.arjuna.ats.jbossatx.jta.TransactionManagerService> injectedArjunaTM = new InjectedValue<com.arjuna.ats.jbossatx.jta.TransactionManagerService>(); private static final TransactionSynchronizationRegistryService INSTANCE = new TransactionSynchronizationRegistryService();

private TransactionSynchronizationRegistryService() {
}


public static ServiceController<TransactionSynchronizationRegistry> addService(final ServiceTarget target) { public static ServiceController<TransactionSynchronizationRegistry> addService(final ServiceTarget target) {
TransactionSynchronizationRegistryService service = new TransactionSynchronizationRegistryService(); ServiceBuilder<TransactionSynchronizationRegistry> serviceBuilder = target.addService(SERVICE_NAME, INSTANCE);
ServiceBuilder<TransactionSynchronizationRegistry> serviceBuilder = target.addService(SERVICE_NAME, service); serviceBuilder.addDependency(TxnServices.JBOSS_TXN_LOCAL_TRANSACTION_CONTEXT);
serviceBuilder.addDependency(ArjunaTransactionManagerService.SERVICE_NAME, com.arjuna.ats.jbossatx.jta.TransactionManagerService.class, service.injectedArjunaTM);
return serviceBuilder.install(); return serviceBuilder.install();
} }


@Override @Override
public TransactionSynchronizationRegistry getValue() throws IllegalStateException { public TransactionSynchronizationRegistry getValue() throws IllegalStateException {
return injectedArjunaTM.getValue().getTransactionSynchronizationRegistry(); return ContextTransactionSynchronizationRegistry.getInstance();
} }
} }
Expand Up @@ -29,7 +29,7 @@
import org.jboss.msc.service.ServiceController; import org.jboss.msc.service.ServiceController;
import org.jboss.msc.service.ServiceName; import org.jboss.msc.service.ServiceName;
import org.jboss.msc.service.ServiceTarget; 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}. * Service responsible for getting the {@link UserTransaction}.
Expand All @@ -40,17 +40,19 @@
public class UserTransactionService extends AbstractService<UserTransaction> { public class UserTransactionService extends AbstractService<UserTransaction> {
public static final ServiceName SERVICE_NAME = TxnServices.JBOSS_TXN_USER_TRANSACTION; public static final ServiceName SERVICE_NAME = TxnServices.JBOSS_TXN_USER_TRANSACTION;


private final InjectedValue<com.arjuna.ats.jbossatx.jta.TransactionManagerService> injectedArjunaTM = new InjectedValue<com.arjuna.ats.jbossatx.jta.TransactionManagerService>(); private static final UserTransactionService INSTANCE = new UserTransactionService();

private UserTransactionService() {
}


public static ServiceController<UserTransaction> addService(final ServiceTarget target) { public static ServiceController<UserTransaction> addService(final ServiceTarget target) {
UserTransactionService service = new UserTransactionService(); ServiceBuilder<UserTransaction> serviceBuilder = target.addService(SERVICE_NAME, INSTANCE);
ServiceBuilder<UserTransaction> serviceBuilder = target.addService(SERVICE_NAME, service); serviceBuilder.addDependency(TxnServices.JBOSS_TXN_LOCAL_TRANSACTION_CONTEXT);
serviceBuilder.addDependency(ArjunaTransactionManagerService.SERVICE_NAME, com.arjuna.ats.jbossatx.jta.TransactionManagerService.class, service.injectedArjunaTM);
return serviceBuilder.install(); return serviceBuilder.install();
} }


@Override @Override
public UserTransaction getValue() throws IllegalStateException { public UserTransaction getValue() throws IllegalStateException {
return injectedArjunaTM.getValue().getUserTransaction(); return LocalUserTransaction.getInstance();
} }
} }
Expand Up @@ -31,7 +31,6 @@
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;


import javax.resource.spi.XATerminator;
import javax.transaction.TransactionManager; import javax.transaction.TransactionManager;
import javax.transaction.TransactionSynchronizationRegistry; import javax.transaction.TransactionSynchronizationRegistry;
import javax.transaction.UserTransaction; import javax.transaction.UserTransaction;
Expand Down Expand Up @@ -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 // Register WildFly transaction services - TODO: this should eventually be separated from the Narayana subsystem
final LocalTransactionContextService localTransactionContextService = new LocalTransactionContextService(); final LocalTransactionContextService localTransactionContextService = new LocalTransactionContextService();
context.getServiceTarget().addService(TxnServices.JBOSS_TXN_LOCAL_TRANSACTION_CONTEXT, 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_EXTENDED_JBOSS_XA_TERMINATOR, ExtendedJBossXATerminator.class, localTransactionContextService.getExtendedJBossXATerminatorInjector())
.addDependency(TxnServices.JBOSS_TXN_TRANSACTION_MANAGER, TransactionManager.class, localTransactionContextService.getTransactionManagerInjector()) .addDependency(TxnServices.JBOSS_TXN_ARJUNA_TRANSACTION_MANAGER, com.arjuna.ats.jbossatx.jta.TransactionManagerService.class, localTransactionContextService.getTransactionManagerInjector())
.addDependency(TxnServices.JBOSS_TXN_SYNCHRONIZATION_REGISTRY, TransactionSynchronizationRegistry.class, localTransactionContextService.getTransactionSynchronizationRegistryInjector())
.addDependency(TxnServices.JBOSS_TXN_ARJUNA_RECOVERY_MANAGER) // no injection .addDependency(TxnServices.JBOSS_TXN_ARJUNA_RECOVERY_MANAGER) // no injection
.setInitialMode(Mode.ACTIVE) .setInitialMode(Mode.ACTIVE)
.install(); .install();
Expand Down

0 comments on commit a96dacc

Please sign in to comment.