HOla, cuando se esta trabajando con EJBs que manejen la transaccionabilidad por el EJB container, tienes que asegurarte que se aborte una transaccion a travès del método setRollbackOnly(true).
Es decir, capturas las excepciones que pueden ocurrir dentro del mètodo y cuando sucedan en el bloque catch, llamas al setRollbackOnly. Eso debe funcionar.
Más info en la pàgina 305 del documento Mastering EJB capìtulo de transacciones, en:
http://www.theserverside.com/books/wiley/masteringEJB/