0

我是 EJB3 的新手。我想知道客户端如何知道 EJB bean 实现是在远程还是本地。当我在客户端类中使用 InitialContext 访问 bean 时,我想知道该 bean 是本地的还是远程的?对不起,如果我问愚蠢的问题?

4

3 回答 3

2

接口的类型是通过注解确定的。

  1. 这些可以放在接口类声明旁边:

    @Local- 声明一个本地业务接口

    @Remote- 声明一个远程业务接口

    然后,当 EJB 扩展此类接口时,它会将接口用作本地/远程视图。如果它扩展了多个接口,它就有多个视图。

  2. 这些可以放在 EJB 类声明旁边:

    @Local(com.example.LocalInterfaceClass)- 声明一个本地业务接口 @Remote(com.example.SomeRemoteInterfaceClass)- 声明一个远程业务接口 @LocalBean- 声明一个无接口视图(用作接口的完整 bean 定义)

  3. 如果多个上述注解组合使用,则 EJB 具有多个接口视图。如果全部省略,则 bean 默认为无接口视图。

  4. 您可以在编译期间使用 JDK 内置注解处理来处理注解(通过 javax.annotation.processing 类和 javac 命令行选项)。例如,您可以生成代码或设置选项/开关。

  5. 您可以在运行时使用反射来确定注释。

  6. 可能最干净和最简单的没有动态查找和行为,而只是为每个客户端提交本地或远程并硬编码适当的行为。

于 2013-07-01T07:46:19.823 回答
0

编写 EJB 时有两种不同的接口可用。一个是远程的,一个是本地的。Remote,顾名思义,是针对想要远程调用(或触发)函数并获得一些结果的远程客户端。另一方面,Local 旨在用于本地环境,例如,如果系统中的另一个 EJB 甚至 POJO 正在使用它。用法与您想通过其远程接口使用 EJB 时的用法相同。但是,服务器处理这个问题就不那么麻烦了。这是您可能想要使用本地接口而不是远程接口的唯一原因。本地接口不是 JVM 本地接口,而是像其他 POJO 类一样本地接口。

无法访问本地客户端视图:

当 EJB 或 Web 组件打包在不同应用程序的 EAR 包中时。当 Web 组件部署在 Web 容器中,而 EJB 部署在 EJB 容器中,并且这些容器是分开的(即使它们在同一台机器上运行)

这些是考虑本地或远程接口的主要因素:

客户端:如果您的客户端不是 Web 组件或其他 bean,请不要使用本地 Beans 和 Beans:这些 bean 是松散耦合的吗?那么使用 Local Scalability 是一个好主意:Remote 总是更好的可伸缩性 实体 bean 推荐使用本地接口,这有助于解决性能问题。

更多阅读:

http://onjava.com/pub/a/onjava/2004/11/03/localremote.html

http://www.conceptgo.com/gsejb/ov06.html

于 2013-07-01T07:14:09.807 回答
0

使用界面的@Remote,您可以将其用作远程界面

@Remote
public interface Cart {

}

现在,将这个接口实现到 EJB bean。

@Stateful
public class CartBean implements Cart {

}

同样使用 @Local 注释,您可以将其用作本地接口。

于 2013-07-01T07:17:40.503 回答