我在WildFly 10上运行一个应用程序。它在EAR中包含许多EJB。我有一个EJB" gt"通过JMS触发。那个EJB调用另一个EJB" ps",导致错误,最终
Caused by: java.lang.ClassNotFoundException: org.apache.commons.io.filefilter.IOFileFilter from [Module "deployment.MyApplication.ear:main" from Service Module Loader]
我的jboss-deployment-structure.xml包含此
<sub-deployment name="ps.jar">
<dependencies>
<module name="org.apache.commons.io"/>
</dependencies>
</sub-deployment>
还有一个名为&#34; org.apache.commons.io&#34;的模块。在jboss\modules\system\layers\base\org\apache\commons\io\main
下
我做错了什么?
这些东西在jboss\modules\system\layers
而不是jboss\modules
下的重要性是什么?
有没有办法在运行时查看子部署的已配置依赖项,例如,通过jboss-cli?
更新:
根据{{3}},我原本期望错误消息说[Module "deplyoment.MyApplication.ear.ps.jar:main" ...]
,但它没有。但为什么上下文是全局部署,而不是特定的子部署?
逻辑调用堆栈如下所示:
general.GeneralSomeClass.getIOFileFilter()
<-- static method. return type is IOFileFilter from Commons IO.
general is just a POJO lib (MyApplication.ear/lib/general.jar)
the exception occurs on loading the GeneralSomeClass, before calling the method
ps.PsSomeClass.run()
ps.PsEJB.run()
gt.GtEJB.run()
答案 0 :(得分:0)
在这种情况下,您需要手动加载类,我已在standalone.xml
中为我们的应用程序完成了此操作。
<subsystem xmlns="urn:jboss:domain:ee:4.0">
<global-modules>
<module name="com.tibco.tibjms"/>
<module name="org.apache.logging.log4j.api"/>
<module name="org.apache.logging.log4j.core"/>
<module name="org.apache.logging.log4j.web"/>
</global-modules>
答案 1 :(得分:0)
我们最终在MANIFEST.MF中使用了Dependencies:选项,完全摆脱了jboss-deployment-structure.xml。