JEE7: Unterstützen EJB- und CDI-Beans containergesteuerte Transaktionen?

Java EE7 besteht aus einer Reihe von "Bean" -Definitionen:

Managed Beans 1.0 (JSR-316 / JSR-250)Abhängigkeitsinjektion für Java 1.0 (JSR-330)CDI 1.1 (JSR-346)JSF Managed Beans 2.2 (JSR-344)EJB 3.2 (JSR-345)

Um das Chaos in meinem Kopf loszuwerden, studiere ich einige Artikel über "Wann welche Bohnensorte zu verwenden ist". Einer der Profis fürEJB scheint das zu seinSie allein unterstützen deklarative containergesteuerte Transaktionen (die berühmten Transaktionsanmerkungen). Ich bin mir jedoch nicht sicher, ob dies richtig ist. Kann das jemand gutheißen?

In der Zwischenzeit habe ich eine einfache Demo-Anwendung entwickelt, um zu überprüfen, ob dies tatsächlich zutrifft. Ich habe gerade eine CDI-Bean definiert (nicht ein EJB (es hat keine Annotationen auf Klassenebene) wie folgt, basierend aufdiese Ausschnitt:

public class CdiBean {
    @Resource
    TransactionSynchronizationRegistry tsr;

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

Nun ist das Ergebnis von GlassFish 4.0, dass diese Methode tatsächlich true zurückgibt, was nach meinen Untersuchungen der Fall istfunktioniert nicht wie erwartet. Ich hatte erwartet, dass der Container die @ Transactional-Annotation für eine CDI-Bean-Methode ignoriert oder sogar eine Ausnahme auslöst. Ich verwende einen frisch installierten GlassFish 4-Server, sodass keine Interferenzen auftreten.

Also meine Frage ist wirklich:

Welche Bean-Typen unterstützen tatsächlich containergesteuerte Transaktionen?Wie könnte ich es aus Gründen der Neugier mit einer einfachen Demo-Anwendung testen, wenn der obige Code falsch ist?

(Übrigens: Jemand hat ein ähnliches Problem beschriebenHier, aber seine Lösung gilt nicht für meinen Fall.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage