Struts2+Hibernate4+Spring3集成中的一些问题汇总

1.     Cannotunwrap to requested type [javax.sql.DataSource]

关 于这个错误原因是spring3不再有hibernateDaoSupport和hibernateTemplate。只能显示的声明 sessionFactory,并设置get/set方法。而出现这个错误的原因是吧datasource配置到hibernate.cfg.xml中, 这时候就报这个错误,解决方法就是配置到applicationContext中。


2.     org.aopalliance.intercept.MethodInterceptor

这个错误是缺少aopalliance.jar,这个包主要是AOP联盟的API包,里面包括针对面向切面的接口,通常spring等其它具备动态织入功能的框架的依赖包。


 3.     java.lang.NoClassDefFoundError:org/aspectj/weaver/BCException

这个错误的问题主要是出现在spring管理事务,解决方法是在classpath下缺少了aspectjweaver.jar的缘故。这个包主要的作用是用于Aspectj的语法解析处理器。

 

另外转载一些集成中出现的问题:


1.   Spring3.1去掉了HibernateDaoSupport类。hibernate4需要通过getCurrentSession()获取session。并且设置

<prop key="hibernate.current_session_context_class"& gt;org.springframework.orm.hibernate4.SpringSessionContext</prop> (在 hibernate3的时候是thread和jta)


2.   缓存设置改为<prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</prop>

<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>


3.   Spring对hibernate的事务管理,不论是注解方式还是配置文件方式统一改为

<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager" >

<property name="sessionFactory"><ref bean="sessionFactory"/></property> </bean>


4.   getCurrentSession()事务会自动关闭,所以在有所jsp页面查询数据都会关闭session。要想在jsp查询数据库需要加入:

org.springframework.orm.hibernate4.support.OpenSessionInViewFilter过滤器。


5.   Hibernate分页出现 ResultSet may only be accessed in a forward direction 需要设置hibernate结果集滚动

<prop key="jdbc.use_scrollable_resultset">false</prop>

 

6.   java.lang.NoClassDefFoundError: org/hibernate/cache/CacheProvider   

原因:spring的sessionfactory和transactionmanager与支持hibernate3时不同。

解决:


 
  1. <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">  
  2. <property name="dataSource" ref="dataSource"/>  
  3.  ...  
  4. </bean>  
  5. <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">  
 
  1. <property name="sessionFactory" ref="sessionFactory"/>  
  2. </bean>  


7:java.lang.NoSuchMethodError:org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session

原因:hibernate4之后,spring31把HibernateDaoSupport去除,包括数据访问都不需要hibernatetemplate,这意味着dao需要改写,直接使用hibernate的session和query接口。

解决:为了改写dao,足足花了一天时间,然后一个个接口进行单元测试,这是蛋疼的一个主要原因。

 

8:nested exception is org.hibernate.HibernateException: No Session found for current thread

原因:发现一些bean无法获得当前session,需要把之前一些方法的事务从NOT_SUPPORT提升到required,readonly=true

解决:

 
1
2
3
4
5
6
7
8
9
10
11
< tx:advice id = "baseServiceAdvice" transaction-manager = "transactionManager"
< tx:attributes
< tx:method name = "get*" read-only = "true" propagation = "REQUIRED" /> <!--之前是NOT_SUPPORT--> 
< tx:method name = "find*" read-only = "true" propagation = "REQUIRED" /> <!--之前是NOT_SUPPORT--> 
< tx:method name = "save*" propagation = "REQUIRED" /> 
< tx:method name = "update*" propagation = "REQUIRED" /> 
< tx:method name = "remove*" propagation = "REQUIRED" /> 
< tx:method name = "add*" propagation = "REQUIRED" /> 
< tx:method name = "*" /> 
   </ tx:attributes
</ tx:advice >

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值