您能否简单解释一下 EJB 实现了可扩展性的原因,以及我将面临哪些问题,例如,如果我不会将 EJB 用于大型应用程序。
提前致谢。
EJB 不会给您任何特殊的可扩展性奖励,并且不会因为不使用它们而受到惩罚。
一些“EJB 是可扩展的”炒作来自对象池被认为是性能提升器的日子。
EJB 可以通过两种次要方式帮助您编写高效的代码:
但是,如果没有 EJB,上述两个目标都可以实现。
无论如何:您应该使用它们,因为它们确实使代码更好并且更易于维护。这两个品质通常有助于构建可扩展的应用程序。
您能否简单地解释一下 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 容器。
我认为这个问题是基于一个错误的前提。
您无法通过使用 EJB ……或任何其他技术来“实现可伸缩性”。可扩展性是通过设计可扩展性来实现的;即通过避免瓶颈(各种)和避免资源的低效使用。