I'm running into problems upgrading from hibernate 3.6 to 4.0.1 (spring from 3 to 3.1).
I'm using hibernateinterceptors for injecting the session when calling some methods (e.g. a OnMessage call, Cron updater etc) and OpennSessionInView interceptor for the web requests. It has been working fine with hib 3.6 and spring 3.0, but as of hibernate4 I can't get it to work. The hibernateInterceptor is only available in the hibernate3 package and using that will not make it work
Any ideas what I should do ?
Removing the interceptor thing make me able to start things, but once I try calling the dao's from a request not from the web, I'm getting "No session bound exception".
Is there a better way to intercept the dao's then using the hibernate interceptor or should I use another technique? As said, I'm using the dao's from web requests (which are handled fine with the opensessioninview), JMS OnMessage, and SpringCron and in initialization code which is not working.
Here's the basic setup for the dao's
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/jms
http://www.springframework.org/schema/jms/spring-jms-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd">
<bean id="someDao" class="org.springframework.aop.framework.ProxyFactoryBean"
p:target-ref="someDaoTarget" p:proxyInterfaces="com.xxxx.MediaDataDao"
p:interceptorNames="hibernateInterceptor" />
<bean id="someDaoTarget" class="com.xxxx.SomeDaoImpl"
p:sessionFactory-ref="sessionFactory" />
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="hibernateInterceptor"
class="org.springframework.orm.hibernate3.HibernateInterceptor"
p:sessionFactory-ref="sessionFactory" />
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
destroy-method="destroy"
p:dataSource-ref="dataSource">
<property name="packagesToScan"
value="com.xxxx" />
<property name="hibernateProperties" ref="hibernateProperties" />
</bean>
<util:properties id="hibernateProperties">
<prop key="hibernate.hbm2dll.auto">update</prop>
<prop key="hibernate.connection.autocommit">false</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">false</prop>
<prop key="hibernate.jdbc.batch_size">500</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="javax.persistence.validation.mode">callback</prop>
</util:properties>
Exception thrown when using the hibernate interceptor is:
Caused by: java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session;
at org.springframework.orm.hibernate3.SessionFactoryUtils.doGetSession(SessionFactoryUtils.java:322)
at org.springframework.orm.hibernate3.SessionFactoryUtils.getSession(SessionFactoryUtils.java:233)
at org.springframework.orm.hibernate3.HibernateInterceptor.getSession(HibernateInterceptor.java:145)
at org.springframework.orm.hibernate3.HibernateInterceptor.invoke(HibernateInterceptor.java:90)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy37.getAll(Unknown Source)
Or many this is a bug, the classic.Session does it exist in hibernate 4 ?
The exception is thrown from within a constructor of a class which tries to access a dao. This was working perfectly well with hibernate 3.6 but after upgrade I can't get this to work.
If you are using hibernate 4.x on spring 3.1 or 4.x you you should use classes from package org.springframework.orm.hibernate4
instead of org.springframework.orm.hibernate3
HibernateInterceptor
has been deprecated earlier. You should be using org.springframework.orm.hibernate4.support.OpenSessionInterceptor
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With