jsf - 如果 EJB 暴露了 @Remote 接口(interface),但您注入(inject)的是 EJB bean 而不是其 Remote 接口(interface),这会触发远程调用还是本地调用?

标签 jsf jakarta-ee ejb ejb-3.1

我有一个 EJB bean,它暴露给如下两个接口(interface):本地接口(interface)用于我的 Web 应用程序,远程接口(interface)用于我的应用程序客户端

@Stateless
public class CoreMainEJB implements CoreMainEJBRemote, CoreMainEJBLocal {
    //...
}

所以我的 App Client 如下所示。在这种情况下发生了远程方法调用
public class Main {
   @EJB
   private static CoreMainEJBRemote coreEJBRemote;

   public static void main(String[] args) {
        coreEJBRemote.process(args[0]);       
   }
}

从我的网络应用程序中,我调用如下。在这种情况下发生了本地方法调用
@ManagedBean
@RequestScoped
public class DisplayInbound {
    @EJB
    private CoreMainEJBLocal coreMainEJBLocal;

    public void processPackages() {
        coreMainEJBLocal.process(...);   
    }
}

所以这是我的问题,如果 EJB 只暴露了 @Remote 接口(interface),但在您的 Web 应用程序中,您直接注入(inject) EJB bean 而不是其 Remote 接口(interface),这会触发远程调用还是本地调用? 例如:
@Stateless
public class CoreMainEJB implements CoreMainEJBRemote{
    //...
}

在网络应用程序中,我这样做
@EJB
private CoreMainEJB coreMainEJB;

public void processPackages() {
    coreMainEJB.process(...);   //Is this local or remote invocation here?
}

最佳答案

给出的最后一个示例根本行不通。由于CoreMainEJB已经实现了远程接口(interface),容器将不是 创建一个无界面 View 。这正是 @LocalBean 的情况。旨在。

因此,要回答“这里是本地调用还是远程调用?”这个问题。直接:两者都不是。容器将无法注入(inject)任何东西,并且可能会在部署阶段吐出。

如果您将 bean 定义为:

@Stateless
@LocalBean
public class CoreMainEJB implements CoreMainEJBRemote{
    //...
}

然后本地语义将在这里应用:
@EJB
private CoreMainEJB coreMainEJB;

public void processPackages() {
    coreMainEJB.process(...);   // Local semantics
}

(假设上面的代码片段与 CoreMainEJB 定义在同一个应用程序中)

关于jsf - 如果 EJB 暴露了 @Remote 接口(interface),但您注入(inject)的是 EJB bean 而不是其 Remote 接口(interface),这会触发远程调用还是本地调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6817793/

相关文章:

jsf - 在呈现的属性中使用大于逻辑表达式

java - 提交表单时出错:Data truncation: Incorrect datetime

java - jrockit升级是否需要nodemanager重新注册Weblogic域

java - EJB : Two stateless objects use two different transaction

java - 从头开始开发购物车的最佳实践

java - 我应该使用 Java 枚举来获取特定年份的用户吗?

java - 使用 ADF 11 的 JSF 密码确认验证

java - 如何在 p :dataGrid using p:graphicImage 中显示图像

java - 调用 SQL 查询返回旧值

java - Weblogic EJB部署: classes in jar inside ear are not accessible