Logowanie zmian w logice biznesowej @EJB, a @AroundInvoke / interceptors

0

Witam,
Wkrótce chcę opracować system logowania zmian, czyli np. użytkownik wykonuje metodę biznesową x, a informacja o tym zostaje zapisana w tabeli bazy danych specjalnie do tego przeznaczonej (audit table).

Generalnie nie chcę, aby metoda biznesowa zawierała jawne wołanie zapisania / tworzenia logu, bo ją to zanieczyszcza i utrudnia pisanie testów.

Chcę utworzyć adnotację, która spowoduje że odpowiednia informacja zostanie odnotowana (czyli tak naprawdę po wykonaniu metody odpali oddzielną metodę, która utworzy obiekt logu i wykonana na nim persist lub zaregauje na wystąpienie wyjątku i też odnotuje daną sytuację).

Wiem, że tworzenie takich customowych adnotacji umożliwiają Interceptors w EJB3.

Pytanie:
Czy interceptors nadają się do tworzenia logów znajdujących się w audit tables za pomocą JPA (czyli em.persist)? Czy jest jakieś szczególne ograniczenie, o którym warto wiedzieć?

Pozdrawiam,

0

WYgląd dobrze..uważaj na local proxy call i na transakcje

0

Dzięki, a więc jak będę miał chwilę zabieram się za testy.

0

Wszystko spoko ale właściwie czemu wymyślasz koło na nowo skoro jest aspectj z potrzebnymi adnotacjami?

0

Z tego co zawsze mi się kojarzyło AspectJ jest mocno związany ze Springiem i jakoś nie znalazłem dobrych przykładów na użycie z EJB3 (w przeciwieństwie do Interceptorów) i jeszcze z niego nie korzystałem (bo mało pracowałem ze Springiem).

Czy AspectJ jest używalny z EJB3? Nie mogę migrować do Springa w tym projekcie. To istniejący soft, który jest utrzymywany.

Z tego co przeczytałem tworzenie Interceptorów w EJB3 jest dobrze udokumentowane i raczej wydaje mi się łatwiejszym zadaniem niż dodawanie do tego AspectJ. Chyba, że się mylę.

0

Dla jasności: mówisz o intetceptorach z CDI a nie tych rozszerzeniach dostępnych z różnymi serwerami aplikacji? Jeśli tak to w czystej aplikacji JEE to będzie dobre rozwiązanie.

0

Mówię o tych standardowych, jednak są one na benach będących na pewno EJB3 (adnotacja @stateless), ze względu np. na automatyczne zarządzanie transakcjami przez kontener (JTA). Niektóre z tych beanów wykorzystują Welda (CDI) do wstrzykiwania różnego rodzaju utilsów (@Dependent), gdy są potrzebne.

Czy Interceptor dla EJB3 i CDI to jest dokładnie to samo? Z postu na StackOverflow wynika, że spokojnie mogę użyć tego z Welda dla mojego ziarenka EJB.
http://stackoverflow.com/questions/21719571/ejb-interceptors-vs-cdi-interceptors

Tak więc zostanie użyty Interceptor CDI (po migracjach w aplikacji mam EJB 3.2). Już specyfikacja EJB 3.0 udostępniała Interceptory zanim powstało CDI i raczej też nadawałyby się.

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