Ниже приведены сведения о моей настройке:
Сервер приложений: Weblogic 10.3 Версия Infinispan: 5.3.0. Окончательный режим: режим библиотеки Операционная система: Настройка сервера Linux: высокая доступность
Я использую TreeCache API, так как мы перешли с JBoss Cache.
Я вижу, когда запускаю код на обычных машинах с Linux или Windows. поставить и получить API работает нормально.
Но когда я запускаю код на сервере Weblogic, команда put никогда не удавалась, говоря, что Transaction Failed. (Транзакция XA). Обратите внимание, это происходит, когда я не использую транзакции.
Я выполнил эту работу, объявив транзакции в файле конфигурации xml, как показано ниже:
<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>