Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Dostęp do wielu baz danych przez JPA w ramach EJB 3.0

22 views
Skip to first unread message

michal.c...@gmail.com

unread,
Dec 12, 2007, 5:52:51 AM12/12/07
to
Witam wszystkich.

Od paru dni siedzę nad problemem zorganizowania dostępu do wielu baz
danych poprzez JPA. Ma to się odbywać w ramach ziaren EJB 3.0.

Oto kilka szczegółów aplikacji:
- nie ma z góry przypisanej liczby baz danych, do których się
podłączamy (liczba ta zmienia się w trakcie działania programu)
- każda z baz danych ma tą samą strukturę (mapowane są te same klasy
encji)
- chciałbym umieścić to wszystko w ramach ziarna stanowego (Stateful
EJB 3.0)

Do tej pory próbowałem czegoś takiego:
- stworzyłem w persistence.xml 3 persistence unit (PU; każda z inną
nazwą i z inną bazą danych) i każda ma obsługiwać encje tego samego
typu
- w ziarnie stanowym stworzyłem mapę typu: Map<String nazwa,
EntityManagerFactory fabryka>, gdzie nazwa jest nazwą PU, dla którego
jest stworzona fabryka managera
- w wywołaniu metody zapisu obiektu przekazuję jako parametr nazwę PU
oraz dane potrzebne do stworzenia obiektu, który zapisujemy do bazy
- w ciele metody używam struktury if-else do pobrania z mapy
odpowiedniej fabryki
- za pomocą fabryki tworzę obiekt typu EntityManager
- z danych przekazanych w wywołaniu tworzę obiekt do zapisu
- wywołuję metodę persist(Object) zarządcy encji

W momencie, gdy uruchamiam to i wywoływana jest ta metoda wszystko
idzie dobrze do momentu tworzenia obiektu. Wyskakuje mi w tym miejscu
błąd:

java.lang.IllegalArgumentException: Object: entities.Person[id=null]
is not a known entity type.
at
oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:
3212)
at
oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerImpl.persist(EntityManagerImpl.java:
205)
at beans.SFPersonBeanBean.createPerson(SFPersonBeanBean.java:
76) ..................


Ma ktoś jakiś pomysł co z tym błędem zrobić, z czego on wyniknął lub
cokolwiek?
Może jest inny sposób na rozwiązanie tej sytuacji (obsługa wielu baz
danych)? Inne API było by lepsze (Hibernate, TopLink lub Kodo JPA)?

Będę ogromnie wdzięczny za jakiekolwiek odpowiedzi.

pozdrawiam
Michał Chmielarz

Brzezi

unread,
Dec 12, 2007, 6:08:39 AM12/12/07
to
Śr, 12 gru 2007 o 11:52 GMT, michal.c...@gmail.com napisał(a):

> Ma ktoś jakiś pomysł co z tym błędem zrobić, z czego on wyniknął lub
> cokolwiek?
> Może jest inny sposób na rozwiązanie tej sytuacji (obsługa wielu baz
> danych)? Inne API było by lepsze (Hibernate, TopLink lub Kodo JPA)?
>
> Będę ogromnie wdzięczny za jakiekolwiek odpowiedzi.

Czego uzywasz jako implementacji JPA? jezeli hibernate, to moze Hibernate
shards Ci jakos sie nada...

Pozdrawiam
Brzezi
--
[ E-mail: brz...@enter.net.pl ][ ]
[ Ekg: #3781111 ][ ]
[ LinuxUser: #249916 ][ ]

michal.c...@gmail.com

unread,
Dec 12, 2007, 6:16:24 AM12/12/07
to
On 12 Gru, 12:08, Brzezi <usunto.brz...@enter.net.pl> wrote:

Nie używam żadnych klas i metod specyficznych dla danego dostawcy
persistence.
Jako dostawcę w persistence.xml mam ustawionego TopLink'a.
Zastanawiam się czy jest w ogóle możliwość zrobienia tego w ramach
specyfikacji JPA.

Michał

GfP

unread,
Dec 12, 2007, 9:33:49 AM12/12/07
to
A jestes pewien ze ten bald jest powiazany z faktem uzywania kliku
baz? Sprawdzales czy ten kod dziala dobrze jak masz tylko jedna baze?
Bo to moze byc bald zwiazany z np mapowanie encji.

michal.c...@gmail.com

unread,
Dec 12, 2007, 9:58:16 AM12/12/07
to

Tworzenie tego cuda zacząłem od sprawdzenia działania właśnie tylko
dla jednej bazy z jednym PU. Działało dobrze - tworzyło tabelki jakie
trzeba było i wsadzało tam encje za encją. Dopiero się wywaliło jak
dołożyłem kolejne PU. :|

Waldemar Kot

unread,
Dec 12, 2007, 11:52:04 AM12/12/07
to
michal.c...@gmail.com napisał(a):
> Zastanawiam sie czy jest w ogole mozliwosc zrobienia tego w ramach
> specyfikacji JPA.

Tak - JPA dopuszcza wiele PU, więc można równocześnie pracować na wielu bazach
danych (mogę przynajmniej mówić za WebLogic 10 czyli Kodo/OpenJPA - nie znam
aż tak szczegółów konfiguracji u tych Klientów, którzy tego używają, ale nie
słyszałem, aby była to jakaś specjalna konfiguracja - tyle, że trzeba używać
XA). Skłaniałbym się zatem bardziej ku sprawdzeniu konfiguracji, zwłaszcza że
wyjątek wygląda na typowy.

Pozdrawiam,
Waldek

PS
Na jakiejś prezentacji wewnątrz BEA pamiętam też, że Patrick Linskey
wspominał, że nawet można dynamicznie (programowo) podmieniać mapowania -
przydatne gdyby chcialo sie np. przechowywac różne instancje entity w różnych
tabelach/bazach danych (np. klient o ID od 0 do 100 w tabeli Customer_100, 101
do 200 w tabeli Customer_200, itd.). Oczywiście bez zmiany modelu logicznego.
Jak widać JPA - mimo wersji 1.0 - jest dosyć pojemne.

PS 2
To czego JPA w obecnej wersji nie ma ustandaryzowanego, to współpracy wielu
implementacji/dostawców w ramach jednej aplikacji. Jest oczywiście XA i to
załatwia większość problemów, ale pozostaje choćby uzgadnianie cache'y (a
przynajmniej niewchodzenie jeden drugiemu).

PS 3
"Ziarna" ??? Brrr... Jacek - coś czuję, że to znowu Twoja sprawka ;-D

--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

michal.c...@gmail.com

unread,
Dec 12, 2007, 1:57:36 PM12/12/07
to
On 12 Gru, 17:52, "Waldemar Kot" <waldemar_kot.WYT...@gazeta.pl>
wrote:
> michal.chmiel...@gmail.com napisał(a):

OK - to pozostaje mi tylko sprawdzenie w takim razie konfiguracji.
Możliwe, że coś pominąłem - początkujący jestem w JPA po prostu
no... :)

Ziarnka, fasolki, beany... HMM - bez bicia przyznaję, że byłem na
ostatnim wykładzie Jacka w Poznaniu. :P

Waldemar Kot

unread,
Dec 12, 2007, 3:22:58 PM12/12/07
to
michal.c...@gmail.com napisał(a):
> Ziarnka, fasolki, beany... HMM - bez bicia przyznaj=EA, =BFe by=B3em na
> ostatnim wyk=B3adzie Jacka w Poznaniu. :P

Rety - to już poza Warszawę wyszło ??? Jak ktoś spoza Polski coś o 'ziarnach
EJB' napisze, to wystąpię żeby ukarać Jacka jakoś drastyczniej - do wyboru:
1. miesięczny zakaz publikacji na blogu
2. przyznanie racji, że Spring nie jest serwerem aplikacyjnym
3. ogłoszenie światu, że Netbeans sucks a Eclipse rulez
4. na pytania 'gdzie dowiedzieć się więcej o Geronimo' odpowiadanie:
http://www.geronimos.com/

A najlepiej wszystko razem...

;-)

W.

Bartek Jablonski

unread,
Dec 12, 2007, 4:08:44 PM12/12/07
to
Waldemar Kot wrote:
> Rety - to już poza Warszawę wyszło ??? Jak ktoś spoza Polski coś o
> 'ziarnach EJB' napisze, to wystąpię żeby ukarać Jacka jakoś drastyczniej -
> do wyboru: 1. miesięczny zakaz publikacji na blogu
> 2. przyznanie racji, że Spring nie jest serwerem aplikacyjnym
> 3. ogłoszenie światu, że Netbeans sucks a Eclipse rulez
> 4. na pytania 'gdzie dowiedzieć się więcej o Geronimo' odpowiadanie:
> http://www.geronimos.com/

Ty okrutniku!

Bartek

michal_ch

unread,
Dec 13, 2007, 2:54:07 AM12/13/07
to
On 12 Gru, 22:08, Bartek Jablonski <jabo...@nie.chce.spamu.go2.pl>
wrote:

Może zasłużył na to wszystko, ale...
ECLIPSE......??!! 8)

Przecież wszyscy wiedzą, że Netbeans lepszejszy... :P

Krzysztof Wolny

unread,
Dec 13, 2007, 3:21:04 AM12/13/07
to
* Waldemar Kot wrote, On 2007-12-12 21:22:

> Rety - to już poza Warszawę wyszło ??? Jak ktoś spoza Polski coś o 'ziarnach
> EJB' napisze, to wystąpię żeby ukarać Jacka jakoś drastyczniej - do wyboru:
> 1. miesięczny zakaz publikacji na blogu
> 2. przyznanie racji, że Spring nie jest serwerem aplikacyjnym
> 3. ogłoszenie światu, że Netbeans sucks a Eclipse rulez
> 4. na pytania 'gdzie dowiedzieć się więcej o Geronimo' odpowiadanie:
> http://www.geronimos.com/

ROTFL :)

--
Krzysztof Wolny

kkk....@gmail.com (replace 'kkk' with one 'k')

Jacek Laskowski

unread,
Dec 14, 2007, 7:33:51 PM12/14/07
to
michal.c...@gmail.com wrote:

> Od paru dni siedzę nad problemem zorganizowania dostępu do wielu baz
> danych poprzez JPA. Ma to się odbywać w ramach ziaren EJB 3.0.

Cześć Michał,

Trochę to trwało, ale w końcu jest. Właśnie opublikowałem artykuł o JPA
- Dynamiczny dostęp do wielu baz danych w JPA [1], który wierzę, że
odpowiada na pytanie z wymaganymi detalami. Miłej lektury!

p.s. Tylko więcej takich (dociekliwych) pytań w 2008 ;-)

Jacek

[1]
http://www.jaceklaskowski.pl/wiki/Dynamiczny_dost%C4%99p_do_wielu_baz_danych_w_JPA

--
Jacek Laskowski
http://www.JacekLaskowski.pl

Jacek Laskowski

unread,
Dec 14, 2007, 7:38:31 PM12/14/07
to
Waldemar Kot wrote:

> "Ziarna" ??? Brrr... Jacek - coś czuję, że to znowu Twoja sprawka ;-D

A jak! ;-) Ziarna już zadomowiły się u mnie na dobre.

p.s. Nie wyobrażasz sobie jak uśmiałem się, kiedy to przeczytałem -
dobrze, że nie piłem wtedy herbaty, bo miałbym ją całą na monitorze.
Potrafisz wstrząsnąć człowiekiem ;-)

Jacek

Jacek Laskowski

unread,
Dec 14, 2007, 7:41:34 PM12/14/07
to
Waldemar Kot wrote:

> Rety - to już poza Warszawę wyszło ???

A mówiłem, abyś się zebrał z jakąś prezentacją nt ziaren springowych ;-)
Szykuje się kilka konferencji w Polsce w przyszłym roku, więc albo
będziesz prelegentem z tymi beanami, albo rok 2008 odnotujemy jako
kolejny rok ziaren.

0 new messages