为什么要使用耳朵而不是战争?

时间:2011-10-21 06:24:39

标签: java-ee war packaging ear

我阅读的thisthis与我的问题有些相关。但我遇到了this文章,其中说EJB可以打包在war文件中。如果是这种情况,为什么需要耳朵?一个例子的解释将是非常高度的。

3 个答案:

答案 0 :(得分:8)

使用EAR或WAR取决于您要部署它的服务器,您的应用程序以及您的个人首选项。从Java EE6开始,您可以将EJB与其他servlet,jsps等一起打包到WAR文件中(最终只能在java ee 6兼容服务器上部署Web应用程序)。如果您使用ejbs在单独的包中打包应用程序并单独使用war,如果您未在应用程序中使用java ee6的其他功能,则可以使用java ee 5服务器,您可以分离EJB和WAR的部署清楚地分离业务层(EJB)和视图(Servlet,JSP等)。

答案 1 :(得分:8)

使用 EAR 可以提供业务之间的清晰分离(通常是无状态的 EJB bean,提供后端/数据库相关服务,原则上可以由非Web客户端)和前端(xhtml文件,JSF支持bean等)。

对于给定的项目,我通常遵循以下惯例,比如“foo”:

  • foo-ejb.jar 拥有EJB bean
  • foo-client.jar 定义EJB bean的接口(' client '可能用词不当,' foo-if.jar '或' foo-api.jar '可能是更好的名字)
  • foo-war.war 拥有网络资源

构建 foo-war.war 只需要 foo-client.jar

构建 foo-ejb.jar 只需要 foo-client.jar

EAR中的结构是:

foo.ear
 |
 |-- foo-war.war
 |
 |-- foo-ejb.jar
 |
 \-- lib
      |---- foo-client.jar
      |
      \---- (other common jars)

当您的代码部署为 WAR 时,可能有一种方法可以实现类似的清晰分离,但上面是我正在使用的并且似乎对我有用(我当然愿意接受建议) )。

答案 2 :(得分:2)

Java EE平台为企业应用程序使用分布式多层应用程序模型。应用程序逻辑根据功能划分为组件,构成Java EE应用程序的应用程序组件安装在各种计算机上,具体取决于应用程序组件所属的多层Java EE环境中的层。

下面的图像显示了两个多层Java EE应用程序,它们分为以下列表中描述的层。此图像中显示的Java EE应用程序部分显示在Java EE组件中。

  • 客户端组件在客户端计算机上运行。

  • Web层组件在Java EE服务器上运行。

  • 业务层组件在Java EE服务器上运行。

  • 企业信息系统(EIS) - 软件在EIS上运行 服务器

虽然Java EE应用程序可以包含图1-1中所示的所有层,但Java EE多层应用程序通常被认为是三层应用程序,因为它们分布在三个位置:客户端计算机,Java EE服务器计算机,以及后端的数据库或传统机器。以这种方式运行的三层应用程序通过在客户端应用程序和后端存储之间放置多线程应用程序服务器来扩展标准的双层客户端和服务器模型。

Multitiered Applications

通常我们希望有2或3个分离的层:

-EAR( E nterprise Application AR chive)

-EJB( E nterprise J ava B eans)

-WAR( W eb AR 韭菜)

有时候JPA( J ava P ersistance A PI)

我希望你觉得这很有用, 感谢。