2010-12-15 16 views
6

Powiedzmy, że mam dwie aplikacje, każda z osobnym plikiem EAR, które wywołują się nawzajem w ramach tej samej transakcji JTA. Jeśli oba mają tego samego uczestnika, czy otrzymają tę samą sesję lub za każdym razem są tworzone za każdym razem?Dwa pliki EAR, ten sam podmiot współdzielący JPA, ta sama transakcja => ta sama sesja?

+0

czy aplikacje udostępniają pliki klas? –

+0

yes, the entities and some common api – Mauli

+0

Czy skonfigurowałeś swój kto mógł używać rozszerzonych kontekstów trwałości? – HDave

Odpowiedz

1

EntityManager (w JPA) jest mniej więcej równoznaczny z sesją (w trybie hibernacji). W czystej aplikacji JPA używałbyś tylko EntityManager. Obejmuje sesję. Sesja trwa tak długo, jak żyje EntityManager.

Nie ma powodu (i jak sądzę nie ma mowy) do dzielenia się EntityManager między dwiema aplikacjami, ponieważ działają one w różnych maszynach JVM (przynajmniej na serwerach aplikacji, z którymi pracowałem). To, co możesz zrobić, to udostępnić EntityManager setup (zwaną Jednostką Persistence Unit). Możesz to zrobić, umieszczając klasy encji i XML w JAR i używając ich z obu aplikacji, ale to, jak dokładnie to zrobisz, zależy prawdopodobnie od twojego serwera aplikacji. Z pewnością będzie miał dokładnie taki sam efekt, jak tylko duplikowanie klas i XML dla drugiej aplikacji.

Co się stanie: każda z dwóch aplikacji będzie miała własny kontekst utrwalania. Oznacza to, że po załadowaniu encji w jednej aplikacji nie zostanie ona załadowana w drugiej. Jeśli załadujesz i zmodyfikujesz jednostkę w aplikacji pierwszej, a następnie załadujesz ją do aplikacji drugiej, aplikacja druga zobaczy niezmodyfikowaną jednostkę (z wyjątkiem sytuacji, gdy masz bardzo dziwne ustawienia izolacji transakcji, jedna z nich decyduje się najpierw opróżnić obiekt).

Wszelkie konflikty pojawią się tylko na końcu transakcji JTA. Nie wiem, co się wtedy stanie i myślę, że zależy to od ustawień bazy danych i transakcji. Prawdopodobnie transakcja zostanie wycofana, jeśli obie aplikacje będą próbowały robić różne rzeczy na tych samych danych. Każda aplikacja będzie miała własne połączenie z bazą danych. Są powiązane przez transakcję JTA, więc tam, gdzie jest zapewnione, zarówno jeden, jak i drugi, wycofać.

Powiązane problemy