Jakarta ee 实现本地和远程接口的EJB

Jakarta ee 实现本地和远程接口的EJB,jakarta-ee,ejb,ejb-3.1,Jakarta Ee,Ejb,Ejb 3.1,我正在尝试创建一个EJB组件,该组件将为来自远程客户端的请求提供服务,为了处理这些请求,它将调用其他远程EJB,我将其称为实用EJB 我的想法是定义一个远程接口和一个实现它的bean,以及一个本地接口和bean 远程接口将向客户机公开核心业务方法,而本地接口将是一种方便的方式,可以对处理客户机请求所需的所有实用工具EJB调用进行分组 另一种方法是直接从核心业务方法调用实用程序EJB,而不是通过本地接口,但这是我希望通过使用本地接口来避免的 让一个bean类同时实现本地和远程接口,或者两个单独的b

我正在尝试创建一个EJB组件,该组件将为来自远程客户端的请求提供服务,为了处理这些请求,它将调用其他远程EJB,我将其称为实用EJB

我的想法是定义一个远程接口和一个实现它的bean,以及一个本地接口和bean

远程接口将向客户机公开核心业务方法,而本地接口将是一种方便的方式,可以对处理客户机请求所需的所有实用工具EJB调用进行分组

另一种方法是直接从核心业务方法调用实用程序EJB,而不是通过本地接口,但这是我希望通过使用本地接口来避免的

让一个bean类同时实现本地和远程接口,或者两个单独的bean,一个实现远程接口,另一个实现本地接口,这更有意义吗?我对JavaEE有点陌生,所以我想知道这里是否有一个最佳实践设计模式可以遵循

Public class EjbA implements RemoteA {

    //method exposed to remote clients
    public void placeOrder(ClientID clientID ProductID productID){

      if (getBLocal().checkClientId(ClientID clientID)){
          //proceed
          } //else reject
    }

Public class EjbB implements LocalB {

    public Boolean checkClientId (ClientID clientID){
          (getCRemote().checkId(clientID)
}

}

嗯,我不明白这个问题。当您将业务方法公开给驻留在同一个.ear中但不同的.jar或.war中的本地客户端时,需要一个本地接口。如果您的客户端都是远程的,则不需要本地接口。另外,从我所读到的内容来看,您似乎打算使用本地接口来调用其他客户端。我的EJB正在为远程客户端提供服务,但为了处理它们的请求,我需要调用其他一些远程EJB,为此,我想创建一个仅从应用程序内部调用的本地bean。我想知道是应该只有一个bean同时实现本地和远程接口,还是像我在问题中添加的示例中那样有两个单独的bean。您可以在同一个EJB中实现远程和本地接口,如果本地接口可以在本地访问,容器会将其注入本地接口。或者,如果bean实现了多个接口,则可以在bean名称之后的JNDI查找中指定所需的接口。您可以使用
@EJB
注释和
beanInterface
参数来指定要使用的接口。啊,好吧……您想要的是本地bean,而不是本地接口。在这种情况下,(对我来说)建议使用EJB作为客户端的远程外观,客户端反过来调用本地EJB,您的所有业务规则都驻留在本地EJB中。所以,您希望避免的场景是最可取的:-)那么您建议像我问题中的伪代码示例那样构造它?我想要避免的场景是只有包含所有业务逻辑的façade EJB。我正在考虑的另一个场景是让façade EJB实现远程和本地接口,以便它公开本地和远程视图。这样做明智吗?