Проблема с загрузкой класса архива JBoss 7.x SAR

Я пытаюсь создать архив sar, содержащий MXBean, и развернуть его в JBoss 7.

До недавнего времени у меня была проблема со ссылками на классы из других библиотек в моем классе MXBean, потому что JBoss не загружал эти библиотеки независимо от того, где в архиве SAR я их помещал.

Я узнал, что можно настроить путь к классам SAR через файл jboss-deployment-structure.xml, помещенный в META-INF. Моя версия этого файла выглядит так:

<jboss-deployment-structure>
<deployment>
    <resources>
        <resource-root path="management.api.jar" />
    </resources>
</deployment>

Now the classes from the "management.api.jar" are loaded.

Проблема, с которой я сейчас сталкиваюсь, заключается в следующем: если интерфейс MXBean хранится в management.api.jar, а класс, реализующий его, находится непосредственно в архиве SAR, то, когда JBoss читает jboss-service.xml и пытается для создания mxbean выдается исключение ClassNotFoundException, указывающее на интерфейс (то есть в management.api.jar). Следовательно, хотя классы из внешнего jar-файла загружаются нормально (я проверил это, фактически вызвав метод, который ссылался на класс из jar-файла, и это сработало), кажется, что когда JBoss регистрирует bean-компонент, он не проходит весь путь к классам как определено в jboss-deployment-structure.xml.

В настоящее время я застрял, и я подозреваю, что это ошибка в том, как JBoss обрабатывает загрузку класса. Если кто-нибудь знает способ обойти это (кроме извлечения интерфейса из банки и помещения его непосредственно в архив SAR, потому что это нарушит всю идею «api»), пожалуйста, дайте мне знать.

Спасибо!


person andrei.serea    schedule 12.04.2013    source источник


Ответы (1)


When I understand it right, the management api should be used in different projects and should be global in the server. A simple workaround can be to put your jar in the module-folder of your jboss. Therefor create a module.xml like this below and put it with your jar in a extra-folder main in the jboss7/modules/yourfolder. (In the module folder the jboss 7.1 stores all libs.)

 <!-- defines the name of your lib -->
 <module xmlns="urn:jboss:module:1.1" name="yourfolder">

<resources>
    <!-- the jar in your main folder-->
    <resource-root path="management.api.jar"/>
    <!-- Insert resources here -->
</resources>
<dependencies>
 ...dependencies of your api
</dependencies>
</module>

Then you can load the dependency from your sar-jboss-deployment-structure by

    <dependencies>
      <module name="yourfolder" slot="main" export="true"/>
   </dependencies>

Слот = main означает, что вы используете папку main, вы можете добавлять разные версии, например 1.1 и так далее. Main также является слотом по умолчанию, его можно не указывать.

Если ваша структура папок углубляется, просто определите и включите модули, такие как пакеты. Таким образом, вы можете определить api.jars в jboss и ссылаться на него из нескольких проектов.

person Jan Piel    schedule 12.04.2013