相同的WAR文件,相同的包,使用远程接口调用EJB



问这个问题有点奇怪,我刚刚面对一个开发中的应用程序,它在同一包上广泛使用了@EJB Remote到@EJB Remote。我知道这是一个非常糟糕的方法,因为你有一个事务,你做剩下的可能与CDI和管理的实体,如果必要的话,本地EJB需要新的。在这个应用程序中,我看到了EclipseLink ConcurrencyManager异常锁,在惰性加载时巨大的RMI IIOP堆栈。以及其他灰色行为。(这个远程EJB不传递实体,而只是在实体之间传递指向@Id的指针,然后使用EntityManager。find, EntityManager。合并和偶尔EntityManager.refresh)

我在web上找不到任何答案(可能是我不够仔细),也没有在EJB规范中找到。

你有2个实现@无状态EImpl1和@无状态EImpl2他们每个实现@远程E1和@远程E2。

on EImpl1 you @EJB E2.

E2的反应是否与TransactionAttributeType类似。REQUIRES_NEW吗?我打赌答案是肯定的,但我不确定,如果有人能给我解释一下……我很感激

非常感谢你的帮助。

ejb 3.1 spec

默认情况下,如果没有为具有容器管理事务划分的企业bean的方法指定TransactionAttribute注释,则该方法的事务属性的值定义为REQUIRED

持久性2.0规范

持久性上下文的传播仅适用于本地环境。持久化上下文不会传播到远程层

你会看到你所看到的,因为持久化上下文没有传播到远程层,并且TransactionAttribute的默认值是REQUIRED。

最新更新