我在机器1(iSeries服务器)的Websphere Application Server中部署/运行的应用程序。在机器2(AIX服务器)上运行的数据库。使用IBM HTTP Server作为机器3(Windows Server)上的反向代理服务器。
以下是我的EAR文件的结构。
机器1
+ HelloWorldEAR + META-INF + HelloWorldWAR // Struts/JSP + WEB-INF + HelloWorldEJB.jar
这个应用程序是否符合3层架构,虽然我的整个应用程序(EAR)位于一台机器上?
或在一台机器上部署Web服务器中的WAR文件,在另一台机器上部署应用程序服务器中的EJB? Web和App Server在j2ee架构中的作用是什么?始终在两台不同的机器中部署表示逻辑(servlet / jsp)和业务逻辑(ejb)是一种好习惯吗?有没有任何标准的方法来设计j2ee应用程序,以便可以在每个层中部署每个层?
答案 0 :(得分:0)
3层并不一定意味着将每个层放在单独的机器上。您的应用程序也可以在所有人的耳中(或战争),并清楚地分离表示,业务逻辑和持久性。
在不同的计算机上进行部署是出于其他原因,例如安全问题(将业务或数据库服务器置于另一个防火墙后面)或出于性能原因(在多台计算机上分配负载)或由于可用性要求(具有多个集群内的节点。)
因此,在做出有关分销的决定时,您必须从这些非功能性要求的角度来看待。正如Adam Bien在workshops"不要分发" - 意思是,如果没有要求这样做,请保持简单,因为分配总是意味着更复杂。
PS:不要使用" J2EE"它已经(在您的标签中使用)" Java EE"一段时间了。答案 1 :(得分:0)
这个应用程序是否符合3层架构,尽管我的整体 应用程序(EAR)位于一台机器上?
可能是的,因为它有表示层(通过JSP / Struts),业务逻辑层(通过EJB)和数据(可能还没有,因为你的hello应用程序现在可能不会存储任何数据)。 / p>
Web和App Server在j2ee架构中的作用是什么?
Web服务器通常充当安全代理(位于DMZ区域中)并将请求转发给应用程序服务器。它还可以充当负载均衡器,将请求分发到群集中的许多服务器。如果您有非常丰富的表示层,例如大量的闪光。大型静态文件等您可以将这些文件放到Web服务器上,因为它们不需要从应用程序服务器提供。
另一方面,应用程序服务器应放在Intranet区域,并负责运行动态应用程序。
始终在两台不同的计算机上部署表示逻辑(servlet / jsp)和业务逻辑(ejb)是一种好习惯吗?
不,这不是一个好的做法,因为性能显着下降(您在流程和优化过程中失去了许多优势,需要在层之间进行远程调用),这增加了环境和管理的复杂性。
是否有任何标准的方法来设计j2ee应用程序,以便可以在每个层中部署每个层?
正如我之前所写,不再推荐,在EJB 1.1中有一个时刻,当你只有远程接口时,建议时,但不再是。如果您真的想要这样做,您将需要使用通过某种远程接口(EJB,Web服务,休息......)公开的Facade创建业务层(通常是EJB)。