JBoss: WAR файл в EAR не может найти JAR-библиотеку на пути к классам

У меня возникла проблема с развертыванием уха со связанными войнами, баночками и файлами конфигурации (файлы .properties) на JBoss 4.3-eap. Вот моя структура уха:

+app.ear   
  +lib  
    *.jar libraries that the war use  
    +classes  
      *.properties and other configuration files 
  +META-INF  
    application.xml  
    jbos-app.xml  
  app.war  
  app2.war  
  appn.war  

У меня есть следующее в jboss-app.xml:

<jboss-app>
  <jmx-name>app.startup.JbossStartUpServer:service=JbossStartUpService</jmx-name>
</jboss-app>    

My application.xml выглядит следующим образом:

<application id="app_id">
  <display-name>App>/display-name>
  <description>TheApp>/description>
<!--  
  <module  id="core">
    <java>lib/core.jar</java>
  </module>

  <module id="tag">
    <java>lib/tag.jar</java>
  </module>
-->  
  <module id="app">
    <web>
      <web-uri>app.war</web-uri>
      <context-root>/</context-root>
    </web>
  </module> 

  <module id="app2">
    <web>
      <web-uri>app2.war</web-uri>
      <context-root>/app2</context-root>
    </web>
  </module> 

  <module id="appn">
    <web>
      <web-uri>appn.war</web-uri>
      <context-root>/appn</context-root>
    </web>
  </module>

  <security-role id="secRole">
    <description>users</description>
    <role-name id="appRoleName">users</role-name>
  </security-role>

  <library-directory>lib</library-directory>

</application>

В принципе, при развертывании уха я сталкиваюсь с проблемой, когда одна из моих войн не может найти класс в файле core.jar (java.lang.NoClassDefFoundErro r). Я думаю, это связано с тем, что война не находит эту библиотеку, хотя она находится в папке lib folder/classpath. Если я попытаюсь разогнать первые два модуля для добавления первых партийных библиотек (core.jar и tag.jar), внезапно файлы свойств больше не могут быть найдены (они теперь находятся в lib/classes, так что, надеюсь, в любом случае, они подхватываются загрузчиком классов. В идеале я бы хотел поместить классы в свой собственный каталог и добавить его в classpath отдельно, но пока я просто пытаюсь выполнить эту работу).

Я пробовал другие вещи, в том числе вручную добавляя core.jar в файл war manifest.mf, меняя UseJBossWebLoader на true в файле jboss-service.xml под jboss-web.deployer и различные комбинации выше, на нет успеха. Я либо теряю каталог classes из пути к классам (папка lib), и ни один из моих файлов свойств не подбирается, или война не может получить доступ к соответствующему классу из банки. Я думаю, что должна быть некоторая конфигурация, которая является неправильной, и, хотя я пробовал читать информацию о том, как JBoss делает развертывание EAR и загрузку классов, я не могу приспособить его к моей текущей настройке.

Любые предложения были бы весьма признательны.

Вот некоторые сайты, на которые я смотрел:
Raible Designs Логика JBoss ClassLoader

Это лишь некоторые из сайтов, на которые я смотрел. Проблемы могут возникнуть и при настройке проекта, так как это крупный проект, который (в какой-то мере) переносится из развертывания weblogic в Jboss. Поэтому, если есть что-то, что ДОЛЖНО работать, но это не так, это может быть проблемой с некоторой конфигурацией кода/проекта. К сожалению, я пока не могу сказать, могу ли я сказать, связана ли его проблема с JBoss или проблема с проектом.

Ответы

Ответ 1

Тег <library-directory> в application.xml является функцией JavaEE5, и я не думаю, что JBoss 4.3 полностью совместим с JavaEE5 (он может делать EJB3, да, но это лишь частичная поддержка).

Итак, вам нужно вернуться к использованию явно объявленных файлов JAR:

<module>
    <java>lib/core.jar</java>
</module>

Что касается ваших файлов свойств, вам нужно добавить каталог, в котором они находятся, как java-модуль, поэтому для вашего примера:

<module>
    <java>lib/classes</java>
</module>