使用spring模板查询引起的一系列插曲

来源:互联网 发布:app调试软件 编辑:程序博客网 时间:2024/06/08 15:32

struts1.2+hibernate3.1+spring2.0

 

导入顺序为struts->spring->hibernate(原因是spring与hibernate中的有些包冲突,要用hibernate的覆盖spring中的)

 

在写DAO的时候我用了getHibernateTemplate().find("......")

 

后来才发现这个查询的session随着此方法的结束已经被关闭了,所以预先抓取出来的读不出来

 

在CSDN上发了个贴子,说要加个事物代理

 

在web.xml中配置如下

  1. <filter-name>hibernateFilter</filter-name>
  2.     <filter-class>
  3.         org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
  4.     </filter-class>
  5. </filter> 
  6. <filter-mapping>
  7.     <filter-name>hibernateFilter</filter-name>
  8.     <url-pattern>/*</url-pattern>
  9. </filter-mapping> 

然后又出了异常,又搜索一下,还要在applicationContext.xml中配置

  1. <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
  2.         <property name="sessionFactory" ref="sessionFactory" /> 
  3.     </bean>
  4.     <bean id="baseTransaction" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">    
  5.         <property name="transactionManager" ref="transactionManager"/>         
  6.         <property name="proxyTargetClass" value="true"/>    
  7.         <property name="transactionAttributes">             
  8.           <props>                                
  9.             <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>   
  10.             <prop key="delete*">PROPAGATION_REQUIRED</prop>   
  11.             <prop key="save*">PROPAGATION_REQUIRED</prop>    
  12.             <!-- <prop key="*">PROPAGATION_REQUIRED</prop> -->
  13.           </props>         
  14.         </property>    
  15.     </bean>
  16. ...
  17. <bean id="rolesService" parent="baseTransaction"
  18.         abstract="false" lazy-init="default" autowire="default"
  19.         dependency-check="default">
  20.         <property name="target">
  21.            <bean class="com.sg.service.impl.RolesService">
  22.                <property name="dao">                
  23.                    <ref local="rolesDAO"/>            
  24.                </property>
  25.            </bean>
  26.         </property>
  27.     </bean>
  28. ...

 

运行又抛出什么没找到proxyTargetClass这个属性

 

然后追根求源,在包里找,结果还真没找到

 

这个属性是TransactionProxyFactoryBeanProxyConfig类中二次继承来的,所以真要认真找啊

 

这里用到两包 spring-core.jar  ,  spring-dao.jar

 

后来发现spring-dao.jar有问题,就在网上下了一个

 

这下终于不出现这个异常了,但又说找不到 SmartClassLoader

 

郁闷...

 

按路径找到 spring-core.jar  竟然真没这个接口

 

上网下了一个 spring2.5的这个包,有这个接口,原来2.0的是没有的......

 

后来又找到一些相冲突的包删除

 

总算把OpenSessionInViewFilter这个东西配置好了

 

这次对这个项目里的包增来删去,不知道还有什么问题在等着偶

 

但这样确有助于对包做进一步的了解

 

值,呵呵

.....

 

小结:多看tomcat的log是王道

 

原创粉丝点击