我正在将我的应用程序从Glassfish移植到Wildfly 8.1 . Application是一个maven-ejb项目,依赖于maven-'java Application'项目,在编译时都打包在jar文件中 .
这是一个maven项目(mvn版本是3.0.5),Java 1.7,它是用Netbeans 8.0.2编写的 .
我创建了一个EJB模块,我的可部署文件的名称是ServerApp-ejb.jar . 这个项目有一个@Startup-bean,可以从数据库中读取 .
EJB模块依赖于我的'Domain-service'模块,它是一个jar - > DomainService-2.0-SNAPSHOT.jar . 这个项目包含了我的'entites' .
当我在Glassfish中部署我的ejb-app.jar时:
我可以看到Glassfish使用位于我的.m2目录中的DomainService-2.0-SNAPSHOT.jar .
按“常规”的Glassfish选项卡,我可以看到以下内容:
'Libraries'> /home/ingo/.m2/repository/se/server/tutorial/web/DomainService/2.0-SNAPSHOT/DomainService-2.0-SNAPSHOT.jar - Glassfish像这样管理其依赖关系似乎很奇怪,但是这个玻璃鱼是如何做的,显然 .
据我所知,Wildfly中的类加载与Glassfish中的加载方式不同 .
我看过一些关于war-files和ear-files的建议 .
我的EJB在我的pom.xml中有以下几行
se.nrm.mediaserver
ServerApp的EJB
1.0-SNAPSHOT
EJB
以下依赖项:
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>se.server.tutorial.web</groupId>
<artifactId>DomainService</artifactId>
<version>2.0-SNAPSHOT</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
<type>jar</type>
</dependency>
</dependencies>
上面依赖项列表中唯一找不到的文件是我自己的 .
任何人都可以建议我做正确的事情,我宁愿不改变我的包装风格ejb .
问候,ingo
1 回答
Wildfly使用基于模块概念的类加载机制 . 必须定义它们的模块,并在standalone.xml中或在META-INF / WEB-INF文件夹中的特定jboss-deployment-structure.xml中声明依赖项,并且 / . m2 /不是一个jboss模块的路径
也就是说,在wildfly中将接口声明部署为模块似乎不是一个合乎逻辑的想法 .
创建一个application-deployment.ear,并将applcation-ejb.jar作为依赖项添加到它,这将可以跨应用程序服务器,glassfish,weblogic,wildfly移植 .