我想构建和部署我的第一个Java EE 6多层应用程序,其中Web和业务层在Glassfish 3.1上的不同物理服务器上运行。
我想我理解理论上的高层观点需要什么,但不清楚具体细节和细节。
我目前的计划如下:
我真的很感激一些指示:
答案 0 :(得分:3)
除非您知道每秒将提供多个请求,或者拥有非常数据和/或CPU密集型业务逻辑,否则您应该完全没问题,首先在同一个应用程序服务器上部署这两个层。通过使用本地接口部署到单个Glassfish应用程序服务器开始,您可以跳过运行时环境中的大量复杂性。
这反过来将允许您在Web层中使用最简单的@ EJB-injection形式来访问业务层中的会话外观。本地接口更快,因为应用程序服务器可以在层之间传递引用而不是RMI代理,它允许您跳过JNDI查找。您可以随时更改注释,或者如果您稍后找到在不同服务器上部署层的其他原因,则可以引入远程接口。
Glassfish支持群集,因此您可能永远不必明确区分这两个层 - 这一切都取决于实际的使用模式,因此性能监控是关键。
将Web层部署为WAR,将业务逻辑部署为EJB jar是正确的做法。根据应用程序的大小和逻辑结构,您可能希望将其分解为多个模块。
Maven负责建立档案。确保为每个war和jar存档定义子项目,以及用于组装EAR文件的子项目。后一个项目将引入其他子项目产生的战争和jar文件。将所有项目与master maven项目串联起来,您可以灵活地分别构建每个组件,构建整个组件或中间任意组合。
答案 1 :(得分:2)
你选择了一条艰难的道路,正如其他人在评论和答案中指出的那样......
让我们从您的应用程序的结构开始。你将最终得到四个......你将部署两个:
EJB的远程接口(jar-of-interfaces)的“常规”jar
具有EJB实现的EJB jar
一个EAR存档,它将包含jar-of-interfaces(在/ lib子目录中)和EJB jar(在'root'中)。
一个WAR文件,其中包含使用EJB的Remote接口的代码。这将在WEB-INF / lib中具有jar-of-interface。
此答案的其余部分基于the EJB FAQ。该文件中最适用的部分是here。
您可以将EJB注入ManagedBean。您不需要在ManagedBean中使用点查找方法。
您需要在glassfish-web.xml文件中使用bean的corbaname。