ClassNotFoundException в Wildfly 10, несмотря на установленную зависимость

Я запускаю приложение на WildFly 10. Оно содержит несколько EJB в EAR. У меня есть один 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>

И есть модуль с именем "org.apache.commons.io" под jboss\modules\system\layers\base\org\apache\commons\io\main

Что я делаю не так? Каково значение того, что вещи находятся под jboss\modules\system\layers, а не чуть ниже jboss\modules?

Есть ли способ просмотреть настроенные зависимости подразвертывания во время выполнения, например, через jboss-cli?

Обновление:
согласно https://docs.jboss.org/author/display/WFLY10/Class+Loading+in+WildFly, я ожидал, что в сообщении об ошибке будет указано [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()

person stmoebius    schedule 05.09.2016    source источник
comment
Пробовали ли вы добавить зависимость в EAR, а не только вложенное развертывание? Просто чтобы ответить на вопрос о каталоге модулей. modules\system\layers предназначен для серверных модулей. Пользовательские модули должны просто находиться в каталоге modules, например. modules/org/postgresql/main.   -  person James R. Perkins    schedule 06.09.2016


Ответы (2)


В этом случае вам нужно загрузить классы вручную, я сделал это в 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>
person Zeus    schedule 11.04.2017

В итоге мы использовали параметр Dependencies: в MANIFEST.MF, полностью избавившись от jboss-deployment-structure.xml.

person stmoebius    schedule 07.05.2018