- All Implemented Interfaces:
- net.sourceforge.stripes.controller.Interceptor
@Intercepts(value={ActionBeanResolution,EventHandling,RequestComplete})
public class JpaTransactionInterceptor
extends Object
implements net.sourceforge.stripes.controller.Interceptor
Interceptor die een transactie start:
Indien de ActionBean een Transactional annotatie heeft, na de ActionBeanResolution
lifecycle state.
De transactie wordt gecommit:
Indien de geproduceerde Resolution een attribuut JpaTransactionInterceptor.OPEN_SESSION_IN_VIEW
heeft met de waarde Boolean.TRUE, na de RequestComplete state.
Zo niet wordt de transactie direct gecommit na de EventHandling state.
Let op! Bij open session in view is het niet meer mogelijk om fouten van
commit() te tonen omdat de resolution al is uitgevoerd. Het is daarom goed om
schrijfacties in ieder geval te flushen of te committen voordat de view wordt
uitgevoerd. Na een commit kan dan weer een nieuwe transactie worden gestart
voor de view.
Indien tijdens het proceed()'en van een state een exception optreedt en er
een exception wordt gethrow()'d, wordt een eventuele gestartte transactie
gerollback()'d en de exception gerethrowed.
Met een parameter van de Transactional annotatie kan worden aangegeven voor
welke persistence unit de transactie moet worden gestart. Is deze parameter
null dan wordt de default persistence unit (configureerd bij JpaUtilServlet)
gebruikt.
Let op! Gebruik van de useActionBean tag in view op een bean die een @Transactional
annotatie heeft zorgt ervoor dat een eventuele open-session-in-view gesloten
wordt na de tag! Bij een closed-session-in-view wordt voor de bean een nieuwe
transactie gestart en gecommit.