JEE7: Mehrere Archive für Entitäten und EJB verwenden


Umgebung

  • Wildfly 10
  • EE7

Häufig ist es sinnvoll die Logik in Form von Entitäten und Stateless- / Stateful-EJBs (im Allgemeinen Facades) auf mehrere Archive zu verteilen. Beispielsweise kann so zwischen Basisklassen, die in mehreren Projekten verwendet werden, und Klassen, die speziell für ein Projekt entwickelt wurden, unterschieden werden.

In der IDE und im Build sind dies Module/Projekte sauber getrennt. Die Kunst ist es diese nun in einem EAR so zusammenzufassen, dass alle Entities und Stateless- / Stateful-EJBs vom Application-Server erkannt werden.

Entitäten

Die Entitäten werden entweder automatisch gescannt oder stehen explizit in der persistence.xml. Wie aber bringt man den Application Server dazu andere jar Archive (keine EJB-Module s.u.) nach Entitäten zu durchsuchen? Hierfür gibt es den Eintrag

 
<jar-file>../../myEjbInJar.jar</jar-file>

der relativ zu der betrachteten persistence.xml ein jar-Archiv definiert, das beim Booten des Servers gescannt werden soll.

Stateless- / Stateful-EJB

Das Einbinden dieser EJB erfolgt über ein zweites ejb-Modul. Hierfür wird in der application.xml des EAR je Modul ein Eintrag erzeugt.

 
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/application_7.xsd"
             id="Application_ID"
             version="7">
    <display-name>MyApplication</display-name>
    <module>
        <ejb>myApplicationEjbPart1.jar</ejb>
    </module>
    <module>
        <ejb>myApplicationEjbPart2.jar</ejb>
    </module>
    <module>
        <web>
            <web-uri>myApplicationWar.war</web-uri>
            <context-root>/myApplication</context-root>
        </web>
    </module>
</application>
</pre>

Die Build-Prozesse müssen natürlich entsprechend angepasst werden. Sind die Module so bekannt gemacht worden, werden beide gescannt. In unserem Beispiel benötigen wird keinen Eintrag in der persistence.xml. Wir definieren alle Entitäten in der persistence.xml des zweiten EJB-Modules. Das erste Modul besitzt keine. Alle EJB werden erkannt. Somit steht einer Strukturierung der EJBs nichts mehr im Wege.

Du hast Fragen oder Anmerkungen? Kontakt: arndt@schoenb.de

,