struts1.2+hibernate3.1+spring2.0
导入顺序为struts->spring->hibernate(原因是spring与hibernate中的有些包冲突,要用hibernate的覆盖spring中的)
在写DAO的时候我用了getHibernateTemplate().find("......")
后来才发现这个查询的session随着此方法的结束已经被关闭了,所以预先抓取出来的读不出来
在CSDN上发了个贴子,说要加个事物代理
在web.xml中配置如下
- <filter-name>hibernateFilter</filter-name>
- <filter-class>
- org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
- </filter-class>
- </filter>
- <filter-mapping>
- <filter-name>hibernateFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
然后又出了异常,又搜索一下,还要在applicationContext.xml中配置
- <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
- <property name="sessionFactory" ref="sessionFactory" />
- </bean>
- <bean id="baseTransaction" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
- <property name="transactionManager" ref="transactionManager"/>
- <property name="proxyTargetClass" value="true"/>
- <property name="transactionAttributes">
- <props>
- <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
- <prop key="delete*">PROPAGATION_REQUIRED</prop>
- <prop key="save*">PROPAGATION_REQUIRED</prop>
- <!-- <prop key="*">PROPAGATION_REQUIRED</prop> -->
- </props>
- </property>
- </bean>
- ...
- <bean id="rolesService" parent="baseTransaction"
- abstract="false" lazy-init="default" autowire="default"
- dependency-check="default">
- <property name="target">
- <bean class="com.sg.service.impl.RolesService">
- <property name="dao">
- <ref local="rolesDAO"/>
- </property>
- </bean>
- </property>
- </bean>
- ...
运行又抛出什么没找到proxyTargetClass这个属性
然后追根求源,在包里找,结果还真没找到
这个属性是TransactionProxyFactoryBean从ProxyConfig类中二次继承来的,所以真要认真找啊
这里用到两包 spring-core.jar , spring-dao.jar
后来发现spring-dao.jar有问题,就在网上下了一个
这下终于不出现这个异常了,但又说找不到 SmartClassLoader
郁闷...
按路径找到 spring-core.jar 竟然真没这个接口
上网下了一个 spring2.5的这个包,有这个接口,原来2.0的是没有的......
后来又找到一些相冲突的包删除
总算把OpenSessionInViewFilter这个东西配置好了
这次对这个项目里的包增来删去,不知道还有什么问题在等着偶
但这样确有助于对包做进一步的了解
值,呵呵
.....
小结:多看tomcat的log是王道