Как обернуть изменение объекта в моей собственной транзакции и включить его в Hibernate для JTA? - PullRequest
1 голос
/ 19 октября 2010

У меня есть веб-приложение, которое я развертываю на Tomcat 6, и оно использует Hibernate. Он получает сообщения в очереди JMS, которые вызывают изменения как в моей БД, через Hibernate, так и в Мой объект (Agent).
Веб-запросы также обращаются к БД через Hibernate и обращаются к общему объекту (есть ConcurrentHashMap<AgentId,Agent>, хранящийся в одиночном коде).
Моя проблема в том, что у меня есть сообщение JMS, которое меняет несколько различных Agent s и несколько таблиц, и мне нужно, чтобы изменения в Agent s были доступны тогда и только тогда, когда транзакция БД завершена успешно. Кроме того, я не хочу использовать блокировки чтения, поскольку для меня это слишком опасно для производительности.
Я думал о как-то реализации интерфейса XAResource для моего синглтона, а затем с помощью JTA для управления как моим синглтоном, так и моей транзакцией Hibernate.
Как вы думаете? Это звучит разумно? Я далеко?

Если вам нужна дополнительная информация, пожалуйста, не стесняйтесь спрашивать
Еффий

1 Ответ

3 голосов
/ 19 октября 2010

Вместо реализации XAResource вы можете использовать транзакционный кеш, такой как EHCache, который поддерживает JTA начиная с 2.0 (то есть он может действовать как ресурс XA и участвовать в транзакции XA вместе с другими ресурсами XA).

...