@PersistenceContext/@PersistenceUnit = java.lang.NullPointerException

0

Witam
aplikacja webowa (jersey/jackson/tomcat7) z klasami podzielonymi na pakiety entity/dao/serwis
chciałbym mieć możliwość wykorzystać obiekty z adnotacjami @PersistenceContext i @PersistenceUnit w klasach pakietu dao
ręcznie potrafię sobie zwrócić potrzebny obiekt (INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!))
odwołując się obecnie (via adnotacje) dostaję

sty 18, 2013 3:01:55 PM com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException
SEVERE: The RuntimeException could not be mapped to a response, re-throwing to the HTTP container

mam dwa pliki z konfigurację persistence.xml i web.xml
co jeszcze sprawdzić?

0

Czekaj bo nie bardzo kumam ?

Używasz tomcata7 i z tego co wiem nie jest to server aplikacyjny defacto nie posiada obsługi JPA czyli nie możesz używać adnotacji wstrzykiwania obiektu entity managera.
W tomcacie możesz używać hibernate ale natywnie nie jako dostawce JPA

0

ok, tomcat - kontener webowy, który może być zawarty w aplikacyjnym - jak jest różnica miedzy serwerem www a aplikacyjnym w obszarze dostarczania aplikacji?

0

Taki że kontener web pozwala ci uruchamiać aplikacje webowe, a serwer aplikacyjny udostępnia ci warstwę pośredniczącą do bazy, kolejek, puli wątków i miliona innych rzeczy

0

@lukasw44 : czy możesz rozwinąć zdanie "W tomcat'cie możesz używać hibernate ale natywnie nie jako dostawce JPA"?

0

JPA jest niejako standardem określa interfejs do usługi utrwalania/obsługi encji w JEE. Hibernate może służyć jako dostawca JPA, zależy tak naprawdę od servera jakiego użyjesz np. w glassfishu docelowo masz jpa ale obsługiwany jest przez toplinka, w jboss masz np użytego hibernate. Czyli higernate defacto w jboss jest użyty jako dostawca implementacji JPA.
Inaczej kontener aplikacyjny jest odpowiedzialny za zarządzanie obiektem entitymanagere jego wstrzykiwaniem, pulą obiektów itd.

Natomiast użycie Hibernata natywnie to po prostu w tomcacie używasz go jako warstwę utrwalania twoich encji czyli ORM (object relation mapping).
Teoretycznie możesz np. w Jbossie użyć hibernate`a natywnie tylko musisz wyłączyć wbudowanego w kontener, pytanie tylko po co .
Prostym przykładem są aplikacje springowe które w większości używają w większości hibernatea właśnie w sposób natywny. Ogranicza się to do odpowiedniej konfiguracji co możesz znaleźć na wielu stronach.

Dlatego jeśli chcesz użyć @PersistanceContext to musisz użyć kontenera JEE ponieważ to on wstrzykuje Ci usługę EntityManagera, on nią zarządza itd...
PS. W aplikacjach JEE nie powinno używać się adnotacji @PersistanceUnit powinno się je używać w aplikacjach JSE jeśli tam chcesz wstrzyknąć sobie entitymanagera.

0

Czyli natywny Hibernate = ORM, jaki jest zysk w przypadku "aktywnego" Hibernate na aplikacyjnym?
najbardziej interesuje mnie zysk przy zapisach i transakcjach - wymaga to jednak dostępu do DB, czy jest inaczej zorganizowane (aspekt praktyczny)?
@lukasw44:dzięki

0

Ciężko tu mówić o zysku bądź też nie. Jest to troszkę pojęcie względne zależne przede wszystkim od tego jaką masz aplikacje (jak bardzo jest rozbudowana itd. jakich technologi używa).

To jest temat dość rozległy. Ogólnie teraz masz 2 technologie pomiędzy którymi dokonuje się wyboru Spring vs JEE. Chociaż twórcy springa twierdzą, że nie są alternatywą dla JEE, to tak naprawdę wszystkie aplikacje są budowane właśnie w oparciu te 2 technologie.

Ciężko powiedzieć co jest lepsze każde z tych rozwiązań ma swoje plusy i minusy. Ja mogę Ci powiedzieć, że jeśli masz mały projekt to lepiej wybrać springa, no i jeśli oczywiście chcesz pracować z tomcatem no to tylko spring :D + hibernate który obsłuży Ci encje i tyle.

0

Ogólnie to większość ludzi ze stajni hibernate`a brało udział w tworzeniu specyfikacji JPA.
Więc z praktycznego punktu widzenia jeśli chodzi o api to jest dużo podobieństw tu i tu. Pewne rzeczy się inaczej nazywają nie ma jednak przepaści jeśli pracowałeś z hibernate to bez problemu zadomowisz się w JPA i odwrotnie.

Ciężko mi jest natomiast mówić o zyskach jeśli chodzi o zapisy i transakcje. Ogólnie można powiedzieć, że jest podobnie tu i tu wszystko niestety zależy też od kontekstu czyli o czym konkretnie rozmawiamy.

Tu musiałbyś sobie wykonać już sam testy chociaż ciężko by Ci było zmierzyć gdzie np zapis jest szybszy/ odczyt itd. Hibernate bo o nim w tym przypadku mowa ma domyślnie włączoną obsługę transakcji w JEE w springu też nie ma z tym problemu.

Większe znaczenie będzie tu miała jednak użyta DB niż sam framework .

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