Aplikacja EAR i konfiguracja JPA

0

Mam projekt oparty o Mavena 3, ktory sklada sie z kilku podprojektow(modulow):

  • modul EAR
  • modul WAR
  • moduly EJB

W modulach EJB mam zdefiniowane encje i wszystko byloby ok gdyby nie to, ze musze tworzyc w kazdym module EJB osobny plik persistence.xml. Czy mozna uzyc jednego pliku persistence.xml, ktory bylby domyslnym plikiem konfiguracyjnym dla wszystkich modulow EJB?

0

Robisz jeden osobny jar z persistence.xml i encjami i wrzucasz go do EAR/lib - jary z tego katalogu sa widoczne dla wszystkich modulow.

0

Troche mi sie nie podoba to rozwiazanie z nastepujacego powodu:

Zalozymy, ze mam dwa moduly EJB:
a) modul produkty, a w nim encje produkt
b) modul terminarz, a w nim encje termin

Takie rozwiazanie jest fajne poniewaz encja, ktora jest mocno powiazana z modulem umieszczona jest wlasnie w module a nie poza nim. Jezeli zrobie sobie osobnego jara typu "persistance.jar" i zaczne tam ladowac encje z wszystkich modulow to juz nie bedzie to takie fajne. Chyba wolalbym juz tworzyc osobny plik persistence.xml. Moze jakies inne rozwiazanie?

Przy okazji mam pytanie do ogolu: czy w projektach komercyjnych, w ktorych pracowaliscie panowal zwyczaj aby dla kazdego EJB tworzyc osobny plik persistence.xml czy moze jeden plik persistence.xml konfigurowal dostep do bazy dla calej aplikacji?

0

Chcesz wspoldzielic, ale chcesz miec prywatne? Nie rozumiem chyba twojego problemu, co mi sie ostatnio coraz czesciej zdarza... No coz, pora do domu.

0

Chcialbym wspoldzielic plik konfiguracyjny persistence.xml, natomiast encje powinny byc prywatne. Najlepsze rozwiazanie byloby takie:

  • tworze sobie ziarno EJB w formie modulu maven a w nim encje. Jezeli w tym module nie utworze sobie pliku persistence.xml to modul powinien dzialac w oparciu o domyslna konfiguracje JPA, ktora bylaby utworzona w jakims innym miejscu (wspolnym dla wszystkich modulow).
  • jezeli wewnatrz modulu EJB utworzylbym plik persistence.xml to domyslna konfiguracja powinna byc nadpisana przez ten wlasnie plik.
0

Oj nie wiem czy to zadziala. Co chcesz w tym persistence.xml trzymac? Bo jesli jakies zmapowane encje to one musza byc dostepne dla classloadera tego jara, a to nie zawsze (nigdy?) zachodzi. Poza tym, jaka nazwe bedzie miala ta JPA unit w tym wspolnym pliku, a jakie w innych plikach? Jesli takie same to nie zadziala, dostaniesz ajkis wyjatek ze nie wiadomo ktora jpa unit uzyc bo sa 2 z taka sama nazwa. Ogolnie chyba za duzo kombinujesz... Moze opisz ogolniej jaki masz problem i ktos podpowie inne rozwiazanie niz jakies hacki z persistence.xml?

0

OK to moze tak: mam pewien projekt, ktory podzielilem sobie na podprojekty (mavenowe moduly). Kiedy otworze ten projekt w eclipse widze kilka odrebnych projektow. Lista projektow prezentuje sie mniej-wiecej tak:

moja-aplikacja
moja-aplikacja-ear
moja-aplikacja-war
moja-aplikacja-ejb-1
moja-aplikacja-ejb-2
...
moja-aplikacja-ejb-n

Kazdy modul, ktory ma w nazwie "ejb" realizuje jakies odrebne zalozenia. W kazdym z nich mozna znalezc encje, ktore sa silnie powiazane z zalozeniami tego modulu i nie sa powiazane z zalozeniami reszty modulow (tj. modul 1 posiada encje potrzebne tylko w module 1, modul 2 posiada encje, ktore sa potrzebne tylko w module 2 itp.). W kazdym z tych modulow mozna znalezc rowniez plik persistence.xml i to mi sie wlasnie nie podoba.

Nie podoba mi sie, ze plik persistence.xml znajduje sie w kazdym module EJB poniewaz plik ten jest po prostu powielony. Zamiast tworzyc "n" plikow persistence.xml moglbym po prostu stworzyc jeden.

Dodam, ze moj plik persistence.xml wyglada tak:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
             http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
             version="2.0">                          
    <persistence-unit name="[nazwa zrodla]">        
        
        <jta-data-source>java:jboss/datasources/[nazwa zrodla danych]</jta-data-source>
                
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
            <property name="hibernate.hbm2ddl.auto" value="create"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>            
        </properties>        
    </persistence-unit>
</persistence>

Pytanie sprowadza sie wiec do postaci: co zrobic, zeby nie musiec powielac pliku persistence.xml? A moze dobrze robie, ze go powielam?

1 użytkowników online, w tym zalogowanych: 0, gości: 1