如何在我自己的事务中包装对象更改并将其与 Hibernate 合并到 JTA?

发布于 2024-09-28 05:55:50 字数 520 浏览 10 评论 0原文

我有一个 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 Agents and several tables and I need the changes in the Agents 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏天碎花小短裙 2024-10-05 05:55:50

您可以使用像 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).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文