package org.infinispan.util.tx.lookup; import javax.transaction.TransactionManager; import javax.transaction.UserTransaction; import org.apache.geronimo.transaction.GeronimoUserTransaction; import org.apache.geronimo.transaction.log.HOWLLog; import org.apache.geronimo.transaction.manager.GeronimoTransactionManager; import org.apache.geronimo.transaction.manager.TransactionLog; import org.apache.geronimo.transaction.manager.XidFactoryImpl; import org.infinispan.configuration.global.GlobalConfiguration; import org.infinispan.factories.annotations.Inject; import org.infinispan.transaction.lookup.TransactionManagerLookup; import org.infinispan.util.logging.Log; import org.infinispan.util.logging.LogFactory; /** * Transaction manager lookup for testing purposes. Use this lookup class to verify that * Infinispan works correctly with Geronimo Transaction Manager. * * In order to use this TM lookup, run tests with -Dinfinispan.test.jta.tm=geronimotm * * @author mgencur * */ public class GeronimoTransactionManagerLookup implements TransactionManagerLookup { private static final int DEFAULT_TRANSACTION_TIMEOUT = 600; private static final Log log = LogFactory.getLog(GeronimoTransactionManagerLookup.class); private TransactionManager manager; private UserTransaction userTransaction; private TransactionLog transactionLog; @Inject public void init(GlobalConfiguration globalCfg) { final String bufferClassName = "org.objectweb.howl.log.BlockLogBuffer"; final int bufferSizeKBytes = 1; final boolean checksumEnabled = true; final boolean adler32Checksum = true; final int flushSleepTimeMilliseconds = 50; final String logFileExt = "log"; final String logFileName = "transaction"; final int maxBlocksPerFile = -1; final int maxLogFiles = 2; final int minBuffers = 4; final int maxBuffers = 0; final int threadsWaitingForceThreshold = -1; final String logFileDir = System.getProperty("java.io.tmpdir"); try { transactionLog = new HOWLLog(bufferClassName, bufferSizeKBytes, checksumEnabled, adler32Checksum, flushSleepTimeMilliseconds, logFileDir, logFileExt, logFileName, maxBlocksPerFile, maxBuffers, maxLogFiles, minBuffers, threadsWaitingForceThreshold, new XidFactoryImpl(), null); ((HOWLLog) transactionLog).doStart(); } catch (Exception e) { throw new RuntimeException(e); } } @Override public synchronized TransactionManager getTransactionManager() throws Exception { if (manager == null) { try { manager = new GeronimoTransactionManager(DEFAULT_TRANSACTION_TIMEOUT, transactionLog); } catch (Exception e) { throw new RuntimeException(e); } } if (log.isInfoEnabled()) { log.retrievingTm(manager); } return manager; } public UserTransaction getUserTransaction() throws Exception { if (userTransaction == null) { userTransaction = (UserTransaction) new GeronimoUserTransaction(getTransactionManager()); } return userTransaction; } @Override public String toString() { return "GeronimoTransactionManagerLookup"; } }