O Hibernate tem Interceptadores e Eventos que facilitam a implementação de mecanismos de log. Para integrar com o Spring precisamos realizar os seguintes passos:
Primeiro vamos criar o Interceptador:
public class HibernateInterceptor extends EmptyInterceptor {
// Posso ter algum usuario e suas preferencias
private Usuario usuario;
// Posso ter a sessao para realizar alguma operacao
private SessionFactory sessionFactory;
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public void onDelete(Object entity,
Serializable id,
Object[] state,
String[] propertyNames,
Type[] types) {
registrarLog();
}
public boolean onSave(Object entity,
Serializable id,
Object[] state,
String[] propertyNames,
Type[] types) {
registrarLog();
return false;
}
private void registrarLog() {
System.out.println("Registrando LOG.");
}
}
E em seguida configuramos o interceptador no application-context.xml
<!-- Bean para armazenar os dados do usuario logado -->
<bean id="usuario" class="Usuario" scope="session" method="init">
<aop:scoped-proxy>
</aop:scoped-proxy>
<!-- Interceptor do Hibernate -->
<bean id="hibernateInterceptor" class="HibernateInterceptor">
<property name="sessionFactory" ref="sessionFactory">
<property name="usuario" ref="usuario">
</property>
<!-- Configuracao do TransactionManager-->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory">
<property name="entityInterceptor" ref="hibernateInterceptor">
</property>
Note que o interceptador criado não será declarado no hibernate.cfg.xml, somente injetado no TransactionManager pela propriedade
"entityInterceptor".
2 comentários:
Onde exite application-context.xml está faltando "<" e ">" para finalizar as linhas de xml. Acho que o blog enguliu as coisinhas...
Pois é, bem feito!
Só comentando que essa solução do interceptador é muito útil para a gravação de logs de alteração nas mais diversas soluções. Esse foi o objetivo dessa implementação detalhada pelo Tiago.
Isso possibilitou a integração de um sistema das antigas com um Spring.
Postar um comentário