问这个问题有点奇怪,我刚刚面对一个开发中的应用程序,它在同一包上广泛使用了@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。