CMT中的PersistenceContext似乎与BMT中的PersistenceContext不同

时间:2012-05-25 14:55:41

标签: java transactions ejb-3.0

我目前在使用PersistenceContext刷新数据时遇到问题。 我有一个调用BMT EJB3 bean的CMT EJB3 bean。在BMT bean中,我在一个对象上做了一些处理逻辑。我提交了更改,我可以看到数据库中的更改。

在我的BMT方法完成该过程后,我将返回我的CMT bean。我从PersistenceContext重新获取(.find()方法)我的对象(因为BMT bean改变了一些值),但我仍然得到我的对象的旧值。我甚至尝试过.refresh()方法,但数据没有得到更新。

CMT和BMT bean是否可能使用不同的PersistenceContext?

1 个答案:

答案 0 :(得分:1)

持久化上下文通过正在运行的事务传播,除了正常的持久化上下文(例如,非扩展)之外,其L1高速缓存的生命周期范围限定为同一事务。

因此,如果您在BMT bean中启动一个新事务,与其持久化上下文交互然后提交,那么调用CMT bean实际上不会在其持久化上下文中具有更新值。

读取DB中的新值应该可以正常工作。因此,如果您在数据库中看到这些更改,特别是如果CMT和BMT bean都部署在同一个应用程序中(因此没有L2不一致性影响),那么refresh实际应该可以正常工作。

对CMT bean的新调用会发生什么?它会看到更新后的值吗?