我是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
}
我很难完全理解这一层的架构。
答案 0 :(得分:0)
严格来说,规范只是说无状态bean是“通常”合并的(第4.3.10.2节),因此本地bean的行为是特定于供应商的,但实际上我相信所有主要供应商都这样做({{3} })。
本地和远程接口几乎完全可以互换,但有额外的部署限制(当然,它们必须在本地部署),并且对本地接口的一些调用使用传递引用语义,而远程接口总是使用pass-按值(for example)。
我看不到任何会阻止该代码使用远程接口的东西,虽然我认为一些命名令人困惑 - 会话bean(@Stateless
)与实体不同,并且在EJB术语中“ “家”是指一种工厂类,我认为这不是你的意图(?)。此外,请注意,切换到@Remote
可能会增加性能开销,如第二个链接所示。