2010-10-19 2 views
1

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

Если необходимы какие-либо дополнительные подробности, пожалуйста, не стесняйтесь обращаться к нам
Еффей

ответ

3

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

+0

Вы имеете в виду, что я должен просто поддерживать EHCache вышеупомянутую карту? – Ittai

+0

@Ittai Да, точно. –

+0

У меня есть проблема с производительностью относительно этого решения, которое я опубликовал (http://stackoverflow.com/questions/3967111/how-does-ehcache-implement-its-transactions). Я был бы признателен, если бы смог получить ваш вход. – Ittai

Смежные вопросы