1

您能否简单解释一下 EJB 实现了可扩展性的原因,以及我将面临哪些问题,例如,如果我不会将 EJB 用于大型应用程序。

提前致谢。

4

3 回答 3

2

EJB 不会给您任何特殊的可扩展性奖励,并且不会因为不使用它们而受到惩罚。

一些“EJB 是可扩展的”炒作来自对象池被认为是性能提升器的日子。

EJB 可以通过两种次要方式帮助您编写高效的代码:

  • EJB 架构有一种在多台机器上传播业务逻辑的方法(使用远程接口和 JNDI 查找允许您在服务器之间移动处理而无需修改代码)。
  • EJB 将通过轻松共享持久性上下文以及 - 在某些情况下 - 对许多调用使用相同的上下文来帮助您充分利用 JPA。

但是,如果没有 EJB,上述两个目标都可以实现。

无论如何:您应该使用它们,因为它们确实使代码更好并且更易于维护。这两个品质通常有助于构建可扩展的应用程序。

于 2013-06-22T12:55:30.387 回答
1

您能否简单地解释一下 EJB 实现可伸缩性的原因

可扩展性是通过在集群中部署 EJB 来实现的:http: //docs.oracle.com/cd/A97688_16/generic.903/a97677/cluster.htm。简而言之:每个请求都将被集群中的一台服务器接收。然后,该服务器决定是自己处理请求,还是将其转发到另一台服务器。哪个服务器将处理请求由一些可配置的算法决定,最简单的是循环(即第一个请求到达服务器 1,第二个请求到达服务器 2,依此类推)。

但是,根据我的经验,不在 EJB 级别上进行集群更容易,而是在更高级别上进行。这意味着,有一个(外部)负载均衡器接收所有请求并将它们转发到包含 EJB 的应用程序服务器(再次通过某种算法,如循环法)。在这种情况下,应用程序服务器不必相互了解,这更容易配置。

然而,在某些情况下,可能需要 EJB 级别的集群,例如,如果您有必须支持会话故障转移的有状态会话 bean(即,当服务器当前正在处理请求时崩溃,则必须将会话移动到另一台服务器,这样用户就不会注意到任何东西)。不过,这很少有必要。

例如,如果我不将 EJB 用于大型应用程序,我将面临哪些问题。

我建议使用 EJB 或 Spring 作为大型应用程序的替代方案。这些框架负责您本来必须自己做的细节编程,如下所示

  • 开启和关闭交易
  • 提供对资源的访问(如数据库连接)
  • 依赖注入
  • 支持面向方面的编程
  • 以及更多...

如果您使用 Spring,您甚至不必部署到成熟的应用程序服务器,而是可以使用简单的 servlet 容器。

于 2013-06-22T12:59:26.233 回答
0

我认为这个问题是基于一个错误的前提。

您无法通过使用 EJB ……或任何其他技术来“实现可伸缩性”。可扩展性是通过设计可扩展性来实现的;即通过避免瓶颈(各种)和避免资源的低效使用。

于 2013-06-22T12:48:27.400 回答