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

Can*_*ell 16 ear packaging war java-ee

我读这个这个被有些涉及到我的问题.但我发现这篇文章说EJB可以打包在war文件中.如果是这种情况,为什么需要耳朵?一个例子的解释将是非常高度的.

Kri*_*ris 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等).


Mar*_*tus 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)
Run Code Online (Sandbox Code Playgroud)

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