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