我想构建和部署我的第一个 Java EE 6 多层应用程序,其中 Web 层和业务层在 Glassfish 3.1 上的单独物理服务器上运行。
我认为我从理论的高层次角度理解需要什么,但不清楚具体细节和小细节。
我目前的计划如下:
- 在 NetBeans 7 中创建 Maven 企业应用程序。
- 通过远程接口(interface)公开 session 外观 EJB。
- 让 JSF Backing Bean 通过 JNDI 查找利用 session Facade EJB。
- 将 EJB JAR 部署到一台服务器,将 Web WAR 部署到另一台服务器。
我真的很感激一些关于以下方面的指示:
- 应用结构。
- 使用单独的服务器更正 JNDI 查找。可以注入(inject)吗?
- 建立适当的文件。
- 允许各层进行通信的部署配置。
最佳答案
除非您知道每秒将处理许多请求,或者拥有大量数据和/或 CPU 密集型业务逻辑,否则您应该完全可以通过在同一应用程序服务器上部署两层来开始。首先使用本地接口(interface)部署到单个 Glassfish 应用程序服务器,这样您就可以跳过运行时环境中的许多复杂性。
这反过来将允许您在 Web 层中使用最简单形式的 @EJB 注入(inject)来访问业务层中的 session 外观。本地接口(interface)速度更快,因为应用程序服务器可以在层之间传递引用而不是 RMI 代理,并且它允许您跳过 JNDI 查找。您可以随时更改注释,或者如果您后来发现其他原因需要在单独的服务器上部署层,则可以引入远程接口(interface)。
Glassfish 支持集群,因此您可能永远不需要显式分离这两层 - 这完全取决于实际的使用模式,因此性能监控是关键。
将 Web 层部署为 WAR,将业务逻辑部署为 EJB jar 是正确的做法。根据应用程序的大小和逻辑结构,您可能希望将其分解为多个模块。
Maven 负责构建文件。确保为每个 war 和 jar 存档定义一个子项目,以及一个用于组装 EAR 文件的子项目。后一个项目将引入其他子项目生成的 war 和 jar 文件。将所有项目与主 Maven 项目串在一起,瞧,您可以灵活地单独构建每个组件、构建整个项目或两者之间的任何组合。
关于java - 部署多层应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6153273/