目前我们正在使用JBoss AS 5并使用具有以下部署结构的单耳文件
company.ear
|_ webapp1.war
|_ webapp2.war
|_ lib
| |_ ejb1.jar
| |_ ejb2.jar
|_ META-INF
| |_application.xml
|_ thirdparty1.jar
|_ thirdparty2.jar
Web应用程序常用的所有ejb都保存在lib中,第三方jar保存在ear根路径中。这很好。
现在,我们正在将其迁移到JBoss 7.1.1。我们尝试了以下部署结构。
1. company.ear
|_ webapp1.war
|_ webapp2.war
|_ lib
| |_ thirdparty1.jar
| |_ thirdparty2.jar
|_ META-INF
| |_application.xml
| |_jboss-deployment-structure.xml
|_ ejb1.jar
|_ ejb2.jar
2. company.ear
|_ webapp1.war
|_ webapp2.war
|_ lib
| |_ ejb1.jar
| |_ ejb2.jar
|_ META-INF
|_application.xml
|_jboss-deployment-structure.xml
在第二个部署结构中,我们在modules文件夹中定义了thirdparty jar,并在stanalone.xml
中添加了全局依赖。
虽然我们正在关注JBoss AS 7迁移文档和一些解决方法,但我们在部署期间获得了ClassCastExceptions。
如何避免在部署文件中获取这些异常?
或者我们如何通过单个类加载器强制JBoss SA加载所有EJB jar。
答案 0 :(得分:0)
我不知道这是否是最好的方式,但我使用它的方式是让ejb罐子与战争处于同一水平。基本上你没有lib使用的第二个结构 -
company.ear
|_ webapp1.war
|_ webapp2.war
|_ ejb1.jar
|_ ejb2.jar
|_ META-INF
|_application.xml
|_jboss-deployment-structure.xml
在jboss-deployment-structure.xml文件中,您可以像对待战争一样处理您的ejb并提供依赖关系 -
<sub-deployment name="ejb1.jar">
<dependencies>
<module name="" />
</dependencies>
</sub-deployment>
<sub-deployment name="ejb2.jar">
<dependencies>
<module name="" />
</dependencies>
</sub-deployment>