浏览 5123 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-05-10
但是碰到以下问题: 1.jdbcTemplate 需要DataSource, 而我们在hibernate的DAO中已经配置了一个DataSource,如何增加一个DataSource呢? <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName"><value>com.sybase.jdbc2.jdbc.SybDriver</value></property> <property name="url"><value>jdbc:sybase:Tds:182.2.183.150:5000/rls?charset=eucgb</value></property> <property name="username"><value>sa</value></property> <property name="password"><value>111111</value></property> </bean> 2.事务处理 我们现在的事务处理如下: <bean id="txProxyTemplate" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"><ref bean="transactionManager"/></property> <property name="transactionAttributes"> <props> <prop key="save*">PROPAGATION_REQUIRED</prop> <prop key="update*">PROPAGATION_REQUIRED</prop> <prop key="remove*">PROPAGATION_REQUIRED</prop> <prop key="*">PROPAGATION_REQUIRED</prop> <!--<prop key="*">PROPAGATION_REQUIRED,readOnly</prop--> </props> </property> </bean> <!-- Generic manager that can be used to do basic CRUD operations on any objects --> <bean id="manager" parent="txProxyTemplate"> <property name="target"> <bean class="net.gbicc.loan.service.impl.BaseManager"> <property name="DAO"><ref bean="dao"/></property> </bean> </property> </bean> 如果在manager里面 加入一个 JDBCDAO(连接另外一个db) 还能利用txProxyTemplate来处理 事务么? denis 写道 但是jdbc daosupport和hibernate daosupport却能被wrap到同一个事务里。成立需要几点条件:
1、使用同一个datasource 2、事务交由hibernateTransactionManager管理 3、相关dao以及service需要使用runtime exception体系,使用spring提供的exception可以,自己封装设计的runtime exception体系也行。 根据denis这段话这两个dao不能捆绑在一个事务中,那要怎么来处理好呢? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-05-11
datasource已经加入了2个,直接加一个datasource就可以,难道这就是DI?
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName"><value>com.sybase.jdbc2.jdbc.SybDriver</value></property> <property name="url"><value>jdbc:sybase:Tds:182.2.183.150:5000/rls?charset=eucgb</value></property> <property name="username"><value>sa</value></property> <property name="password"><value>111111</value></property> </bean> <bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName"><value>com.sybase.jdbc2.jdbc.SybDriver</value></property> <property name="url"><value>jdbc:sybase:Tds:182.2.183.148:5000/rls?charset=eucgb</value></property> <property name="username"><value>sa</value></property> <property name="password"><value>111111</value></property> </bean> 现在的问题是,事务处理有问题,当jdbc这边的dao出现异常可以正常回滚,hibernate这边的dao出现异常就有问题了,jdbc的 dao那边还是成功进行了数据库操作,现在正在寻求解决方案,难道要放弃jdbcTemplate? |
|
返回顶楼 | |
发表时间:2005-05-12
bygoner 写道 datasource已经加入了2个,直接加一个datasource就可以,难道这就是DI?
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName"><value>com.sybase.jdbc2.jdbc.SybDriver</value></property> <property name="url"><value>jdbc:sybase:Tds:182.2.183.150:5000/rls?charset=eucgb</value></property> <property name="username"><value>sa</value></property> <property name="password"><value>111111</value></property> </bean> <bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName"><value>com.sybase.jdbc2.jdbc.SybDriver</value></property> <property name="url"><value>jdbc:sybase:Tds:182.2.183.148:5000/rls?charset=eucgb</value></property> <property name="username"><value>sa</value></property> <property name="password"><value>111111</value></property> </bean> 现在的问题是,事务处理有问题,当jdbc这边的dao出现异常可以正常回滚,hibernate这边的dao出现异常就有问题了,jdbc的 dao那边还是成功进行了数据库操作,现在正在寻求解决方案,难道要放弃jdbcTemplate? 再写一个txProxyTemplate2 |
|
返回顶楼 | |
发表时间:2005-05-12
pikachu 写道 再写一个txProxyTemplate2
老大,指点一下这个txProxyTemplate2怎么写才能把JDBCDAO和HibernateDAO放在同一个事务里面? 现在我们的做法是放弃了jdbcTemplate,然后在action那一层才能catch到spring 处理service后抛出的NestedRuntimeException,这时候才能connection.rollback(),所以jdbc的connection只能在action这层获得,这种做法真是不伦不类啊,ugly啊,ugly。 |
|
返回顶楼 | |
发表时间:2005-05-16
bygoner 写道 项目中必须同时操作两个数据库,都是sybase 11,旧数据库是N 年前设计的,有些表主键都很难找,结构现在不能改变,所以采用jdbc来处理;新数据库是我们自己设计结构,所以采用hibernate + spring来处理。spring对jdbc也有良好支持,所以想借用spring来简化 代码和处理 事务。
你应该使用JTA TransactionManager。在JTA事务方式下,session的生命周期小于事务的生命周期,所以编程方式和jdbc事务方式不同。幸运的是spring提供的SessionFactoryUtils类可以自动侦测到你使用的transactionManager是JTA的还是jdbc的,所以可以做到透明切换transactionManager而编程方式无须更改。 需要注意的是在你的服务器上建立的datasource需要支持tx,如果你的服务器不支持也可使用三方的,例如jotm。其他的没什么了,和你习惯的编程方式没什么两样。具体也可以到spring的论坛分版data Access上去查,相关帖子多的很。 |
|
返回顶楼 | |