|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||||
|
Nouveau Membre du Club
![]() Inscription : décembre 2003 Messages : 77 ![]() |
Bonjour,
Je souhaite annuler (rollback) une transaction dans la callback @PostPersist d'une entité. Mon but est de vérifier des paramètres et, si ils ne sont pas bon, d'annuler la transaction pour que l'objet en question ne soit pas enregistré. J'ai lu sur un site l'information suivante : Citation:
Code :
Code :
Caused by: java.lang.ClassCastException: java.lang.Exception cannot be cast to java.lang.Error Pour l'instant mon code se limite à : Code :
|
|||||
|
|
00
|
|
|
#2 | ||
|
Membre éprouvé
![]() ![]() Philippe BASTIANIArchitecte technique Inscription : juin 2005 Messages : 257 ![]() |
Bizarre ton ClassCastException!!!
Pour info c'est une RuntimeException et plus précisément un PersistenceException que l'implémentation JPA lance... Normalement la transaction ne doit pas être terminée donc tu devrais pouvoir retrouver la transaction en cours et faire un rollback... A tester avec l'EntityManager utilisé dans ta transaction: Code :
Philippe |
||
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : décembre 2003 Messages : 77 ![]() |
Ça à l'air pas mal en effet mais je fais comment pour récupérer l'entity manager dans mon entité?
Je suis dans un projet Java EE sous NetBeans et j'utilise l'annotation @PersistenceContext dans mes SessionBean. Mais dans l'entité je ne peux pas utiliser l'annotation @PersistenceContext. |
|
|
00
|
|
|
#4 | ||
|
Membre éprouvé
![]() ![]() Philippe BASTIANIArchitecte technique Inscription : juin 2005 Messages : 257 ![]() |
Via jndi lookup... Ou plus simplement avec un listener...
Code :
3.5 Entity Listeners and Callback Methods (JSR 317: JavaTM Persistence API, Version 2.0): The following rules apply to lifecycle callbacks: • Lifecycle callback methods may throw unchecked/runtime exceptions. A runtime exception thrown by a callback method that executes within a transaction causes that transaction to be marked for rollback. • Lifecycle callbacks can invoke JNDI, JDBC, JMS, and enterprise beans. • In general, the lifecycle method of a portable application should not invoke EntityManager or Query operations, access other entity instances, or modify relationships within the same persistence context.[43] A lifecycle callback method may modify the non-relationship state of the entity on which it is invoked. Je n'ai pas trouvé d'explication sur le problème de cast initial ! Mais tu noteras qu'il ne faut pas lancer de checked exceptions dans les callbacks ! Seules les RuntimeExceptions sont possibles... Dans tous les cas annuler une transaction ici n'est pas une bonne idée (les entités sont déjà en base)... tu devrais donc agir en amont ! |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com