0

我在我的 Java EE 应用程序中遇到问题 - 通常,我保留一个对象,发送一个 JMS,然后在 MDB 上我试图找到该对象 - 有时它可以工作,但有时我在 JPA 查找时收到 null。我怀疑交易没有完成,但我找不到解决方案。

我不确定我是否理解正确 - 在 CMT 中,事务在调用来自 @Local 或 @Remote 接口的 Session Bean 方法的那一刻开始?如果我在这个 Session Bean 中有一个方法链,而其中只有一个方法持久化了我的对象 - 所有链接的方法都将在一个事务中调用吗?如果其中一些也暴露在界面中怎么办?

发送 JMS 是链式方法之一 - 我是否也应该在接口中公开此方法并在保留我的对象的方法之后调用它?如果我不想在接口中公开该方法怎么办?

抱歉,缺乏 EJB 知识。谢谢你的帮助 :)

4

2 回答 2

0

我建议您不要在 MDB bean 中编写逻辑,为此使用会话 bean,然后将其注入 MDB。关于方法调用,如果您正在调用同一类中的方法,即使通过提供 @REQUIRES_NEW 属性它也不会打开新事务。为了做到这一点,注入 bean 本身并调用注入的 bean,这将打开新的事务。

于 2012-07-20T03:15:10.690 回答
0

Did you persist and find your object with the same entity manager?

You can always find your object if you are in the same transaction which persists the object before. If you persist and find the object with different transactions, then you cannot see the object until persisting transaction is committed.

My suggestion is: Use the same transaction, so that you can always find out your object. Or in Java EE applications, just simply use the same entity manager.

于 2012-07-20T01:21:30.850 回答