Ho un EJB @Stateless
con un'interfaccia @WebService
, utilizzando transazioni gestite dal contenitore, ovvero le transazioni vengono automaticamente eseguite dal contenitore dopo che un metodo è stato chiamato se non genera un'eccezione di sistema.Come posso rilevare le eccezioni dal commit delle transazioni gestite del contenitore?
Se provo a EntityManager.persist(...)
due oggetti con lo stesso valore per una colonna con un vincolo univoco su di esso, il contenitore invierà un PersistenceException
al client su commit al di fuori del mio codice. Come posso rilevare questa eccezione in modo da poter rilanciare la mia eccezione di applicazione?
Devo eseguire manualmente la transazione nei miei metodi per rilevare le eccezioni sul commit? (Ed è il EntityManager.flush()
il modo corretto per farlo?) Se è così, qual è il punto di avere transazioni gestite dal contenitore?
Grazie per la risposta. L'ho risolto facendo 'EntityManager.flush()' in un intercettore '@ AroundInvoke'. –
Potrebbe funzionare a volte, ma attenzione ai livelli di isolamento. A meno che non si serializzi tutto, è ancora possibile ottenere errori quando il tx commette. –