Java 分别部署WAR和EJBJAR文件
我有一个应用程序,正在Java 分别部署WAR和EJBJAR文件,java,maven,jakarta-ee,glassfish,Java,Maven,Jakarta Ee,Glassfish,我有一个应用程序,正在GlassFish上部署。它有一个带有(JPA)实体和EJB的EJB层,用于访问和写入数据库,并有3个(独立的)web应用程序。一切都是用Maven构建的 ServerApplication | +-ServerApplication-ear +-ServerApplication-ejb | +-GrumpyCat (war) +-HummingBird (war) +-Koala (war) 所有三个war项目都依赖于ejb项目。编译/构
GlassFish
上部署。它有一个带有(JPA)实体和EJB的EJB层,用于访问和写入数据库,并有3个(独立的)web应用程序。一切都是用Maven
构建的
ServerApplication
|
+-ServerApplication-ear
+-ServerApplication-ejb
|
+-GrumpyCat (war)
+-HummingBird (war)
+-Koala (war)
所有三个war
项目都依赖于ejb
项目。编译/构建ear时,它将war
文件复制到ear
项目,然后我可以在GlassFish
上部署ear
文件
这很好,所有4个模块(ejb和3 war)部署都没有问题,我可以访问3war
项目,如:
myServer.com/GrumpyCat
myServer.com/HummingBird
myServer.com/Koala
我的问题是,我不能单独部署一个war
项目。例如,当我在koala
项目中更改某些内容时,我希望能够只构建koala.war并将其部署到服务器上,而不必上传和部署完整的ear
文件
但在部署时,GlassFish会告诉我:
- 已经在
考拉
上部署了一个项目(没错,它是与ear一起部署的)
- 或者(当我更改构建版本时),它不“知道”EJB,我得到了大量
异常ClassNotFound
有没有一种方法可以逐个部署应用程序的模块 如果您真的想单独部署它们,那么第二种方法是可行的。但是,您会看到一个
ClassNotFound
异常,因为WAR是单个项目,因此无法访问EAR的类路径
为了实现这一点,您必须将应用程序的公共API添加到WAR的类路径中。公共API至少包括您希望从WAR访问的EJB的EJB远程接口和API中使用的任何DTO
最简单的方法是创建一个单独的包(如com.example.api
),让ant或Maven等构建工具将该api包与EJB和WAR捆绑在一起,或者创建一个myapp api.jar
并将其包含在相应的类路径中
然后,您可以从EAR中删除WAR并将其作为单独的项目部署。谢谢!听起来很有希望。不过,我必须仔细阅读远程接口,我希望我没有创建自己的瓶颈:)如果将它们部署到同一台服务器上,它仍然是本地的(在同一个JVM中),应该没有瓶颈,即使它被称为“远程”。