【发布时间】:2011-05-05 05:25:07
【问题描述】:
我正在使用 EJB...我执行以下操作,但我不知道为什么注入的 EntityManager 没有按预期工作。
- EJB1 调用 EJB2 上的一个方法来写入数据库。
- 当 EJB2 返回时,EJB1 向 MDB 发送一条消息。
- MDB 调用 EJB3 读取 DB 并执行一些工作。
我的问题是使用@PersistenceContext 注入到所有 3 个 EJB 中的 EntityManager 无法正常工作。在 EJB2 中调用 persist() 不会反映在 EJB3 中注入的 EntityManager 上。 可能有什么问题? 希望我把我的问题说清楚了。 现在使用容器管理的事务。
【问题讨论】:
-
这是使用 JPA 对吧?我对 JPA 不太熟悉,但我怀疑每个 EJB 都会获得不同的 EntityManager 实例。当您调用persist时,您确定它没有缓存实体并且它已提交到数据库中吗?即使实体在数据库中提交,它也可能不会出现在不同的 EntityManager 实例中,除非您清除其缓存并重新加载所有实体。
-
是的,使用 JPA。不应该有新的 EntityManager 实例。使用 @PersistenceContext 的注入重用了相同的 EntityManager 实例,其生命周期由容器管理。好吧,我相信会发生这种情况,我不是 100% 确定。
-
不是每个 EJB 都有自己的 persistence.xml 文件吗?如果是这样,这是否意味着每个 EJB必须 拥有自己的 EntityManager 实例?
-
对不起,我认为这不正确
标签: jpa jakarta-ee ejb-3.0 ejb jta