I would stick with Spring for transaction handling, since there's a lot of
knowledge and tricks in the Spring transaction management and a lot you
could do wrong.

We have our own implementation of Spring @Transactional in Tapestry but
we're now switching to a hybrid version using the Spring
PlatformTransactionManager.

So i think it would be best to add a @Transactional + advise in Tapestry
delegating to Spring PlatformTransactionManager (still using Spring
connection and transaction handling).

The advise could look something like this:

public class TransactionalAdvise implements MethodAdvice
{
        private final PlatformTransactionManager manager;

        private final int propagation;

        public TransactionalAdvise(HibernateSessionManager manager, int
propagation)
        {
                super();
                this.manager = manager;
                this.propagation = propagation;
        }

        public void advise(Invocation invocation)
        {
                TransactionStatus transactionStatus = manager.getTransaction(new
DefaultTransactionDefinition(propagation));
        try
        {
            invocation.proceed();
        }
        catch (RuntimeException ex)
        {
            manager.rollback(transactionStatus);

            throw ex;
        }

        // For success or checked exception, commit the transaction.

        manager.commit(transactionStatus);
        }
}

See also
org.apache.tapestry5.internal.hibernate.HibernateTransactionAdvisorImpl in
tapestry-hibernate-core for applying an advise.

Chris
-- 
View this message in context: 
http://tapestry-users.832.n2.nabble.com/T5-2-Need-Advice-on-JDBC-and-Transaction-Mgmt-tp5825768p5826301.html
Sent from the Tapestry Users mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to