浏览 2369 次
|
锁定老贴子 主题:Spring在webapp中的声明事务
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2006-06-28
struts+spring+hibernate+oracle9i,部署在tomcat中。
DataSource使用了dbcp得simple datasource,在spring中配置注射。 使用了spring的declarative transaction demarcation 在business service 的方法上。 transaction attributes使用了PROPAGATION_REQUIRED. 在实际得整合测试中,同样的请求几次之后,就会出现无法打开hibernate session,因为pool中jdbc connection都在占用,这些信息是在打开spring logging看到的。 从log得信息来分析,是每次request过来,spring都没有最终release jdbc connection to pool. 只是做了commit. 可如果把transaction attributes换成PROPAGATION_NOT_SUPPORTED,就不会出现这样的状况。每次都从LOG中看到RETURN THE CONNECTION. 试过其它的propagation,都不work.只有not supported可以的。 这是为什么呢?有人遇到过么? 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2006-06-30
花了些时间研究,可是还没有头绪,不清楚为什么最后事务提交的时候没有归还这个connection...
|
|
| 返回顶楼 | |
|
最后更新时间:2006-06-30
贴一下目前的部分config . 现在用的是Not_Supported.
[code:1]<!--Data Source --> <bean id="userDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="oracle.jdbc.OracleDriver" /> <property name="url" value="XX" /> <property name="XX" value="XX" /> <property name="XX" value="XX" /> <property name="initialSize" value="10" /> <property name="maxActive" value="15" /> </bean> <bean id="trackingDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="oracle.jdbc.OracleDriver" /> <property name="url" value="XXX" /> <property name="username" value="XX" /> <property name="password" value="XX" /> <property name="initialSize" value="10" /> <property name="maxActive" value="15" /> </bean> <!-- JNDI DataSource for J2EE environments --> <!-- <bean id="userDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:comp/env/jdbc/devuser"/> </bean> --> <!-- Session Factory --> <bean id="userSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="userDataSource" /> <property name="mappingResources"> <list> <value>FavoriteCategory.hbm.xml</value> <value>PasswordReminder.hbm.xml</value> <value>User.hbm.xml</value> <value>UserFavorites.hbm.xml</value> <value>UserInfo.hbm.xml</value> <value>UserPicture.hbm.xml</value> <value>UserPwdReminder.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.Oracle9Dialect </prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.generate_statistics">true</prop> </props> </property> </bean> <bean id="userDAO" class="persistence.dao.hibernate.UserDAOImpl"> <property name="sessionFactory" ref="userSessionFactory" /> </bean> [/code:1] [code:1] <bean id="userTransactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager" ref="userTransactionManager" /> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_NOT_SUPPORTED</prop> <prop key="find*">PROPAGATION_NOT_SUPPORTED,readOnly</prop> </props> </property> </bean> <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames"> <value>*Service</value> </property> <property name="interceptorNames"> <list> <value>userTransactionInterceptor</value> </list> </property> </bean> <bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor"> <property name="transactionInterceptor" ref="userTransactionInterceptor" /> </bean> <bean id="userService" class="service.impl.RegistrationServiceImpl" autowire="byName"> <property name="userDAO" ref="userDAO" /> </bean>[/code:1] [code:1][/code:1] |
|
| 返回顶楼 | |
|
最后更新时间:2006-07-02
猜测可能是spring和hibernate版本间的问题, 准备试试看低版本的hibernate,比如3.0或者spring 1.2.4.或者使用cp30的datasource来试试看.
从log看,session的确是close了,只是session close之后的jdbc connection没有release出来给datasource |
|
| 返回顶楼 | |
|
最后更新时间:2006-07-10
的确是版本的问题,把hibernate 3.1rc2换成3.1.3问题消失...
|
|
| 返回顶楼 | |
|
最后更新时间:2006-07-11
声明事务与使用模版的编程事务效率相差不大!前者性能低下!灵活性低!
|
|
| 返回顶楼 | |
|
最后更新时间:2006-07-11
说实话,这种第三方开源的东西会给开发工作带来方便,但是有时候确实会带来很“恶心”的兼容性问题,前一段时间我在tomcat下使用dom4j就遇到过这种情况,最后,偶不得不放弃dom4j,自己手工写,唉。
|
|
| 返回顶楼 | |






