本地无状态EJB与远程

时间:2015-07-31 16:23:36

标签: java java-ee jpa ejb layer

我是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
}

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

  • 这种结构常见吗?
  • 本地无状态EJB是否像远程无状态EJB一样通过实例池进行管理?
  • 即使entityAHome和entityBHome是远程EJB,它仍然可以工作吗?

1 个答案:

答案 0 :(得分:0)

严格来说,规范只是说无状态bean是“通常”合并的(第4.3.10.2节),因此本地bean的行为是特定于供应商的,但实际上我相信所有主要供应商都这样做({{3} })。

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

我看不到任何会阻止该代码使用远程接口的东西,虽然我认为一些命名令人困惑 - 会话bean(@Stateless)与实体不同,并且在EJB术语中“ “家”是指一种工厂类,我认为这不是你的意图(?)。此外,请注意,切换到@Remote可能会增加性能开销,如第二个链接所示。