Ejb 3.0 EJB3.1远程调用-它是自动分发的吗?它贵吗?

Ejb 3.0 EJB3.1远程调用-它是自动分发的吗?它贵吗?,ejb-3.0,scalability,rmi,java-ee-6,Ejb 3.0,Scalability,Rmi,Java Ee 6,我正在构建一个JEE6应用程序,性能和可扩展性是我最关心的问题 业务逻辑和JPA2 facade保存在无状态会话bean(EJB3.1)中。到目前为止,SLSB仅实现@Remote-接口。当一个bean需要访问另一个bean时,它会通过RMI进行访问 我的推理是,一旦应用程序在一组集群应用服务器上运行,RMI部分就允许执行自动分布到整个集群 这是正确的假设吗 我可以处理这样做的缺点(对象丢失entityManager会话,传递值),至少我这么认为。但是我想知道的是,持续的远程调用是否没有增加必要

我正在构建一个JEE6应用程序,性能和可扩展性是我最关心的问题

业务逻辑和JPA2 facade保存在无状态会话bean(EJB3.1)中。到目前为止,SLSB仅实现
@Remote
-接口。当一个bean需要访问另一个bean时,它会通过RMI进行访问

我的推理是,一旦应用程序在一组集群应用服务器上运行,RMI部分就允许执行自动分布到整个集群

这是正确的假设吗


我可以处理这样做的缺点(对象丢失entityManager会话,传递值),至少我这么认为。但是我想知道的是,持续的远程调用是否没有增加必要的负载。

EJB规范没有指定如何实现集群,因此这将取决于所使用的特定实现。实际上,编写EJB规范是为了避免对部署进行假设:它们不要求对集群提供任何支持,而是以一种使之成为可能的方式编写的(EJB模型中的许多限制源于潜在的集群问题,例如对文件系统的访问)。然后,实现者可以自由地支持集群或不支持集群,并且仍然遵守规范

在Glassfish中,对远程EJB的引用本身执行分发。有关更多信息,请参见此处。每个请求都可能被分派到不同的节点。这可能是大多数实现的工作方式。所以我认为你的假设是正确的

不过,我确实希望他们能够优化一个EJB调用另一个EJB的情况,并尽可能在同一节点上调度入侵。这将取决于部署是否同质(所有节点是否具有相同的bean)。同样,规范对于这些点有点模糊。但我猜大多数部署在实践中是同质的:在所有节点上部署相同的ear

关于远程调用与本地调用的性能开销,我曾经(在Glassfish上)做过一些测量。看这里。通过远程接口在同一个.ear中进行的EJB间调用比本地调用慢3倍。这听起来很大,但我们说的是毫秒,因此相对开销取决于方法的实际功能。我不知道其他应用程序的性能。服务器

希望能有帮助