pessoal
fiz um interceptor para controlar minhas transações com o banco de dados e analisando as atividades dela percebi que ela abre várias transações para executar um comando salvar
lista de açõesinterception
interception
inicia a transacao
comita transação
interception
interception
inicia a transacao
comita transação
interception
interception
inicia a transacao
Hibernate:
insert
into
Estado
(nome, uf)
values
(?, ?)
comita transação
interception
interception
inicia a transacao
comita transação
package smcv.infra;
import org.hibernate.Session;
import org.hibernate.Transaction;
import br.com.caelum.vraptor.Intercepts;
import br.com.caelum.vraptor.core.InterceptorStack;
import br.com.caelum.vraptor.interceptor.Interceptor;
import br.com.caelum.vraptor.resource.ResourceMethod;
@Intercepts
public class TransactionInterceptor implements Interceptor {
private final Session session;
public TransactionInterceptor(Session session) {
this.session = session;
}
public void intercept(InterceptorStack stack, ResourceMethod method,
Object instance) {
Transaction transaction = null;
try {
System.out.println("inicia a transacao");
transaction = session.beginTransaction();
stack.next(method, instance);
transaction.commit();
System.out.println("comita transação");
} finally {
if (transaction != null && transaction.isActive()) {
transaction.rollback();
System.out.println("cancela transação");
}
}
}
public boolean accepts(ResourceMethod method) {
System.out.println("interception");
return !method.containsAnnotation(HibernateTransaction.class);
}
}
gostaria de saber se isso é normal e porque acontece, alguém sabe explicar?
aproveitando apartir dessa classe interceptor, como eu poderia gravar logs de ações no banco de dados?
obrigado
t+