Frage

Ich bin ein Neuling in Java EE, also ist das vielleicht eine Dummy-Frage.Aber ich stelle ein WAR und ein JAR mit EJBs auf einem Glassfish 3.1 bereit.Server.WAR hat einen Verweis auf eines der EJBs in der JAR-Datei.Ist es zwingend erforderlich, das EJB-JAR in die WAR-Dateien aufzunehmen? lib Verzeichnis, damit dies funktioniert?Da sowohl WAR als auch JAR auf demselben App-Server laufen, hatte ich gehofft, dass ich mich nicht um diese Abhängigkeiten kümmern müsste.Allerdings bekomme ich eine java.lang.NoClassDefFoundError wenn ich das WAR bereitstelle, wenn es das EJB-JAR nicht enthält (obwohl das EJB-JAR bereits auf dem App-Server bereitgestellt ist).

War es hilfreich?

Lösung

Einer der Eckpfeiler von Java EE ist die Vorstellung, dass verschiedene Komponenten in Containern ausgeführt werden können, die keinen gemeinsamen Namensraum haben, auch wenn die Komponenten möglicherweise in derselben JVM ausgeführt werden.Wenn Sie über Module verfügen, die einen Namensraum gemeinsam nutzen müssen, müssen diese in einem EAR (vor Java EE 6) gebündelt oder in einem einzigen WAR zusammengefasst werden (ein Sonderfall, der von Java EE 6 für Webanwendungen eingeführt wurde, die EJBs nutzen müssen). .

Dies ist eine wesentliche Änderung gegenüber dem, was Leute, die mit der Java SE-Entwicklung vertraut sind, „wissen“.Bei den meisten Java SE-Programmen ist der Container der JVM-Prozess.

Die Antwort auf Ihre Frage lautet also: „Nein.Sie müssen das EJB-JAR nicht im lib-Verzeichnis der WAR-Datei ablegen.Sie könnten eine EAR-Datei erstellen, die BEIDE Archive enthält.

Dies könnte die Situation für Sie klären ...

 myEar.ear
   + myEJBs.jar
   + myWAR.war
   + lib
       + a-jar-that-has-classes-used-in-both-archives-above.jar

Andere Tipps

Haben Sie versucht, die WAR- und JAR-Datei zusammen in eine EAR-Datei zu packen?Die EAR-Datei kann ein lib-Verzeichnis haben, in dem Sie zu ladende JAR-Dateien im Klassenpfad-FBO der Unternehmensanwendung ablegen können.

Dies sollte Ihr Klassenladeproblem lösen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top