我正在WildFly 10上运行一个应用程序。它在一个EAR中包含许多EJB。我有一个通过JMS触发的EJB“gt”。该EJB调用另一个EJB“ps”,最终导致错误
由以下原因引起:java. lang.ClassNotFoundException:org.apache.commons.io.filefilter.IOFileFilter from[Module"部署.MyApplication:main"from Service Module Loader]
我的jboss-部署结构. xml包含这个
<sub-deployment name="ps.jar">
<dependencies>
<module name="org.apache.commons.io"/>
</dependencies>
</sub-deployment>
并且在jboss\模块\系统\层\base\org\apache\Commons\io\main
下有一个名为“org.apache.commons.io”的模块
我做错了什么?东西在jboss\模块\系统\层
下而不是仅仅在jboss\模块
下的意义是什么?
有没有办法在运行时查看子部署的配置依赖项,例如,通过jbost-cli?
更新:
根据WildFly中的https://docs.jboss.org/author/display/WFLY10/ClassLoding,我本以为错误消息会说[Module"devyoment. MyApplication.ears.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()
在这种情况下,您需要手动加载类,我在我们的应用程序的标准. 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>
我们最终使用了MANIFEST. MF中的Dependance:选项,完全摆脱了jbost-部署结构.xml。