10 de out. de 2007

Injetando Interceptador do Hibernate no Spring

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:

Anônimo disse...

Onde exite application-context.xml está faltando "<" e ">" para finalizar as linhas de xml. Acho que o blog enguliu as coisinhas...

Anônimo disse...

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.

Google