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

Java 如何在我自己的事务中包装对象更改,并将其与Hibernate合并到JTA?,java,hibernate,tomcat,transactions,jta,Java,Hibernate,Tomcat,Transactions,Jta,我有一个web应用程序,部署在Tomcat6上,它使用Hibernate。 它在JMS队列上接收消息,这些消息通过Hibernate触发对my DB和我的对象(Agent)的更改。 web请求还可以通过Hibernate访问数据库,并访问共享对象(有一个由singleton持有的ConcurrentHashMap。 我的问题是,我有一条JMS消息,它更改了几个不同的代理和几个表,我需要代理中的更改在DB事务成功完成时才可用。此外,我不想使用读锁,因为这对我的性能危害太大。 我正在考虑以某种方式为

我有一个web应用程序,部署在Tomcat6上,它使用Hibernate。 它在JMS队列上接收消息,这些消息通过Hibernate触发对my DB和我的对象(
Agent
)的更改。
web请求还可以通过Hibernate访问数据库,并访问共享对象(有一个由singleton持有的
ConcurrentHashMap

我的问题是,我有一条JMS消息,它更改了几个不同的
代理和几个表,我需要
代理中的更改在DB事务成功完成时才可用。此外,我不想使用读锁,因为这对我的性能危害太大。
我正在考虑以某种方式为我的singleton实现
XAResource
接口,然后使用JTA管理我的singleton和Hibernate事务。
你怎么认为?听起来合理吗?我走远了吗

如果需要任何其他详细信息,请随时询问

Ittai

您可以使用像EHCache这样的事务性缓存,而不是实现
XAResource
,它从2.0开始就支持JTA(即,它可以充当XA资源,并与其他XA资源一起参与XA事务).

您的意思是我应该让EHCache维护上述映射吗?我对我发布的这个解决方案有一个性能问题()。如果能收到您的意见,我将不胜感激。