2016-09-05 3 views
1

Я запускаю приложение на WildFly 10. Он содержит несколько EJB в EAR. У меня есть один EJB «gt», который запускается через JMS. Это EJB вызывает другой EJB "PS", что приводит к ошибке, в конечном счетеClassNotFoundException в Wildfly 10, несмотря на то, что установлена ​​зависимость

Caused by: java.lang.ClassNotFoundException: org.apache.commons.io.filefilter.IOFileFilter from [Module "deployment.MyApplication.ear:main" from Service Module Loader]

Мой JBoss развертывания-structure.xml содержит этот

<sub-deployment name="ps.jar"> 
    <dependencies> 
    <module name="org.apache.commons.io"/> 
    </dependencies> 
</sub-deployment> 

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

Что я делаю неправильно? Какое значение имеет материал под jboss\modules\system\layers, а не только под jboss\modules?

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

Update:
По 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() 
+0

Вы пробовали добавить зависимость от EAR, а не только для развертывания? Просто чтобы ответить на вопрос каталога модулей. 'modules \ system \ layers' предназначен для серверных модулей. Пользовательские модули должны просто войти в каталог 'modules', например. 'Модули/орг/PostgreSQL/main'. –

ответ

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> 
Смежные вопросы