瞅瞅Infinispan事务管理源码是啥样的

2022-06-27 00:00:00 专区 事务 容器 数据源 事务管理

希望可以更直观地了解Infinispan的事务管理,(提一点Infinispan是遵循LGPL,具体开源协议参阅《各种开源协议介绍 BSD、Apache Licence、GPL V2 、GPL V3 、LGPL、MIT》)本文重点在JTA的使用

在上一篇《Ehcache 事务管理源码探析》中针对Ehcache的JTA事务管理说明了一番,是在JBoss服务器环境下使用JTA。同样在Infinispan中也具有获取JBoss容器事务管理器的能力,即配置事务查找器为 JBossTransactionManagerLookup,实现源码如下:

/**
* Uses JNDI to look-up the {
@link TransactionManager} instance from "java:/TransactionManager".
*
*
@author Bela Ban, Aug 26 2003
*
@since 4.0
*/
public class JBossTransactionManagerLookup implements TransactionManagerLookup {

public TransactionManager getTransactionManager() throws Exception {
String as7Location = "java:jboss/TransactionManager";

InitialContext initialContext = new InitialContext();
try {
// Check for JBoss AS 7
return (TransactionManager) initialContext.lookup(as7Location);
} catch (NamingException ne) {
// Fall back and try for AS 4 ~ 6
String legacyAsLocation = "java:/TransactionManager";

try {
// Check for JBoss AS 4 ~ 6
return (TransactionManager) initialContext.lookup(legacyAsLocation);
} catch (NamingException neAgain) {
throw new ConfigurationException("Unable to locate a transaction manager in JNDI, either in " + as7Location + " or " + legacyAsLocation);
}

} finally {
Util.close(initialContext);
}
}
}

相关文章