EJB 3 中的 @Local 注释

str*_*ine 1 java ejb-3.0

我有一个无状态会话 bean 和一个作为客户端的独立 Java 程序。当接口被标记为@Remote 时,bean 方法执行得很好。但是,当我用 @Local 而不是 @Remote 标记该接口时,我得到以下异常。

 [java] javax.naming.NamingException: Could not dereference object [Root exception is java.lang.RuntimeException: Could not find InvokerLocator URL at JNDIaddress "chapter1/HelloUserBean/local"; looking up local Proxy from Remote JVM?]
Run Code Online (Sandbox Code Playgroud)

但我希望即使是后者也能工作,因为它是执行代码的同一台计算机。

看到这种行为,我假设 Application-Server 和 Standalone-Java-Program 使用不同的 JVM 实例而不是单个 JVM 实例,因此该客户端只能通过远程接口访问。

这个假设正确吗?

谢谢 !

Boz*_*zho 5

是的,它是正确的。

@Local接口只能在同一个应用服务器中使用。应用程序服务器启动一个 JVM 实例,而您的独立客户端启动另一个。