JEE7: Czy komponenty EJB i CDI obsługują transakcje zarządzane przez kontener?

Java EE7 składa się z kilku definicji „fasoli”:

Managed Beans 1.0 (JSR-316 / JSR-250)Dependency Injection for Java 1.0 (JSR-330)CDI 1.1 (JSR-346)JSF Managed Beans 2.2 (JSR-344)EJB 3.2 (JSR-345)

Aby pozbyć się chaosu w moim umyśle, badam kilka artykułów „kiedy używać tego typu fasoli”. Jeden z plusów dlaEJB wydaje się, że tak jestsame obsługują deklaratywne transakcje zarządzane kontenerami (słynne adnotacje transakcji). Nie jestem jednak pewien, czy to prawda. Czy ktoś może to zatwierdzić?

W międzyczasie wymyśliłem prostą aplikację demo, aby sprawdzić, czy to prawda. Właśnie zdefiniowałem fasolę CDI (nie EJB - nie ma adnotacji na poziomie klasy) w następujący sposób, na podstawieto skrawek:

public class CdiBean {
    @Resource
    TransactionSynchronizationRegistry tsr;

    @Transactional(Transactional.TxType.REQUIRED)
    public boolean isTransactional() {
        return tsr.getTransactionStatus() == Status.STATUS_ACTIVE;
    }
}

Rezultatem GlassFish 4.0 jest to, że ta metoda faktycznie zwraca wartość true, co zgodnie z moimi pytaniami jestnie działa zgodnie z oczekiwaniami. Spodziewałem się, że kontener zignoruje adnotację @Transactional dla metody bean CDI lub nawet wyrzuci wyjątek. Używam świeżo zainstalowanego serwera GlassFish 4, więc nie ma żadnych zakłóceń.

Więc moje pytanie jest naprawdę:

Które typy fasoli faktycznie obsługują transakcje zarządzane przez kontener?W trosce o ciekawość, jak mogę przetestować go za pomocą prostej aplikacji demonstracyjnej, jeśli powyższy kod jest nieprawidłowy?

(BTW: Ktoś opisał podobny problemtutaj, ale jego rozwiązanie nie dotyczy mojej sprawy.

questionAnswers(2)

yourAnswerToTheQuestion