2

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

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

我目前的计划如下:

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

我真的很感激一些关于:

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

2 回答 2

3

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

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

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

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

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

于 2011-05-27T17:09:27.020 回答
2

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

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

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

  2. 具有 EJB 实现的 EJB jar

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

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

此答案的其余部分基于EJB FAQ。该文档最适用的部分在这里

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

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

于 2011-05-29T03:40:35.037 回答