锁定老帖子 主题:讨论多个service事务问题?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-03-22
配置文件如下:
在PubTodayAlarmService中调用PubTodayAlarmService2 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <!-- ========================= Start of PERSISTENCE DEFINITIONS ========================= --> <!-- Choose the dialect that matches your "dataSource" definition --> <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"> <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value> </property> <property name="url"> <value>jdbc:microsoft:sqlserver://127.0.0.1:1433;SelectMethod=Cursor</value> </property> <property name="username"> <value>costmanager</value> </property> <property name="password"> <value>costmanager</value> </property> </bean> <bean id="mySessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"> <property name="mappingResources"> <list> <value>org/haiter/persistent/cost/PubTodayAlarm.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">net.sf.hibernate.dialect.SQLServerDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.cglib.use_reflection_optimizer">true</prop> </props> </property> <property name="dataSource"><ref bean="myDataSource"/></property> </bean> <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) --> <bean id="myTransactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager"> <property name="sessionFactory"><ref local="mySessionFactory"/></property> </bean> <!-- 方法二配置--> <bean id="baseTxProxy" abstract="true" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"><ref local="myTransactionManager"/></property> <property name="transactionAttributes"> <props> <prop key="find*">PROPAGATION_REQUIRED,readOnly,-PubTodayAlarmService</prop> <prop key="save*">PROPAGATION_REQUIRED,-PubTodayAlarmService</prop> </props> </property> </bean> <bean id="baseTxProxy2" abstract="true" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"><ref local="myTransactionManager"/></property> <property name="transactionAttributes"> <props> <prop key="find*">PROPAGATION_NESTED,readOnly,-PubTodayAlarmService</prop> <prop key="save*">PROPAGATION_NESTED,-PubTodayAlarmService</prop> </props> </property> </bean> <bean id="PubTodayAlarmService" parent="baseTxProxy" > <property name="target"> <bean class="com.haiter.testspring.service.spring.PubTodayAlarmSpringService"> <property name="pubTodayAlarmDao"> <ref local="pubTodayAlarmDao" /> </property> </bean> </property> </bean> <bean id="PubTodayAlarmService2" parent="baseTxProxy2" > <property name="target"> <bean class="com.haiter.testspring.service.spring.PubTodayAlarmSpringService2"> <property name="pubTodayAlarmDao"> <ref local="pubTodayAlarmDao" /> </property> </bean> </property> </bean> <!-- DAO object: Hibernate implementation --> <bean id="pubTodayAlarmDao" class="com.haiter.testspring.dao.hibernate.PubTodayAlarmHibernateDao"> <property name="sessionFactory"><ref local="mySessionFactory"/></property> </bean> </beans> |
|
返回顶楼 | |
发表时间:2005-03-22
你配置了多个transaction manager了么?
最好贴一下配置文件。 |
|
返回顶楼 | |
发表时间:2005-03-22
PubTodayAlarmSpringService:
public class PubTodayAlarmSpringService implements IPubTodayAlarmService{ private IPubTodayAlarmDao pubTodayAlarmDao; public PubTodayAlarmSpringService() { super(); } public PubTodayAlarm saveNewPubTodayAlarm(PubTodayAlarm pubTodayAlarm) throws PubTodayAlarmException { PubTodayAlarm savedOrder = null; try { savedOrder =this.getPubTodayAlarmDao().savePubTodayAlarm(pubTodayAlarm); } catch (RuntimeException e) { throw new PubTodayAlarmException(); } ApplicationContext ctx=MyApplicationContext.getApplicationContext(); // ApplicationContext ctx=new // FileSystemXmlApplicationContext("/applicationContext-hibernate.xml"); IPubTodayAlarmService action = (IPubTodayAlarmService) ctx.getBean("PubTodayAlarmService2"); PubTodayAlarm pubTodayAlarm1 = new PubTodayAlarm(); pubTodayAlarm1.setAlarmDate(new Date()); pubTodayAlarm1.setAlarmDesc("adfsffadsfdfd"); pubTodayAlarm1.setAlarmTopic("topic2"); pubTodayAlarm1.setAlarmType("PUB001009"); action.saveNewPubTodayAlarm(pubTodayAlarm1); return savedOrder; } public PubTodayAlarm saveNewPubTodayAlarm(PubTodayAlarm pubTodayAlarm,PubTodayAlarm pubTodayAlarm1,PubTodayAlarm pubTodayAlarm2) throws PubTodayAlarmException { // do some business logic if (pubTodayAlarm != null ) { } PubTodayAlarm savedOrder = null; try { savedOrder =this.getPubTodayAlarmDao().savePubTodayAlarm(pubTodayAlarm); this.getPubTodayAlarmDao().savePubTodayAlarm(pubTodayAlarm1); this.getPubTodayAlarmDao().savePubTodayAlarm(pubTodayAlarm2); } catch (RuntimeException e) { throw new PubTodayAlarmException(); } return savedOrder; } struts ----Action代码如下 public class SaveOrderAction extends BaseAction { /** * Default constructor */ public SaveOrderAction() { super(); } public ActionForward execute( ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws java.lang.Exception { PubTodayAlarm pubTodayAlarm = new PubTodayAlarm(); pubTodayAlarm.setAlarmDate(new Date()); pubTodayAlarm.setAlarmDesc("adfsffadsfdfd"); pubTodayAlarm.setAlarmTopic("topic"); pubTodayAlarm.setAlarmType("PUB001009"); ApplicationContext wac=MyApplicationContext.getApplicationContext(); IPubTodayAlarmService orderService = (IPubTodayAlarmService) wac.getBean("PubTodayAlarmService"); orderService.saveNewPubTodayAlarm(pubTodayAlarm); return mapping.findForward("success"); } } |
|
返回顶楼 | |
发表时间:2005-03-22
hibernate无法支持nested transaction。目前只能在jdbc中使用nested transaction。
|
|
返回顶楼 | |
发表时间:2005-03-22
我的问题看来没法解决了!
|
|
返回顶楼 | |
发表时间:2005-03-22
非要使用嵌套事务么?
绝大多数应用都用不到嵌套事务,EJB也不支持的。我想你的要求也不会那么另类吧。 还是看看怎么用普通的扁平事务达到你的要求。 |
|
返回顶楼 | |