Catch PersistenceException ou ConstraintViolationException dans JBoss as 7

Je suis dans le processus de migration de JBoss as 6 de JBoss as 7 et ont de la difficulté avec mes tests. Supposons un simple EJB entity:

@Entity public class MyTest implements Serializable
{
  @Id @GeneratedValue(strategy=GenerationType.AUTO)
  private long id;

  @NotNull
  private String headline;
}  //getter/setter

Dans mon @Stateless Bean je suis en train de faire quelque chose comme ceci (comme avant avec JBoss5 et JBoss6):

@Inject private EntityManager em;

public <T extends Object> T persist(T o) throws MyContraintViolationException
{
    System.out.println("***************** persist:");
    try
    {
      em.persist(o);
    }
    catch (Exception e)
    {
      System.out.println("*************** exception:");
      //Further investigation of Exception e,
      //then throw MyContraintViolationException
    }
}

Cela fonctionne bien si je ne viole pas le @NotNull contrainte. Si headline==null, je reçois des exceptions, mais ne pas entrer dans mon catch bloc:

12:19:45 INFO  ******************** persist:
12:19:45 WARN  [com.arjuna.ats.arjuna] (management-handler-threads - 2)
   ARJUNA012125: TwoPhaseCoordinator.beforeCompletion - failed for
   SynchronizationImple< 0:ffffc0a801fb:4f969a6e:4f058744:9,
   org.hibernate.engine.transaction.synchronization.internal.
   RegisteredSynchronization@38eb9b73 >: javax.persistence.PersistenceException:
   error during managed flush
...
Caused by: javax.validation.ConstraintViolationException: Validation failed for
   classes [my.test.MyTest] during persist time for groups
   [javax.validation.groups.Default, ] List of constraint violations:[
   ConstraintViolationImpl{interpolatedMessage='kann nicht null sein',
   propertyPath=headline, rootBeanClass=class my.test.MyTest,
   messageTemplate='{javax.validation.constraints.NotNull.message}'}

Je suis heureux de voir que le message d'erreur est beaucoup plus détaillé que dans les versions précédentes de JBoss, mais comment puis-je attraper un javax.validation.ConstraintViolationException et de lancer ma propre MyContraintViolationException? Même le message de débogage ***** exception est pas imprimé.

OriginalL'auteur Thor | 2012-01-05