Jestem świadomy istnienia @Transactional w CDI. Jeszcze nie korzystałem. To troszkę wygląda na kolejną możliwość rozwiązania tego samego problemu. Zasadnicza różnica między EJB, a CDI to w tej chwili - wydaje mi się - pule obiektów. Oraz oddzielny wątek na transakcję w EJB. Nie wiem jak to w przypadku @Transactional CDI. Faktem jest, że JEE staje się coraz lżejsze i bardziej modułowe. Czasy ciężkich serwerów aplikacyjnych do małych aplikacji dobiegają końca.
Dużą zaletą EJB jest jeszcze asynchroniczne wywołanie metod (fire and forget) w full profile. Z drugiej strony dodali w JEE 7 Managed Executor Service (@Resource pobierany z serwera).
Z ciekawostek mam zamiar wypróbować Payara micro to może być taki Spring Boot na JEE7:
http://www.payara.co.uk/introducing_payara_micro
Warto wspomnieć, że w JEE7 nawet odchodzi się od intefejsów (w JEE5 konieczność imlementacji interfejsu @local/@Remote, w JEE 6 adnotacja @LocalBean, a teraz jest to domyślnie zdaje się, samo @stateless):
http://www.adam-bien.com/roller/abien/entry/injecting_an_executorservice_with_java
Prostota wygrywa i dobrze.