Transakcje i podział logiczny

0

Witam,
coś nie mogę dojść do ładu z transakcjami
przyjąłem taką strykturę - dao < ejb < servlet
w dao mam @PersistenceContext, logika pracy z różnymi dao jest w EJB, a z EJB pracuję w servletach
jak to obadnotacjować (gdzie), żeby transakcjami zarządzał container lub bean?

0

Każdy bean EJB domyślnie jest zarządzany przez kontener. Jeśli chcesz zarządzać ręcznie transakcjami (bo np. w ramach metody potrzebujesz kilku transakcji, to w zasadzie jedyny powód dla BMT) to możesz włączyć BeanManagedTransactions. Potem korzystasz z UserTransaction.

Adnotacje:

@Stateless
@LocalBean
@TransactionManagement(TransactionManagementType.BEAN)
public class MyEjb {
}

Mniej więcej coś takiego widać na stronie: http://examples.javacodegeeks.com/enterprise-java/ejb3/transactions/bean-managed-transactions/

0

Ok, to się zgadza, ale : )
w tym przykładzie mamy TransactionManagementType w tej samej klasie co @PersistenceContext i UserTransaction
a ja potrzebowałbym to regulować w inny sposób tzn. efekt miałby być taki
@PersistenceContext w MyDao, @TransactionManagement w MyEjb, a @Resource UserTransaction w MyServlet (jesli BMT)

0

To chyba mocno nietypowe wymaganie. W JEE zdaje się warstwą transakcyjną powinno zarządzać EJB, a servlet to tylko wejście - wyjście. Może transakcje CDI się na coś przydadzą,
tam można ręcznie zarządzać transakcjami od JEE 7, trochę jak w Springu. Problem w tym, że mało kto me JEE 7 na produkcji. :( Beanem CDI może być każdy obiekt, wystarczy ustawić all w beans.xml.

Tak właściwie, to dlaczego servlet miałby zarządzać transakcjami?

0

to niech se wsadzi do servleta EntityManager i odpali entityManager.getTransaction().begin();
tak miałem w warach na tomcacie, teraz kombinuję
EJB jako servlet (rest)? but how?

//
dlaczego servlet?
bo albo mam jedną transakcję na request (chyba zrobię EJB jako dao), albo mogę ręcznie ją podzielić na dwie lub więcej

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