Сохранение Infinispan в кеш на сервере Weblogic

Ниже приведены сведения о моей настройке:

Сервер приложений: 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>

person Arjun    schedule 25.11.2013    source источник


Ответы (1)


Я настоятельно рекомендую вам переместить Tree API и использовать обычный Map API, который проще в использовании и может использоваться как с транзакциями, так и без них. Tree API действительно требовал пакетной обработки, что заставляло включать транзакции.

person Galder Zamarreño    schedule 27.11.2013
comment
Спасибо за ответ, Гальдер. Я выбрал treecache, потому что мы переходим с JBoss Cache, ожидаемые изменения были минимальными. - person Arjun; 27.11.2013
comment
Но я серьезно рассмотрю этот вариант перехода на mapAPI. Я пробовал это раньше, и это сработало отлично. - person Arjun; 27.11.2013
comment
Даже использование одного дозирования не решает проблемы. Для этого я разместил stackoverflow.com/questions/20240284/ - person Arjun; 27.11.2013
comment
Спасибо за ответ, Гальдер. Я продолжаю на том же форуме, потому что описание сообщения работает так, как я заставляю его работать на двухузловых серверах высокой доступности Weblogic. Но когда я использую тот же код против автономного сервера веб-логики. транзакция.commit () выдает ошибку, говоря, что транзакция не существует .. Я хочу получить доступ к корню, если это проблема с обработкой транзакций сервера Infinispan или Weblogic. - person Arjun; 05.12.2013