分别部署WAR和EJB-jar文件

时间:2014-10-26 11:46:14

标签: java maven java-ee glassfish

我有一个我在GlassFish上部署的应用程序。它有一个带有(JPA)Entites和EJB的 EJB层来访问和写入数据库,它有3个(独立的)Web应用程序。所有内容都使用Maven构建。

ServerApplication 
  |
  +-ServerApplication-ear
  +-ServerApplication-ejb
  |
  +-GrumpyCat (war)
  +-HummingBird (war)
  +-Koala (war)

所有三个war项目都依赖于ejb项目。在编译/构建耳朵时,它会将war文件复制到ear项目,然后我可以在ear上部署GlassFish文件。

这很好用,所有4个模块(ejb和3 war)都可以顺利部署,我可以访问3个war项目,如:

myServer.com/GrumpyCat
myServer.com/HummingBird
myServer.com/Koala

我的问题是,我无法单独部署单个war项目。例如,当我在koala项目中更改某些内容时,我希望能够仅构建koala.war并将其部署在服务器上,而无需上载和部署完整的ear文件。

但是在部署时,GlassFish告诉我:

  • 已经在Koala部署了一个项目(原来,它与耳朵一起部署)
  • 或(当我更改构建版本时)它不会&#34;知道&#34; ejbs并且我获得了许多ClassNotFound例外。< / LI>

有没有办法逐个部署应用程序的模块?

1 个答案:

答案 0 :(得分:1)

如果您真的想要单独部署它们,那么您的第二种方法就是前进的方法。但是,您看到ClassNotFound例外,因为WAR是单个项目,因此无法访问EAR的类路径。

要实现这一目标,您必须将应用程序的公共API添加到WAR的类路径中。公共API至少包含您希望从WAR访问的EJB的EJB远程接口以及API中使用的任何DTO。

最简单的方法是创建一个单独的包(例如com.example.api)并让一个构建工具(如ant或Maven)将api包与EJB和WAR捆绑在一起,或者创建一个{{1并将其包含在相应的类路径中。

然后,您可以从EAR中删除WAR并将它们部署为单独的项目。