2009-08-25 19 views
13

Mam problem z rozmieszczeniem ucha z dołączonymi wojnami, słoikami i plikami konfiguracyjnymi (pliki .properties) w JBoss 4.3-eap. Tu jest mój struktury ucha:JBoss: Plik WAR w pliku EAR nie może znaleźć biblioteki JAR w ścieżce klasy

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

Mam następujących w moim jboss-app.xml:

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

Moja application.xml wygląda następująco:

<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> 

Zasadniczo, po wdrażając ucho, napotykam problem, w którym jedna z moich wojen nie może znaleźć klasy w pliku core.jar (java.lang.NoClassDefFoundErro r). Myślę, że dzieje się tak dlatego, że wojna nie znajduje tej biblioteki, mimo że znajduje się w folderze/classpath lib. Jeśli spróbuję odkomentować pierwsze dwa moduły, aby dodać biblioteki pierwszej strony (core.jar i tag.jar), nagle nie można już znaleźć plików właściwości (znajdują się one na razie w lib/classes, więc mam nadzieję, że tak czy inaczej są one pobierane przez program ładujący klasy: najlepiej byłoby umieścić klasy we własnym katalogu i dodać je osobno do klasy, ale na razie próbuję to zrobić).

Próbowałem kilka innych rzeczy, w tym ręcznie dodając core.jar do wojny manifest.mf pliku, zmieniając UseJBossWebLoader true w pliku jboss-service.xml pod jboss-web.deployer i różne kombinacje powyższych, aby bez powodzenia. Albo zgubię katalog classes z folderu classpath (katalog lib) i żaden z moich plików właściwości nie zostanie pobrany, albo wojna nie może uzyskać dostępu do odpowiedniej klasy ze słoika. Myślę, że musi być jakaś konfiguracja, która jest zła, i podczas gdy ja próbowałem czytać na temat sposobu, w jaki JBoss wykonuje wdrożenia i klasy EAR, nie mogę przystosować go do mojej obecnej konfiguracji.

Wszelkie sugestie będą mile widziane.

Oto kilka stron, że czekałem na:
Raible Designs JBoss ClassLoader Logic

Są to tylko niektóre z miejsc Mam spojrzał na. Problemy mogą wynikać również z konfiguracji projektu, ponieważ jest to duży, ustalony projekt, który (w pewnym zakresie) jest migrowany z wdrożenia w sieci WWW do Jboss. Więc jeśli jest coś, co POWINNO działać, ale nie działa, może to być problem z niektórymi konfiguracjami kodu/projektu. Niestety, nie jestem jeszcze w punkcie, w którym mogę stwierdzić, czy jest to problem związany z JBoss, czy problem z projektem.

Odpowiedz

10

Tag <library-directory> w application.xml jest funkcją JavaEE5 i nie sądzę, że JBoss 4.3 jest w pełni zgodny z JavaEE5 (może to zrobić EJB3, tak, ale jest to tylko częściowa obsługa).

Więc trzeba wrócić do korzystania jawnie deklarowane pliki JAR:

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

chodzi o plikach właściwości, trzeba dodać katalog że są w postaci modułu java, więc na swoim przykładzie :

<module> 
    <java>lib/classes</java> 
</module> 
+0

To rozwiązało mój problem! Wielkie dzięki! Chciałbym jednak zadać pytanie uzupełniające: jeśli dodaję te moduły do ​​pliku application.xml, czy to oznacza, że ​​nie potrzebuję właściwości path-class w plikach manifest.mf wojen?Czy jest tak tylko w przypadku, gdy ustawiam atrybut UseJBossWebLoader w jboss-web.deployer na true? – Mike

+0

Nie jestem pewien co do oczywistego problemu, sam tego nie próbowałem, zawsze polegam na domyślnym spłaszczonym programie ładującym klasy. Jeśli chodzi o formatowanie, nie używaj znaczników core/pre, nie działają one zbyt dobrze. Użyj ikon formatowania w edytorze. – skaffman

Powiązane problemy