本地无状态 EJB 与远程

Local stateless EJBs vs Remote

我是 EJB 方面的新手,但我得到了一个 EJB 层来改进。
该层包含一个公开可用操作的 EJB:

@Stateless(name = "myejb")
public class Facade implements FacadeRemote
{
    @EJB
    private EntityAHomeLocal entityAHome;

    @EJB
    private EntityBHomeLocal entityBHome;

// methods signatures and implementations
}

如您所见,此 EJB 使用其他管理实体操作的本地 EJB。

@Stateless
public class EntityAHome implements EntityAHomeLocal
{
    @PersistenceContext(name="myUnit")
    private EntityManager manager;


    // methods signatures and implementations
}

我很难完全理解这一层的架构。

严格来说,规范只说无状态 bean "typically" 池化(第 4.3.10.2 节),因此本地 bean 的行为是特定于供应商的,但实际上我相信所有主要供应商都这样做( for example).

本地和远程接口几乎完全可以互换,但有额外的部署限制(即它们必须部署在本地,当然),并且一些对本地接口的调用使用传递引用语义,而远程接口总是使用按值传递 (link).

我看不到任何会阻止该代码使用远程接口的东西,尽管我认为某些命名令人困惑 - 会话 bean (@Stateless) 不同于实体,在 EJB 中术语 "home" 指的是一种工厂 class,我认为这不是您的意图(?)。另外,请注意切换到 @Remote 会增加性能开销,如第二个 link 所述。