以下是我的设置详情:
Application Server:Weblogic 10.3 Infinispan版本:5.3.0.Final 模式:图书馆模式 操作系统:Linux 服务器设置:高可用性
我使用的是TreeCache API,因为我们从JBoss Cache迁移。
我看到的是,当我对正常的linux或Windows机器运行代码时。 put和get API工作正常。
但是当我针对Weblogic服务器运行代码时,就说从未成功说过Transaction Failed。 (XA交易)。请注意,当我不使用交易时会发生这种情况。
我通过在xml配置文件中声明Transactions来完成这项工作,如下所示:
<transaction transactionManagerLookupClass="org.infinispan.transaction.lookup.GenericTransactionManagerLookup"
lockingMode="OPTIMISTIC"
transactionMode="TRANSACTIONAL"
/>
它仍然无效。
然后我不得不通过以下方式调用weblogic UserTransaction “
@Resource
private static UserTransaction utx ;
utx = new InitialContext().lookup("java:comp/UserTransaction");
然后使用
utx.begin();
get node by fqn;
node.put(key,value);
utx.commit();
只有在上面的引号中,我在缓存中看到一个条目并且可以成功检索它
我想明白为什么会这样?我可以避免使用交易吗?
下面是xml配置文件:
<global>
<globalJmxStatistics enabled = "true" />
<transport clusterName = "CACHE_CLUSTER">
<properties>
<property name="configurationFile"
value="tcp.xml" />
</properties>
</transport>
</global>
<default>
<clustering mode="replication">
<async asyncMarshalling="true" useReplQueue="true" replQueueInterval="10" replQueueMaxElements="100" />
<stateTransfer timeout="2000000"/>
</clustering>
<transaction
transactionManagerLookupClass="org.infinispan.transaction.lookup.GenericTransactionManagerLookup"
lockingMode="OPTIMISTIC"
transactionMode="TRANSACTIONAL"
/>
<invocationBatching enabled = "true"/>
<jmxStatistics enabled="true"/>
</default>
答案 0 :(得分:0)
我强烈建议你移动Tree API并使用普通的Map API,它更易于使用,可以在有和没有事务的情况下使用。 Tree API确实需要批处理,这会强制启用事务。