views:

746

answers:

2

Is it possible to define a spring-managed EJB3 hibernate listener?

I have this definition in my persistence.xml:

<properties> 
    <property name="hibernate.ejb.interceptor"
        value="my.class.HibernateAuditInterceptor" /> 
    <property name="hibernate.ejb.event.post-update"
        value="my.class.HibernateAuditTrailEventListener" /> 
</properties>

But I would like to manage HibernateAuditInterceptor and HibernateAuditTrailEventListener with spring, so I can do some bean injection (ex: session-scoped bean) within these classes. Is this possible?

A: 

The problem is that those properties are just strings. Even if you define your SessionFactory as a Spring bean, any properties you pass to it through the hibernateProperties setter are just strings:

<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource"ref="myDataSource"/>
    <property name="mappingResources">
     <list>
      <value>whatever.hbm.xml</value>
     </list>
    </property>
    <property name="hibernateProperties">
     <value>
      hibernate.ejb.interceptor= my.class.HibernateAuditInterceptor
     </value>
     <value>
      hibernate.ejb.event.post-update=my.class.HibernateAuditTrailEventListener
     </value>
    </property>
</bean>

So I don't think you can do that.

Chochos
Hibernate's SessionFactory accepts a listener when opening sessions. I'm sure this can be done with spring managing both the session factory and the listener; my problem is with JPA.
Miguel Ping