Skip to content

Commit

Permalink
[WFLY-7233] Add ExtendedJBossXATerminator service to the transactions…
Browse files Browse the repository at this point in the history
… subsystem
  • Loading branch information
Gytis Trikleris committed Oct 27, 2016
1 parent 35ff7b3 commit 760e052
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 16 deletions.
@@ -0,0 +1,53 @@
/*
* JBoss, Home of Professional Open Source.
* Copyright 2016, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/

package org.jboss.as.txn.service;

import org.jboss.msc.service.Service;
import org.jboss.msc.service.StartContext;
import org.jboss.msc.service.StartException;
import org.jboss.msc.service.StopContext;
import org.jboss.tm.ExtendedJBossXATerminator;

/**
* The ExtendedJBossXATerminator service.
*
* @author <a href="mailto:gytis@redhat.com">Gytis Trikleris</a>
*/
public final class ExtendedJBossXATerminatorService implements Service<ExtendedJBossXATerminator> {

private final ExtendedJBossXATerminator value;

public ExtendedJBossXATerminatorService(ExtendedJBossXATerminator value) {
this.value = value;
}

public void start(StartContext context) throws StartException {
}

public void stop(StopContext context) {
}

public ExtendedJBossXATerminator getValue() throws IllegalStateException {
return TxnServices.notNull(value);
}
}
Expand Up @@ -39,6 +39,8 @@ public final class TxnServices {

public static final ServiceName JBOSS_TXN_XA_TERMINATOR = JBOSS_TXN.append("XATerminator");

public static final ServiceName JBOSS_TXN_EXTENDED_JBOSS_XA_TERMINATOR = JBOSS_TXN.append("ExtendedJBossXATerminator");

public static final ServiceName JBOSS_TXN_ARJUNA_OBJECTSTORE_ENVIRONMENT = JBOSS_TXN.append("ArjunaObjectStoreEnvironment");

public static final ServiceName JBOSS_TXN_ARJUNA_TRANSACTION_MANAGER = JBOSS_TXN.append("ArjunaTransactionManager");
Expand Down
Expand Up @@ -32,27 +32,20 @@
* The XATerminator service.
*
* @author <a href="mailto:david.lloyd@redhat.com">David M. Lloyd</a>
* @author <a href="mailto:gytis@redhat.com">Gytis Trikleris</a>
*/
public final class XATerminatorService implements Service<JBossXATerminator> {
private volatile JBossXATerminator value;

private final boolean jts;
private final JBossXATerminator value;

public XATerminatorService(boolean jts) {
this.jts = jts;
public XATerminatorService(final JBossXATerminator value) {
this.value = value;
}


public void start(final StartContext context) throws StartException {
if (jts) {
value = new com.arjuna.ats.internal.jbossatx.jts.jca.XATerminator();
} else {
value = new com.arjuna.ats.internal.jbossatx.jta.jca.XATerminator();
}
}

public void stop(final StopContext context) {
value = null;
}

public JBossXATerminator getValue() throws IllegalStateException {
Expand Down
Expand Up @@ -65,6 +65,7 @@
import org.jboss.as.txn.service.ArjunaRecoveryManagerService;
import org.jboss.as.txn.service.ArjunaTransactionManagerService;
import org.jboss.as.txn.service.CoreEnvironmentService;
import org.jboss.as.txn.service.ExtendedJBossXATerminatorService;
import org.jboss.as.txn.service.JTAEnvironmentBeanService;
import org.jboss.as.txn.service.TransactionManagerService;
import org.jboss.as.txn.service.TransactionSynchronizationRegistryService;
Expand Down Expand Up @@ -394,20 +395,32 @@ private void performRecoveryEnvBoottime(OperationContext context, ModelNode mode
final String recoveryStatusBindingName = TransactionSubsystemRootResourceDefinition.STATUS_BINDING.resolveModelAttribute(context, model).asString();
final boolean recoveryListener = TransactionSubsystemRootResourceDefinition.RECOVERY_LISTENER.resolveModelAttribute(context, model).asBoolean();

// XATerminator has no deps, so just add it in there
final XATerminatorService xaTerminatorService = new XATerminatorService(jts);
context.getServiceTarget().addService(TxnServices.JBOSS_TXN_XA_TERMINATOR, xaTerminatorService).setInitialMode(Mode.ACTIVE).install();


final ArjunaRecoveryManagerService recoveryManagerService = new ArjunaRecoveryManagerService(recoveryListener, jts);
final ServiceBuilder<RecoveryManagerService> recoveryManagerServiceServiceBuilder = context.getServiceTarget().addService(TxnServices.JBOSS_TXN_ARJUNA_RECOVERY_MANAGER, recoveryManagerService);
// add dependency on JTA environment bean
recoveryManagerServiceServiceBuilder.addDependencies(deps);

final XATerminatorService xaTerminatorService;
final ExtendedJBossXATerminatorService extendedJBossXATerminatorService;

if (jts) {
recoveryManagerServiceServiceBuilder.addDependency(ServiceName.JBOSS.append("iiop-openjdk", "orb-service"), ORB.class, recoveryManagerService.getOrbInjector());

com.arjuna.ats.internal.jbossatx.jts.jca.XATerminator terminator = new com.arjuna.ats.internal.jbossatx.jts.jca.XATerminator();
xaTerminatorService = new XATerminatorService(terminator);
extendedJBossXATerminatorService = new ExtendedJBossXATerminatorService(terminator);
} else {
com.arjuna.ats.internal.jbossatx.jta.jca.XATerminator terminator = new com.arjuna.ats.internal.jbossatx.jta.jca.XATerminator();
xaTerminatorService = new XATerminatorService(terminator);
extendedJBossXATerminatorService = new ExtendedJBossXATerminatorService(terminator);
}

context.getServiceTarget().addService(TxnServices.JBOSS_TXN_XA_TERMINATOR, xaTerminatorService)
.setInitialMode(Mode.ACTIVE).install();
context.getServiceTarget()
.addService(TxnServices.JBOSS_TXN_EXTENDED_JBOSS_XA_TERMINATOR, extendedJBossXATerminatorService)
.setInitialMode(Mode.ACTIVE).install();

recoveryManagerServiceServiceBuilder
.addDependency(SocketBinding.JBOSS_BINDING_NAME.append(recoveryBindingName), SocketBinding.class, recoveryManagerService.getRecoveryBindingInjector())
.addDependency(SocketBinding.JBOSS_BINDING_NAME.append(recoveryStatusBindingName), SocketBinding.class, recoveryManagerService.getStatusBindingInjector())
Expand Down

0 comments on commit 760e052

Please sign in to comment.