本地无状态 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
}
我很难完全理解这一层的架构。
- 这种架构常见吗?
- 本地无状态 EJB 是否像远程无状态 EJB 一样通过实例池进行管理?
- 即使 entityAHome 和 entityBHome 是远程 EJB,它仍然有效吗?
严格来说,规范只说无状态 bean "typically" 池化(第 4.3.10.2 节),因此本地 bean 的行为是特定于供应商的,但实际上我相信所有主要供应商都这样做( for example).
本地和远程接口几乎完全可以互换,但有额外的部署限制(即它们必须部署在本地,当然),并且一些对本地接口的调用使用传递引用语义,而远程接口总是使用按值传递 (link).
我看不到任何会阻止该代码使用远程接口的东西,尽管我认为某些命名令人困惑 - 会话 bean (@Stateless
) 不同于实体,在 EJB 中术语 "home" 指的是一种工厂 class,我认为这不是您的意图(?)。另外,请注意切换到 @Remote
会增加性能开销,如第二个 link 所述。
我是 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,它仍然有效吗?
严格来说,规范只说无状态 bean "typically" 池化(第 4.3.10.2 节),因此本地 bean 的行为是特定于供应商的,但实际上我相信所有主要供应商都这样做( for example).
本地和远程接口几乎完全可以互换,但有额外的部署限制(即它们必须部署在本地,当然),并且一些对本地接口的调用使用传递引用语义,而远程接口总是使用按值传递 (link).
我看不到任何会阻止该代码使用远程接口的东西,尽管我认为某些命名令人困惑 - 会话 bean (@Stateless
) 不同于实体,在 EJB 中术语 "home" 指的是一种工厂 class,我认为这不是您的意图(?)。另外,请注意切换到 @Remote
会增加性能开销,如第二个 link 所述。