How to catch Entity Manager exceptions ?
slugounet Jun 24, 2007 2:12 PMHi !
I have a few entity beans with validation annotations, and I'd like to be able to catch the exceptions thrown by the hibernate validator when something goes wrong.
@Entity public class Country { @Id @GeneratedValue( strategy=GenerationType.AUTO ) private Integer id; @NotNull @Length(min = 1, max = 255) private String name; }
@Stateless @Remote(Update.class) public class UpdateSessionBean implements Serializable, Update { public CountryDataBean updateCountry( CountryDataBean bean ) throws UpdateException { Country entity = this.entityManager.find( Country.class, bean.getId() ); if ( entity == null ) { throw new UpdateException( "Country not found" ); } CountryMapper mapper = new CountryMapper(); mapper.toEntity( bean, entity ); try { entity = this.entityManager.merge( entity ); } catch( InvalidStateException e ) { ... do some stuff } mapper.toDataBean( entity, bean ); return bean; } }
When I force an error, I get that kind of error message :
19:49:43,158 WARN [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator_2] TwoPhaseCoordinator.beforeCompletion - failed for com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple@7cd469 javax.persistence.PersistenceException: org.hibernate.validator.InvalidStateException: validation failed for: prixmac.indexation.database.Country at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletion(AbstractEntityManagerImpl.java:527) at com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.beforeCompletion(SynchronizationImple.java:114) at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.beforeCompletion(TwoPhaseCoordinator.java:249) at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:88) at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:177) at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1256) at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:135) at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:87) at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:175) at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:87) ...
Does anyone have an idea of how I could catch those damned exceptions in my session bean ? Cause it's pretty pointless for me to validate the data if I can't find a way to know that something went wrong :(
I'm using JBoss 4.2.0 !
Best regards,
Guillaume