论坛首页 Java企业应用论坛

讨论多个service事务问题?

浏览 14168 次
精华帖 (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>
0 请登录后投票
   发表时间:2005-03-22  
你配置了多个transaction manager了么?
最好贴一下配置文件。
0 请登录后投票
   发表时间: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");

}
}
0 请登录后投票
   发表时间:2005-03-22  
hibernate无法支持nested transaction。目前只能在jdbc中使用nested transaction。
0 请登录后投票
   发表时间:2005-03-22  
我的问题看来没法解决了!
0 请登录后投票
   发表时间:2005-03-22  
非要使用嵌套事务么?
绝大多数应用都用不到嵌套事务,EJB也不支持的。我想你的要求也不会那么另类吧。

还是看看怎么用普通的扁平事务达到你的要求。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics