JEE7: Tun, EJB-und CDI-beans-Unterstützung von container-managed Transaktionen?

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

  • 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)

Um loszuwerden, das chaos in meinem Kopf, ich Studien mehrere Artikel von "Verwendung der bean-Typ". Einer der Vorteile für EJB scheint zu sein, dass Sie allein deklarative Unterstützung von container-managed Transaktionen (die berühmten Transaktion Anmerkungen). Ich bin mir nicht sicher, ob dies korrekt ist. Kann das jemand genehmigen?

Inzwischen habe ich eine einfache demo-Anwendung, um zu überprüfen, ob dies tatsächlich wahr ist. Ich habe gerade definiert, die eine CDI-bean (nicht ein EJB - es hat keine Klasse Anmerkungen), wie folgt, basierend auf diese snippet:

public class CdiBean {
    @Resource
    TransactionSynchronizationRegistry tsr;

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

Nun, das Ergebnis auf GlassFish 4.0 ist, dass diese Methode tatsächlich gibt true zurück, welche, nach meinen Erkundigungen, ist nicht wie erwartet funktioniert. Habe ich erwarten, dass die container zu ignorieren, die @Transactional-annotation, die auf ein CDI-bean-Methode, oder sogar eine exception werfen. Ich benutze eine frisch installierte GlassFish-4-server, so gibt es keine Interferenzen.

Also meine Frage ist wirklich:

  • Die bean-Typen tatsächlich Unterstützung von container-managed Transaktionen?
  • Nur aus Gründen der Neugier, wie könnte ich es testen, mit einem einfachen demo-Anwendung, wenn der code oben ist falsch?

(BTW: Jemand beschrieb ein ähnliches problem hieraber seine Lösung nicht für meinen Fall.

InformationsquelleAutor der Frage SputNick | 2013-07-24

Schreibe einen Kommentar