Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 远程EJB与本地EJB的可伸缩性_Java_Jakarta Ee_Ejb_Data Access Layer - Fatal编程技术网

Java 远程EJB与本地EJB的可伸缩性

Java 远程EJB与本地EJB的可伸缩性,java,jakarta-ee,ejb,data-access-layer,Java,Jakarta Ee,Ejb,Data Access Layer,我一直在尝试为数据访问层选择本地EJB和远程EJB。通过大量的研究,似乎普遍的共识是,如果我想要可伸缩性,我应该使用远程EJB 那是什么意思?我找不到任何东西明确说明为什么远程EJB可以扩展,而本地EJB不能扩展。我不知道大家从哪里得到了普遍的共识 记住 您必须通过网络从Java对象调用关系数据库(除非它是内存中的数据库)。为什么从会话bean向远程对象添加额外的跃点会更快或更具可伸缩性 此外,可伸缩性的决定因素远不止这些 我想说你的共识是错误的:如果可以的话,就选择本地。我不确定你从哪里得到了

我一直在尝试为数据访问层选择本地EJB和远程EJB。通过大量的研究,似乎普遍的共识是,如果我想要可伸缩性,我应该使用远程EJB


那是什么意思?我找不到任何东西明确说明为什么远程EJB可以扩展,而本地EJB不能扩展。

我不知道大家从哪里得到了普遍的共识

记住

您必须通过网络从Java对象调用关系数据库(除非它是内存中的数据库)。为什么从会话bean向远程对象添加额外的跃点会更快或更具可伸缩性

此外,可伸缩性的决定因素远不止这些


我想说你的共识是错误的:如果可以的话,就选择本地。

我不确定你从哪里得到了普遍的共识

记住

您必须通过网络从Java对象调用关系数据库(除非它是内存中的数据库)。为什么从会话bean向远程对象添加额外的跃点会更快或更具可伸缩性

此外,可伸缩性的决定因素远不止这些

我想说你的共识是错误的:如果可以的话,就选择本地。

区别在于:

  • LocalBean: 这将在与其调用者相同的EJB容器上运行。这意味着与远程呼叫相比,每次呼叫都更快。但即使资源耗尽,它也将保持在同一服务器节点上

  • RemoteBean: 这将在EJB集群中的一个节点上运行。如果一个节点正在运行资源的auf,它将跳转到另一个节点。还可以添加节点以进行放大

编辑 如果您只想让bean编辑数据库,请使用localbean。。 正如@duffymo所写的,区别在于:

  • LocalBean: 这将在与其调用者相同的EJB容器上运行。这意味着与远程呼叫相比,每次呼叫都更快。但即使资源耗尽,它也将保持在同一服务器节点上

  • RemoteBean: 这将在EJB集群中的一个节点上运行。如果一个节点正在运行资源的auf,它将跳转到另一个节点。还可以添加节点以进行放大

编辑 如果您只想让bean编辑数据库,请使用localbean。。
正如@duffymo所写的,我假设我们讨论的是一个经典的JavaEE场景:

 client (usually browser) ----> Servlet ----> EJB ----> DB
在这种情况下,我们可以将Servlet和EJB放在同一个位置,使用本地接口,或者将Servlet和EJB放在不同的层中,因此需要远程接口——当然,使用远程接口需要额外的网络跃点,但可以想象这会带来好处

考虑首先扩展本地场景。Servlet/EJB引擎没有动力了,所以我们部署了另一个,获得了更多的动力(显然,Servlet前面的一些喷洒器必须分配工作。我们需要更多的动力,添加更多的Servlet/EJB层。只需调整它的伸缩性。但是


假设我们的EJB层真的很重,可能在获取数据后进行了一些复杂的计算。为了达到我们所需的性能,我们扩展了组合的Servlet/EJB层,但我们不需要Servlet引擎的所有副本,它们几乎不做任何工作,所有的工作都在EJB层,我们消耗内存在这种情况下,使用远程EJB可能会给我们带来胜利,我们可以独立部署,获得所需的servlet引擎和EJB引擎的任意多个副本,与复杂的计算成本相比,远程跃点的成本可以忽略不计。

我想我们讨论的是一个经典的Java EE场景:

 client (usually browser) ----> Servlet ----> EJB ----> DB
在这种情况下,我们可以将Servlet和EJB放在同一个位置,使用本地接口,或者将Servlet和EJB放在不同的层中,因此需要远程接口——当然,使用远程接口需要额外的网络跃点,但可以想象这会带来好处

首先考虑扩展本地场景。Servlet/EJB引擎没有动力了,所以我们部署另一个引擎,获得更多的动力(显然,Servlet前面的一些喷洒器必须分配工作。我们需要更多的动力,添加更多的Servlet/EJB层。只需优化它的扩展。但是


假设我们的EJB层真的很重,可能在获取数据后进行了一些复杂的计算。为了达到我们所需的性能,我们扩展了组合的Servlet/EJB层,但我们不需要Servlet引擎的所有副本,它们几乎不做任何工作,所有的工作都在EJB层,我们消耗内存在这种情况下,使用远程EJB可能会给我们带来胜利,我们可以独立部署,获得所需的servlet引擎和EJB引擎的任意多个副本,与复杂的计算成本相比,远程跃点的成本可以忽略不计。

我理解公认的答案,但使用远程EJB的应用并不总是意味着在多个服务器中分布业务逻辑

使用远程EJB的可伸缩性的一个很好的例子是。您可以将API网关配置为EJB客户端(每个示例一个WAR),以使用来自包含业务逻辑的不同服务器(每个示例一个EAR)的远程EJB


使用这个想法,您可以有多个服务器为API网关提供远程EJB,在每个
查找中为所有服务器分配工作

好吧,我理解公认的答案,但是使用远程EJB并不总是指在多个服务器中分布业务逻辑

使用远程EJB的可伸缩性的一个很好的例子是。您可以将API网关配置为EJB客户端(每个示例一个WAR),以使用来自包含业务逻辑的不同服务器(每个示例一个EAR)的远程EJB

使用这种思想,您可以有多台服务器为API网关提供远程EJB,在每个
查找中为所有服务器分配工作。