Распределенный Ehcache, работающий с использованием JTA - PullRequest
1 голос
/ 23 ноября 2011

Я пытаюсь провести некоторое тестирование распределенной памяти транзакций, используя Terracotta Ehcache (с открытым исходным кодом).У меня возникли проблемы с пониманием его работы с JTA.В коде я обнаружил, что кеш, заинтересованный в распределенной транзакции, включается в качестве ресурса с JTA, на котором JTA позже выполняет двухфазную фиксацию.

Мой вопрос: если в качестве ресурса зачислен только один кеш, как JTA сможет атомарно обновлять все остальные кеши в распределенных настройках?Мы не передаем другие кеши, ссылающиеся на JTA, поэтому обновление по ним не производится.Я чувствую, что здесь не хватает какой-то строки, кто-нибудь может объяснить, как она работает?Я также новичок в J2EE, мне не хватает некоторой концепции J2EE, которая позволяет автоматически передавать ссылки на другие кеши в JTA?

Ответы [ 3 ]

4 голосов
/ 23 ноября 2011

Ehcache, если он настроен таким образом (transactionalMode="xa" или transactionalMode="xa_strict"), может работать как полный XAResource для участия в транзакциях JTA (глобальных транзакциях), который контролируется диспетчером транзакций (с вашего сервера приложений или некоторого автономного сервера). товар). Ehcache сам заботится о регистрации в Менеджере транзакций в этом случае. Кроме того, в качестве полного XAResource можно зарегистрировать несколько кэшей, которые могут быть частью транзакции.

Сильная согласованность на уровне кластера довольно дорогая (бесплатного обеда нет). Он сводится к использованию блокировок и синхронных (сетевых) операций, включая ожидание, подтверждение и т. Д.

Для более подробного прочтения, я бы посоветовал вам обратиться к документации Ehcache: Транзакции в Ehcache

1 голос
/ 25 ноября 2011

Каждый кэш, сконфигурированный с transactionalMode="xa_strict" и обновленный в транзакции JTA, зарегистрируется как XAResource для менеджера транзакций.Это все автоматизировано и прозрачно для конечного пользователя, у вас нет ничего особенного, чтобы сделать этот механизм включенным, вы просто должны использовать кеш внутри JTA, умоляю

чтобы получить доступ к другим нетранзакционным кэшам в контексте транзакции JTA, они не будут частью транзакции и будут просто обновляться, как только вы их измените.

0 голосов
/ 02 октября 2014

Пробовал xa_strict, но, кажется, нет автоматической регистрации XAResource?Переключение на обычный xa работает, хотя ...

...