【问题标题】:Deploying multi-tier application部署多层应用程序
【发布时间】:2011-05-27 13:59:21
【问题描述】:

我想构建和部署我的第一个 Java EE 6 多层应用程序,Web 层和业务层在 Glassfish 3.1 上的不同物理服务器上运行。

我想我从理论上的高层次的角度理解需要什么,但不清楚具体细节和小细节。

我目前的计划如下:

  • 在 NetBeans 7 中创建 Maven 企业应用程序。
  • 通过远程接口公开会话外观 EJB。
  • 让 JSF 支持 Bean 通过 JNDI 查找利用会话外观 EJB。
  • 将 EJB JAR 部署到一台服务器,将 Web WAR 部署到另一台服务器。

我真的很感激一些指针:

  • 应用结构。
  • 使用单独的服务器更正 JNDI 查找。可以注射吗?
  • 建立适当的档案。
  • 允许层级通信的部署配置。

【问题讨论】:

  • 是什么促使您决定在不同的服务器上部署 Web 层和业务层?您是否预计会有大量请求?
  • 问题:你想使用多层来学习正确吗?
  • Plinio:是的,没错,这是一个学习练习。

标签: java deployment jakarta-ee glassfish multi-tier


【解决方案1】:

除非您知道您将每秒处理许多请求,或者具有非常多的数据和/或 CPU 密集型业务逻辑,否则您应该在同一应用服务器上部署两层开始就完美了。从使用本地接口部署到单个 Glassfish 应用服务器开始,您可以跳过运行时环境中的大量复杂性。

这反过来将允许您在 Web 层中使用最简单的@EJB-injection 形式来访问业务层中的会话外观。本地接口更快,因为应用程序服务器可以在层之间传递引用而不是 RMI 代理,并且它允许您跳过 JNDI 查找。如果您以后发现其他原因将层部署在单独的服务器上,您可以随时更改注释,或者引入远程接口。

Glassfish 支持集群,因此您可能永远不必明确分离两个层 - 这完全取决于实际的使用模式,因此性能监控是关键。

将 Web 层部署为 WAR 并将业务逻辑部署为 EJB jar 是正确的做法。根据应用程序的大小和逻辑结构,您可能希望将其分解为多个模块。

Maven 负责构建档案。确保为每个 war 和 jar 存档定义一个子项目,以及一个用于组装 EAR 文件的子项目。后一个项目将拉入其他子项目生成的战争和 jar 文件。将所有项目与一个主 maven 项目串在一起,瞧,您可以灵活地单独构建每个组件,构建整个事物,或两者之间的任何组合。

【讨论】:

  • 从外观上看,大多数人建议我将两层部署到同一台服务器,然后如果我真的需要更多服务器,则使用 Glassfish 集群来隐藏分离。在这种情况下,将这些层分成单独的 WAR 和 JAR 是否仍然比仅使用单个 WAR 更可取?
  • 是的。 Web 层部署到 Web 容器,业务层部署到 EJB 容器,因此单独的封装既体现了逻辑域、开发域和部署域的分离。
【解决方案2】:

正如其他人在 cmets 和答案中指出的那样,您选择了一条艰难的道路......

让我们从应用的结构开始。您最终将获得四个成就……您将部署两个:

  1. EJB 远程接口的“常规”jar(jar-of-interfaces)

  2. 具有您的 EJB 实现的 EJB jar

  3. 将包含 jar-of-interfaces(在 /lib 子目录中)和 EJB jar(在“根”中)的 EAR 存档。

  4. 包含使用 EJB 远程接口的代码的 WAR 文件。这将在 WEB-INF/lib 中有 jar-of-interfaces。

此答案的其余部分基于the EJB FAQ。该文档最适用的部分是here

您可以将 EJB 注入到 ManagedBean。您不需要在 ManagedBean 中使用点查找方法。

您需要在 glassfish-web.xml 文件中为您的 bean 使用 corbaname。

【讨论】:

  • 我知道这会很困难,但我将其作为学习练习,以便更好地了解事情的运作方式。这些链接非常有帮助,谢谢。
猜你喜欢
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 2018-11-05
  • 1970-01-01
  • 2016-09-11
相关资源
最近更新 更多