2

我正在维护一个 EJB 2 CMP 遗留应用程序,该应用程序在 JBoss 4.0.4 GA 应用程序服务器上运行,并部署了实体/无状态会话 bean。所有 EJB 样板代码都是通过 XDoclet 从 EntityEJB/EntityEJBManager 注释生成的。

我注意到,当我的 GUI 客户端调用外观create方法时,我的服务器日志中有很多 EJBException 案例以及“检测到可重入方法调用”消息,这会回滚事务。

这个异常是什么意思?我怎样才能避免出现这样的错误(不幸的是,我还不能重现)


更新:找到这个解释什么是 reentrancy 的链接,但是,在我看来,它说我的应用程序不能同时访问?

4

3 回答 3

1

I've seen this before where EJB1 calls EJB2 which calls back to EJB1 within the container as part of the same transaction.

You can tell the container to allow this by marking EJB1 as reentrant which will allow it to be accessed multiple times in the same transaction.

This is done in the deployment descriptor with the following tag:

<reentrant>True</reentrant>

There should be a corresponding EntityEJB annotation that XDoclet can use to generate this for you.

于 2009-04-05T07:53:33.867 回答
1

我们刚刚遇到了同样的问题,我们的解决方案是双重的。首先,我们确保在我们的 ejb-jar.xml 中没有一个 ejb 具有 NotSupported 的事务属性。然后我们使用“每个事务的实例”作为我们的乐观锁定策略。这有点像腰带和大括号的方法,但它有效

于 2010-11-09T12:57:18.860 回答
0

这确实意味着不能同时访问有问题的实体 bean,这是有道理的,因为它可能会破坏数据。

于 2009-03-20T17:00:25.330 回答