{"id":108,"date":"2016-08-25T11:51:05","date_gmt":"2016-08-25T09:51:05","guid":{"rendered":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/?p=108"},"modified":"2022-12-04T11:53:22","modified_gmt":"2022-12-04T10:53:22","slug":"jee7-mehrere-archive-fuer-entitaeten-und-ejb-verwenden","status":"publish","type":"post","link":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/?p=108","title":{"rendered":"JEE7: Mehrere Archive f\u00fcr Entit\u00e4ten und EJB verwenden"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Umgebung<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Wildfly 10<\/li>\n\n\n\n<li>EE7<\/li>\n<\/ul>\n\n\n\n<p>H\u00e4ufig ist es sinnvoll die Logik in Form von Entit\u00e4ten 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\u00fcr ein Projekt entwickelt wurden, unterschieden werden.<\/p>\n\n\n\n<p>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.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Entit\u00e4ten<\/h2>\n\n\n\n<p>Die Entit\u00e4ten 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\u00e4ten zu durchsuchen? Hierf\u00fcr gibt es den Eintrag<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> \n&lt;jar-file&gt;..\/..\/myEjbInJar.jar&lt;\/jar-file&gt;\n<\/pre>\n\n\n\n<p>der relativ zu der betrachteten persistence.xml ein jar-Archiv definiert, das beim Booten des Servers gescannt werden soll.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Stateless- \/ Stateful-EJB<\/h2>\n\n\n\n<p>Das Einbinden dieser EJB erfolgt \u00fcber ein zweites ejb-Modul. Hierf\u00fcr wird in der application.xml des EAR je Modul ein Eintrag erzeugt.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"> \n&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;application xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n             xmlns=\"http:\/\/xmlns.jcp.org\/xml\/ns\/javaee\"\n             xsi:schemaLocation=\"http:\/\/xmlns.jcp.org\/xml\/ns\/javaee http:\/\/xmlns.jcp.org\/xml\/ns\/javaee\/application_7.xsd\"\n             id=\"Application_ID\"\n             version=\"7\"&gt;\n    &lt;display-name&gt;MyApplication&lt;\/display-name&gt;\n    &lt;module&gt;\n        &lt;ejb&gt;myApplicationEjbPart1.jar&lt;\/ejb&gt;\n    &lt;\/module&gt;\n    &lt;module&gt;\n        &lt;ejb&gt;myApplicationEjbPart2.jar&lt;\/ejb&gt;\n    &lt;\/module&gt;\n    &lt;module&gt;\n        &lt;web&gt;\n            &lt;web-uri&gt;myApplicationWar.war&lt;\/web-uri&gt;\n            &lt;context-root&gt;\/myApplication&lt;\/context-root&gt;\n        &lt;\/web&gt;\n    &lt;\/module&gt;\n&lt;\/application&gt;\n&lt;\/pre&gt;\n<\/pre>\n\n\n\n<p>Die Build-Prozesse m\u00fcssen nat\u00fcrlich entsprechend angepasst werden. Sind die Module so bekannt gemacht worden, werden beide gescannt. In unserem Beispiel ben\u00f6tigen wird keinen Eintrag in der persistence.xml. Wir definieren alle Entit\u00e4ten 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.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Umgebung H\u00e4ufig ist es sinnvoll die Logik in Form von Entit\u00e4ten 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\u00fcr ein Projekt entwickelt wurden, unterschieden werden. In der IDE und im Build sind dies Module\/Projekte sauber [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,7],"tags":[],"class_list":["post-108","post","type-post","status-publish","format-standard","hentry","category-jee","category-wildfly"],"_links":{"self":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/108","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=108"}],"version-history":[{"count":1,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/108\/revisions"}],"predecessor-version":[{"id":109,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=\/wp\/v2\/posts\/108\/revisions\/109"}],"wp:attachment":[{"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=108"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=108"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.schoenberg-solutions.de\/arndtblog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=108"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}