如何在我自己的事务中包装对象更改并将其与 Hibernate 合并到 JTA?
我有一个 Web 应用程序,我将其部署在 Tomcat 6 上并使用 Hibernate。 它接收 JMS 队列上的消息,这些消息通过 Hibernate 触发对我的数据库和我的对象(Agent
)的更改。
Web 请求还通过 Hibernate 访问数据库,并访问共享对象(有一个由单例保存的 ConcurrentHashMap
)。
我的问题是,我有一个 JMS 消息,它更改了几个不同的 Agent
和几个表,并且我需要当且仅当数据库中的 Agent
中的更改可用交易成功完成。此外,我不想使用读锁,因为这对我来说性能风险太大。
我正在考虑以某种方式为我的单例实现 XAResource
接口,然后使用 JTA 来管理我的单例和 Hibernate 事务。
你怎么认为?听起来合理吗?我还差得远吗?
如果需要任何其他详细信息,请随时询问
一泰
I have a web-app, which I deploy on Tomcat 6 and it uses Hibernate.
It receives messages on a JMS queue which trigger changes both to my DB, via Hibernate and to an Object of mine (Agent
).
The web-requests also access the DB, via Hibernate, and access the shared object (there's a ConcurrentHashMap<AgentId,Agent>
held by a singleton).
My problem is that I have a JMS message which changes several different Agent
s and several tables and I need the changes in the Agent
s to be available if and only if the DB transaction completed successfully. In addition I do not want to employ read locks as that is too much of a performance hazard for me.
I was thinking of somehow implementing the XAResource
interface for my singleton and then use JTA to manage both my singleton and my Hibernate transaction.
What do you think? Does it sound reasonable? Am I way off?
If any additional details are needed please don't hesitate to ask
Ittai
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用像 EHCache 这样的事务性缓存,而不是实现 XAResource,它从 2.0 开始就支持 JTA(即它可以充当 XA 资源并与其他 XA 资源一起参与 XA 事务)。
Instead of implementing
XAResource
, you could use a transactional cache like EHCache which supports JTA since 2.0 (i.e. it can act as an XA resource and participate in a XA transaction alongside other XA resources).