提问者:小点点

尽管设置了依赖项,但Wildfly 10中的ClassNotFoundException


我正在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()

共2个答案

匿名用户

在这种情况下,您需要手动加载类,我在我们的应用程序的标准. 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。