JEE7: Ne EJB et CDI haricots soutien container-managed transactions?

Java EE7 se compose d'une série de "haricot" définitions:

  • Géré Haricots 1.0 (JSR 316 /JSR 250)
  • L'Injection de dépendance pour Java 1.0 (JSR 330)
  • CDI 1.1 (JSR-346)
  • JSF Géré Haricots 2.2 (JSR-344)
  • EJB 3.2 (JSR-345)

Afin de se débarrasser du chaos dans mon esprit, je les études de plusieurs articles de "quand à utiliser bean de type". L'un des avantages pour EJB semble que ils sont les seuls à soutenir déclarative container-managed transactions (la fameuse transaction annotations). Je ne suis pas sûr, cependant, si cela est correct. Quelqu'un peut-il approuver le présent?

Pendant ce temps, je suis venu avec une simple démo de l'application pour vérifier si c'était vrai. J'ai juste défini un bean CDI (pas un EJB - il n'a pas le niveau de la classe d'annotations) comme suit, basé sur cette extrait de:

public class CdiBean {
    @Resource
    TransactionSynchronizationRegistry tsr;

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

Maintenant, le résultat sur GlassFish 4.0 est que cette méthode renvoie en fait vrai, ce qui, d'après mes enquêtes, est ne fonctionne pas comme prévu. Je l'ai fait attendre le conteneur d'ignorer l' @Transactional annotation sur un CDI méthode d'haricot, ou même de lancer une exception. J'utilise un fraîchement installé GlassFish 4 serveur, donc il n'y a pas d'interférences.

Donc ma question est vraiment:

  • De haricots qui ne sont en fait de support container-managed transactions?
  • Juste pour le plaisir de la curiosité, comment ai-je pu le tester avec une simple démo de l'application si le code ci-dessus est faux?

(BTW: Quelqu'un a décrit un problème similaire ici, mais sa solution ne s'applique pas à mon cas.

"Afin de se débarrasser du chaos dans mon esprit", tellement vrai

OriginalL'auteur SputNick | 2013-07-24