czwartek, 1 stycznia 2009

Dostęp do kontekstu utrwalania w niezarządzanych obiektach JSF

Tworząc projekt z użyciem JSF i Spring Security musiałem w jednej z metod uwierzytelniających pobrać dane o użytkowniku z bazy danych. Problemem było to, że obiekt ten nie był zarządzanym przez kontener aplikacji więc nie mogłem wstrzyknąć sobie do niego referencji do kontekstu utrwalania. Samemu tworząc obiekt jak w przypadku platformy Java SE uzyskiwałem wyjątek braku informacji o jednostce utrwalania. Ostatecznie z rozwiązaniem problemu przyszła mi z pomocą grupa dyskusyjna pl.comp.lang.java a dokładniej użytkownik Jarek któremu bardzo dziękuje ^^

Ok, żeby dostać się do kontekstu utrwalania należy wzbogacić nasz deskryptor wdrożenia web.xml o następujący wpis:
<persistence-context-ref>
<persistence-context-ref-name>
persistence/[nazwa jednostki utrwalania z persistence.xml]
</persistence-context-ref-name>
<persistence-unit-name>
[nazwa jednostki utrwalania z persistence.xml]
</persistence-unit-name>
</persistence-context-ref>
Miedzy pierwszą parą znaczników wpisujemy gdzie będziemy mogli znaleźć naszą jednostkę utrwalania w JNDI, a w drugiej nazwę tej jednostki z pliku persistence.xml. Bardzo proste:) Należy tylko pamiętać aby wcześniej wszystko skonfigurować związanego z utrwalaniem.
Teraz gdy to już mamy możemy dobrać się do tego czego szukamy:
InitialContext ictx = new InitialContext();
Context envCtx = (Context) ictx.lookup("java:comp/env");
entityManager = (EntityManager) envCtx.lookup("persistence/[nazwa]");

Działa :)

Brak komentarzy:

Prześlij komentarz