2009-08-25 9 views
13

Ich habe ein Problem bei der Bereitstellung eines Ohrs mit gebündelten Wars-, Jar- und Konfigurationsdateien (.properties-Dateien) auf JBoss 4.3-eap. Hier ist meine Ohrstruktur:JBoss: WAR-Datei in EAR kann die JAR-Bibliothek im Klassenpfad nicht finden

+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 

Ich habe folgend in meinem jboss-app.xml:

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

Meine application.xml wie folgt aussehen:

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

Grundsätzlich auf Beim Einsetzen des Ohrs stoße ich auf ein Problem, bei dem einer meiner Kriege keine Klasse in der Datei core.jar (java.lang.NoClassDefFoundErro) finden kann. Ich denke, das liegt an der Tatsache, dass der Krieg diese Bibliothek nicht finden kann, obwohl sie sich im lib Ordner/Klassenpfad befindet. Wenn ich die ersten beiden Module auskommentiere, um die ersten Partizipienbibliotheken hinzuzufügen (core.jar und tag.jar), können plötzlich die Eigenschaftendateien nicht mehr gefunden werden (sie befinden sich vorerst in lib/classes, so dass ich hoffentlich trotzdem hoffe) Sie werden vom Classloader aufgenommen, idealerweise würde ich gerne Klassen in ein eigenes Verzeichnis einfügen und es dem Klassenpfad separat hinzufügen, aber im Moment versuche ich nur, dass dies funktioniert.

Ich habe ein paar anderen Dinge ausprobiert, darunter die manuelle Hinzufügen core.jar auf den manifest.mf Datei Krieg, UseJBossWebLoader auf true in der jboss-service.xml Datei unter den jboss-web.deployer und verschiedenen Kombinationen des oben ändern, zu keinem Erfolg. Ich verliere entweder das Verzeichnis classes aus dem Ordner Classpath (lib) und keine meiner Eigenschaften-Dateien abgeholt, oder der Krieg kann nicht die richtige Klasse aus dem Glas zugreifen. Ich denke, es muss eine Konfiguration geben, die falsch ist, und während ich versucht habe, auf dem Weg zu lesen, wie JBoss EAR-Bereitstellungen und Classloading durchführt, kann ich es anscheinend nicht an meine derzeitige Konfiguration anpassen.

Alle Vorschläge würden sehr geschätzt werden.

Hier sind einige Websites, die ich habe bei der Suche:
Raible Designs JBoss ClassLoader Logic

Dies sind nur einige der Seiten, die ich angeschaut haben. Die Probleme können auch von der Einrichtung des Projekts herrühren, da es sich um ein großes, etabliertes Projekt handelt, das (zu einem gewissen Grad) von einer Weblogic-Bereitstellung zu Jboss migriert wird. Wenn also etwas funktioniert, das funktionieren sollte, aber nicht, könnte dies ein Problem mit der Code-/Projektkonfiguration sein. Leider bin ich noch nicht an dem Punkt, an dem ich feststellen kann, ob es ein JBoss-Problem oder ein Problem mit dem Projekt ist.

Antwort

10

Das <library-directory>-Tag in application.xml ist eine JavaEE5-Funktion, und ich denke nicht, dass JBoss 4.3 vollständig JavaEE5-kompatibel ist (es kann EJB3, ja, aber es ist nur teilweise Unterstützung).

Sie müssen also explizit deklariert JAR-Dateien gehen zurück zu verwenden:

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

Wie für Ihre Eigenschaften-Dateien benötigen Sie das Verzeichnis hinzuzufügen, die sie in ein Java-Modul sind, so für Ihr Beispiel :

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

Das löste mein Problem! Danke vielmals! Ich möchte jedoch eine Nachfolgefrage stellen: Wenn ich diese Module zur application.xml hinzufüge, bedeutet das, dass ich die Eigenschaft class-path in den manifest.mf-Dateien der Kriege nicht brauche?Oder ist das nur der Fall, wenn ich das Attribut UseJBossWebLoader in jboss-web.deployer auf true setze? – Mike

+0

Ich bin mir nicht sicher über das Manifest-Problem, ich habe das selbst nicht ausprobiert, ich verlasse mich immer auf den standardmäßigen flatternden Classloader. Wie für Ihre Formatierung, verwenden Sie nicht die Core/Pre-Tags, sie funktionieren nicht sehr gut. Verwenden Sie die Formatierungssymbole im Editor. – skaffman