2010-07-26 8 views
7

Ich habe eine JavaEE6-Anwendung, die aus Web-Stuff und EJBs besteht und als WAR-only (mit EJB3.1) bereitgestellt wird. Der Build basiert auf Maven. Ich habe gerade über eine neue Möglichkeit gelesen, die Modulinitialisierung in Java EE 6 here zu bestellen, die ich auch für meine Anwendung brauche. Außerdem hätte ich gerne eine Option, um einige EJB-Eigenschaften in XML zu definieren.EJB 3.1-Anwendung als WAR-only bereitgestellt: Was ist mit ejb-jar.xml?

Da das Beispiel als EAR-Projekt bereitgestellt wird, wird die Reihenfolge in der Datei application.xml definiert. In einem WAR-implementierten Projekt gibt es keine application.xml. Jetzt frage ich mich, wo ich solche Informationen definieren kann? Oder ist es möglich, eine application.xml irgendwie in einer WAR-deployed-app zu verwenden?

EDIT:

Oops i das Modul nicht auftrags Beispiel rechts gelesen hat, im ersten Moment dachte ich, es war, in der über die EJBs in meiner app bestellen geladen. Natürlich habe ich nur ein Modul in meiner WAR-App, daher macht das auch keinen Sinn.

Ok, aber wie ich bin, bleibt eine große Frage (änderte auch den Fragetitel, um die Änderung widerzuspiegeln): Was ist mit der ejb-jar.xml? Kann ich irgendwie etwas über meine EJBs in XML definieren (wie es für einige Einstellungen nützlich ist, um Neukompilierung zu vermeiden)?

+0

Noticed Ihre Bearbeitung, nette Frage BTW. Ich habe meine Antwort aktualisiert. –

Antwort

9

Kurz gesagt, ist es nicht möglich mit einer WAR-basierten Bereitstellung.

Die Modulinitialisierungsfunktion von Java EE 6 dient zur Initialisierung verschiedener Module einer Anwendung in einer bestimmten Reihenfolge. Sobald Sie eine WAR-basierte EJB-Anwendung haben, verfügen Sie nicht mehr über separate Module für Ihre EJB- und Web-Anwendung. Es gibt nur ein Modul - das Webanwendungsmodul in einer WAR-basierten Bereitstellung.

  • Separate EJB in ein separates Modul:

    Deshalb, wenn Sie die gleiche Funktion wie das Modul Initialisierungsreihenfolge zu erreichen haben, angeboten in Java EE 6, werden Sie eine der folgenden Aktionen zu tun haben, und verwenden Sie eine EAR-basierte Bereitstellung.

  • Dies ist mehr oder weniger Tricks, wie es in Java EE 5 getan wurde, und Sie würden es vermeiden wollen. Möglicherweise möchten Sie Logik einprogrammieren, um sicherzustellen, dass die Singleton-EJBs erstellt wurden (vorausgesetzt, dass dies auf die Verwendung von Singletons in Ihrer Anwendung zurückzuführen ist), bevor sie im Code verwendet werden.

Lage der ejb-jar.xml in einer WAR-Datei

The EJB 3.1 specification (im Kapitel über die Verpackung) befasst sich mit der Frage der Lage des ejb-jar.xml-Datei, wenn in einer entfalteten WAR:

In einer WAR-Datei, die Bereitstellung Descriptor mit dem Namen WEB-INF/ejb-jar.xml gespeichert ist.

PS: Ich habe diesen Stil der Bereitstellung noch nicht ausprobiert. YMMV.

+0

Danke für die Info! Ändere einfach meine Frage, siehe meine Bearbeitung. – ifischer

+3

Als eine Randnotiz können Sie Ihre EJBs in einem EJB-JAR verpacken und in einem WAR bereitstellen. –

5

Seitliche Anmerkung zu EJBs in .wars und ejb-jar.xml-Verarbeitung. Wie bereits erwähnt, ist der Standort WEB-INF/ejb-jar.xml, aber beachten Sie auch, dass der Standort nur geprüft wird, auch wenn es ejbs jars innerhalb WEB-INF/lib/- über Standardregeln irgendwelche META-INF/ejb-jar.xml-Dateien werden ignoriert.

Die Expertengruppe war ziemlich gespalten, wenn Sie also eine Präferenz haben, ist es nicht zu spät, um Rückmeldungen an die EJB 3.1-Expertengruppenliste zur Berücksichtigung in EJB.next zu senden.

Mein Votum war immer noch zu erlauben, dass einzelne Gläser META-INF/ejb-jar.xml-Dateien haben, genau wie diese Gläser persistence.xmls, beans.xmls, Webfragmente usw. haben können. Das größere Problem für mich war das Es steht im Widerspruch zur Embedded EJB Container API, die einen Klassenpfad im EAR-Stil unterstützt, der mehrere JARs/Module erlaubt, die möglicherweise jeweils eine Datei META-INF/ejb-jar.xml enthalten. Wenn Sie die Embedded-API zum Testen einer EJB-Anwendung mit mehreren JAR-Daten verwenden, die in einer einzelnen WAR-Datei enthalten ist, müssen Sie alle vorhandenen ejb-jar.xml-Daten in einem einzigen EJB zusammenführen -jar.xml für die Webanwendung. Eine Art Schmerz für die Benutzer.

Verwandte Themen