部署多层应用程序

时间:2011-05-27 13:59:21

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

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

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

我目前的计划如下:

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

我真的很感激一些指示:

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

2 个答案:

答案 0 :(得分:3)

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

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

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

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

Maven负责建立档案。确保为每个war和jar存档定义子项目,以及用于组装EAR文件的子项目。后一个项目将引入其他子项目产生的战争和jar文件。将所有项目与master maven项目串联起来,您可以灵活地分别构建每个组件,构建整个组件或中间任意组合。

答案 1 :(得分:2)

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

让我们从您的应用程序的结构开始。你将最终得到四个......你将部署两个:

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

  2. 具有EJB实现的EJB jar

  3. 一个EAR存档,它将包含jar-of-interfaces(在/ lib子目录中)和EJB jar(在'root'中)。

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

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

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

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