package org.infinispan.test.fwk;
import javax.transaction.TransactionManager;
import javax.transaction.UserTransaction;
import org.infinispan.commons.util.LegacyKeySupportSystemProperties;
import org.infinispan.transaction.lookup.EmbeddedTransactionManagerLookup;
import org.infinispan.transaction.lookup.JBossStandaloneJTAManagerLookup;
import org.infinispan.transaction.lookup.TransactionManagerLookup;
import org.infinispan.util.tx.lookup.GeronimoTransactionManagerLookup;
/**
* A simple abstraction for transaction manager interaction
*
* @author Jason T. Greene
*/
public class TransactionSetup {
static {
// make the log in-memory to make tests run faster. Note that the config is frozen at system initialization time,
// so you need to set this before classloading the transaction system and can't change it within the same vm.
JBossTransactionsUtils.setVolatileStores();
}
private interface Operations {
UserTransaction getUserTransaction();
String getLookup();
TransactionManagerLookup lookup();
void cleanup();
TransactionManager getManager();
}
public static final String JBOSS_TM = "jbosstm";
public static final String DUMMY_TM = "dummytm";
public static final String GERONIMO_TM = "geronimotm";
public static final String JTA = LegacyKeySupportSystemProperties.getProperty("infinispan.test.jta.tm", "infinispan.tm");
private static Operations operations;
static {
init();
}
private static void init() {
String property = JTA;
if (DUMMY_TM.equalsIgnoreCase(property)) {
System.out.println("Transaction manager used: Dummy");
final String lookup = EmbeddedTransactionManagerLookup.class.getName();
final EmbeddedTransactionManagerLookup instance = new EmbeddedTransactionManagerLookup();
operations = new Operations() {
@Override
public UserTransaction getUserTransaction() {
return EmbeddedTransactionManagerLookup.getUserTransaction();
}
@Override
public void cleanup() {
EmbeddedTransactionManagerLookup.cleanup();
}
@Override
public String getLookup() {
return lookup;
}
@Override
public TransactionManagerLookup lookup() {
return instance;
}
@Override
public TransactionManager getManager() {
try {
return instance.getTransactionManager();
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
};
} else if (GERONIMO_TM.equalsIgnoreCase(property)){
System.out.println("Transaction manager used: Geronimo");
final String lookup = GeronimoTransactionManagerLookup.class.getName();
final GeronimoTransactionManagerLookup instance = new GeronimoTransactionManagerLookup();
operations = new Operations() {
@Override
public UserTransaction getUserTransaction() {
try {
return instance.getUserTransaction();
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
public void cleanup() {
}
@Override
public String getLookup() {
return lookup;
}
@Override
public TransactionManagerLookup lookup() {
return instance;
}
@Override
public TransactionManager getManager() {
try {
return instance.getTransactionManager();
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
};
} else {
System.out.println("Transaction manager used: JBossTM");
final String lookup = JBossStandaloneJTAManagerLookup.class.getName();
final JBossStandaloneJTAManagerLookup instance = new JBossStandaloneJTAManagerLookup();
operations = new Operations() {
@Override
public UserTransaction getUserTransaction() {
try {
return instance.getUserTransaction();
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
public void cleanup() {
}
@Override
public String getLookup() {
return lookup;
}
@Override
public TransactionManagerLookup lookup() {
return instance;
}
@Override
public TransactionManager getManager() {
try {
return instance.getTransactionManager();
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
};
}
}
public static TransactionManager getManager() {
return operations.getManager();
}
public static String getManagerLookup() {
return operations.getLookup();
}
public static TransactionManagerLookup lookup() {
return operations.lookup();
}
public static UserTransaction getUserTransaction() {
return operations.getUserTransaction();
}
public static void cleanup() {
operations.cleanup();
}
}