配置文件如下:<?xml version="1.0" encoding="UTF-8"?><!--
  - Application context definition for JPetStore's business layer.
  - Contains bean references to the transaction manager and to the DAOs in
  - dataAccessContext-local/jta.xml (see web.xml's "contextConfigLocation").
  -->
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 
   配置数据源
   注意: 用org.apache.commons.dbcp.BasicDataSource, 要引入 apache commons 
   的commons-collections-3.1.jar, commons-dbcp-1.2.1.jar, commons-pool-1.2.jar三个包
 
 <bean id="dataSourceInfo" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName">
   <value>net.sourceforge.jtds.jdbc.Driver</value>
  </property>
  <property name="url">
   <value>jdbc:jtds:sqlserver://91.20.19.22:1433;DatabaseName=digger</value>
  </property>
  <property name="username">
   <value>sa</value>
  </property>
  <property name="password">
   <value>tax</value>
  </property>
 </bean>
 -->
 <!--配置事务管理-->
 <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"> 
        <property name="userTransaction"><ref local="jotm"/></property> 
 </bean>
 
 <!--使用jotm配置数据库连接-->
 <bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean"/>
 
 <bean id="innerDataSourceInfo" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"> 
        <property name="transactionManager"><ref local="jotm"/></property> 
        <property name="driverName"><value>net.sourceforge.jtds.jdbc.Driver</value></property> 
        <property name="url"><value>jdbc:jtds:sqlserver://localhost:1433;DatabaseName=digger</value></property>         
<property name="minCon"><value>1</value></property> 
        <property name="maxCon"><value>2</value></property> 
 </bean> 
 <bean id="dataSourceInfo" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"> 
        <property name="dataSource"><ref local="innerDataSourceInfo"/></property>        
<property name="transactionManager"><ref local="jotm"/></property>
<property name="user"><value>sa</value></property> 
        <property name="password"><value>1</value></property> 
        
 </bean>

 <bean id="innerDataSourceBridge" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"> 
        <property name="transactionManager"><ref local="jotm"/></property> 
        <property name="driverName"><value>net.sourceforge.jtds.jdbc.Driver</value></property> 
        <property name="url"><value>jdbc:jtds:sqlserver://localhost:1433;DatabaseName=cdgsbridge</value></property>         
<property name="minCon"><value>1</value></property> 
        <property name="maxCon"><value>2</value></property> 
 </bean> 
 <bean id="dataSourceBridge" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"> 
        <property name="dataSource"><ref local="innerDataSourceBridge"/></property>
<property name="transactionManager"><ref local="jotm"/></property>        
<property name="user"><value>sa</value></property> 
        <property name="password"><value>1</value></property>
        
 </bean> <!-- 配置sessionFactory, 注意这里引入的包的不同-->  
 <bean id="sessionFactoryInfo"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource">
   <ref local="dataSourceInfo" />
  </property>
  <property name="mappingResources">
   <list>
      <value>gov/cd12366/bridge/domain/Login.hbm.xml</value>
    </list>
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">
     org.hibernate.dialect.SQLServerDialect
    </prop>
    <prop key="hibernate.show_sql">true</prop>
   </props>
  </property>
 </bean>
 
 <bean id="sessionFactoryBridge"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource">
   <ref local="dataSourceBridge" />
  </property>
  <property name="mappingResources">
   <list>
      <value>gov/cd12366/bridge/domain/Login.hbm.xml</value>
    </list>
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">
     org.hibernate.dialect.SQLServerDialect
    </prop>
    <prop key="hibernate.show_sql">true</prop>
   </props>
  </property>
 </bean>   <bean id="LoginDAOInfo" class="gov.cd12366.bridge.persistence.dao.LoginDAO">
  <property name="sessionFactory">
   <ref local="sessionFactoryInfo" />
  </property>
 </bean>
 <bean id="LoginDAOBridge" class="gov.cd12366.bridge.persistence.dao.LoginDAO">
  <property name="sessionFactory">
   <ref local="sessionFactoryBridge" />
  </property>
 </bean>
 
 <bean id="CopyDataServer" class="gov.cd12366.bridge.server.CopyDataServer">
    <!--<property name="LoginDAOInfo" ref="LoginDAOInfo"/>
    <property name="LoginDAOBridge" ref="LoginDAOBridge"/>-->
 </bean>
  
 <!-- 配置事务代理,对方法进行不同的事务配置 -->
 <bean id="CopyDataServerProxy" 
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  <property name="transactionManager">
   <ref bean="transactionManager" />
  </property>
  <property name="target">
   <ref local="CopyDataServer" />
  </property>
  <property name="transactionAttributes">
  <props>
   <prop key="copyAndUpdate">PROPAGATION_REQUIRES_NEW</prop>   
  </props>
  </property>
</bean></beans>

解决方案 »

  1.   

    copyAndUpdate这个方法存在么?是怎么写的?有日志么?
      

  2.   

    存在啊,代码如下:
    CopyDataServer.java
    -----------------
    /*
     * Created on Feb 16, 2006
     *
     * TODO To change the template for this generated file go to
     * Window - Preferences - Java - Code Style - Code Templates
     */
    package gov.cd12366.bridge.server;
    import java.util.List;import gov.cd12366.bridge.domain.Login;
    import gov.cd12366.bridge.persistence.iface.ILoginDAO;
    import gov.cd12366.bridge.spring.CustomBeanFactory;import org.apache.log4j.Logger;
    /**
     * @author wafer
     *
     * TODO To change the template for this generated type comment go to
     * Window - Preferences - Java - Code Style - Code Templates
     */
    public class CopyDataServer {
    static Logger logger = Logger.getLogger ( CopyDataServer.class.getName ());
    //private ILoginDAO srcData;
    //private ILoginDAO desData;
    public CopyDataServer(){
    //this.srcData = (ILoginDAO)CustomBeanFactory.getBean("LoginDAOInfo");
    //this.desData = (ILoginDAO)CustomBeanFactory.getBean("LoginDAOBridge");
    }


    public void copyAndUpdate(int index) {
    try{
     ILoginDAO srcData = (ILoginDAO)CustomBeanFactory.getBean("LoginDAOInfo");
     ILoginDAO desData = (ILoginDAO)CustomBeanFactory.getBean("LoginDAOBridge");
     List list= srcData.getLogins();
     Login login = (Login)list.get(index);
     desData.saveLogin(login);
     if(index==1){
      login.setUsername("wafer4");
         }
     login.setPassword("kk");
     srcData.updateLogin(login);
     logger.info(login.getUsername() + "   " + login.getPassword());
    }catch(Exception e){
    logger.error("error when copyAndUpdate!"+e.getMessage());
    }
    }

    public void copy(){
    ILoginDAO srcData = (ILoginDAO)CustomBeanFactory.getBean("LoginDAOInfo");
    List list= srcData.getLogins();
      for (int i=0;i<list.size();i++)
    {
    copyAndUpdate(i); 
    }
    }
    public static void main(String[] args) {
    }
    }调用代码如下:
    /*
     * Created on 2005-4-26
     *
     * TODO To change the template for this generated file go to
     * Window - Preferences - Java - Code Style - Code Templates
     */import java.util.List;import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import org.hibernate.Query;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    import gov.cd12366.bridge.domain.*;
    import java.io.InputStream;
    import java.io.FileInputStream;import javax.sql.DataSource;import org.springframework.beans.factory.support.ManagedProperties;
    import org.springframework.beans.factory.xml.XmlBeanFactory;
    import gov.cd12366.bridge.persistence.dao.*;
    import gov.cd12366.bridge.persistence.iface.*;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.core.io.InputStreamResource;
    import org.springframework.core.io.Resource;import gov.cd12366.bridge.spring.CustomBeanFactory;
    import org.springframework.beans.factory.xml.XmlBeanFactory;
    import org.apache.log4j.*;
    import gov.cd12366.bridge.server.CopyDataServer;
    import javax.sql.DataSource;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import java.sql.*;
    import java.util.*;
    /**
     * @author Administrator
     *
     * TODO To change the template for this generated type comment go to
     * Window - Preferences - Java - Code Style - Code Templates
     */
    public class Test  {
    static Logger logger = Logger.getLogger ( Test.class.getName () ) ;
    public static void main(String[] args)
    {
      
      
      CopyDataServer copyDataServer = (CopyDataServer)CustomBeanFactory.getBean("CopyDataServerProxy");
        copyDataServer.copyAndUpdate(0);
        copyDataServer.copyAndUpdate(1);
        logger.info("hello wafer!");
        copyDataServer.copyAndUpdate(2);
        logger.info("hello wafer!");

       }
    }
      

  3.   

    表1,表2结构如下:
    login(username,password);
    表1中有3条数据 
    wafer1,kk
    wafer2,kk
    wafer3,kk我的目的是将表1数据复制到表2后,再更新表1的password字段,其中我在复制第2条数据时人为制造了错误(要求update一个不存在的记录-wafer4),因此产生异常,程序在抛出异常后就一直停在那里,不终止也不继续运行----表现为无法复制第3条数据且我故意输出的字符串"hello wafer!"在日志中找不到.异常日志如下:Hibernate: select login0_.username as username, login0_.password as password0_ from login login0_
    15:29:50,687  INFO [main] CopyDataServer:45 - wafer1       kk
    15:29:50,687  INFO [main] CopyDataServer:45 - wafer1       kk
    Hibernate: update login set password=? where username=?
    Hibernate: insert into login (password, username) values (?, ?)
    Hibernate: update login set password=? where username=?
    Hibernate: select login0_.username as username, login0_.password as password0_ from login login0_
    15:29:51,406  INFO [main] CopyDataServer:45 - wafer4   kk
    15:29:51,406  INFO [main] CopyDataServer:45 - wafer4   kk
    Exception in thread "main" org.springframework.orm.hibernate3.HibernateSystemException: identifier of an instance of gov.cd12366.bridge.domain.Login altered from wafer2     to wafer4; nested exception is org.hibernate.HibernateException: identifier of an instance of gov.cd12366.bridge.domain.Login altered from wafer2     to wafer4
    org.hibernate.HibernateException: identifier of an instance of gov.cd12366.bridge.domain.Login altered from wafer2     to wafer4
    at org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:51)
    at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:82)
    at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:190)
    at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:70)
    at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
    at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:730)
    at org.springframework.orm.hibernate3.SpringSessionSynchronization.beforeCommit(SpringSessionSynchronization.java:129)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit(AbstractPlatformTransactionManager.java:661)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:486)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:473)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.doCommitTransactionAfterReturning(TransactionAspectSupport.java:262)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
    at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:643)
    at gov.cd12366.bridge.server.CopyDataServer$$EnhancerByCGLIB$$a5e4d5c4.copyAndUpdate(<generated>)
    at Test.main(Test.java:88)
      

  4.   

    条件限制,用1个mysqlServer 的位于2个schema的2个表测试了一下.无论是正常写入和故意制造异常(如表字段错误),都是成功的.唯一奇怪的是,我用application的方式运行时,在所有代码执行结束后(),程序会停住,但在web环境下运行是没有问题的.我怀疑是jotm有些监视线程在运行的缘故,网上查找资料中.
    代码及配制如下:
    applicationContext-jotm.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans>    <bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean"/>    <bean id="jotmTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
            <property name="userTransaction" ref="jotm"/>
        </bean>    <bean id="innerDataSource1" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
            <property name="transactionManager" ref="jotm"/>
            <property name="driverName" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/aaa"/>
        </bean>    <bean id="dataSource1" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
            <property name="dataSource" ref="innerDataSource1"/>
            <property name="user" value="root"/>
            <property name="password" value="1"/>
            <property name="maxSize" value="2"/>
        </bean>    <bean id="innerDataSource2" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
            <property name="transactionManager" ref="jotm"/>
            <property name="driverName" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/bbb"/>
        </bean>    <bean id="dataSource2" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
            <property name="dataSource" ref="innerDataSource2"/>
            <property name="user" value="root"/>
            <property name="password" value="1"/>
            <property name="maxSize" value="2"/>
        </bean>    <bean id="sessionFactory1" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            <property name="dataSource" ref="dataSource1"/>
            <property name="mappingResources">
                <list>
                    <value>com/saro/entity/FileEntity.hbm.xml</value>
                    <value>com/saro/security/entity/User.hbm.xml</value>
                    <value>com/saro/forum/entity/Board.hbm.xml</value>
                    <value>com/saro/forum/entity/Article.hbm.xml</value>
                </list>
            </property>
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
                    <prop key="hibernate.show_sql">true</prop>
                </props>
            </property>
        </bean>    <bean id="sessionFactory2" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            <property name="dataSource" ref="dataSource2"/>
            <property name="mappingResources">
                <list>
                    <value>com/saro/entity/FileEntity.hbm.xml</value>
                    <value>com/saro/security/entity/User.hbm.xml</value>
                    <value>com/saro/forum/entity/Board.hbm.xml</value>
                    <value>com/saro/forum/entity/Article.hbm.xml</value>
                </list>
            </property>
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
                    <prop key="hibernate.show_sql">true</prop>
                </props>
            </property>
        </bean>    <bean id="userDaox" class="com.saro.security.dao.UserDaoImpl">
            <property name="sessionFactory" ref="sessionFactory1"/>
        </bean>    <bean id="articleDaox" class="com.saro.forum.dao.ArticleDaoImpl">
            <property name="sessionFactory" ref="sessionFactory2"/>
        </bean>    <bean id="jotmServiceTarget" class="com.saro.example.JOTMService" >
            <property name="userDao" ref="userDaox"/>
            <property name="articleDao" ref="articleDaox"/>
        </bean>    <bean id="jotmService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            <property name="transactionManager" ref="jotmTransactionManager"/>
            <property name="target" ref="jotmServiceTarget"/>
            <property name="transactionAttributes">
                <props>
                    <prop key="*">PROPAGATION_REQUIRED</prop>
                </props>
            </property>
        </bean></beans>测试代码:
    public class JOTMService {
        private UserDao userDao;
        private ArticleDao articleDao;    public void doTest(){
            Article at=new Article();
            at.setTitle("New Article 2");
            at.setContent("========主帖=========");
            User user=new User();
            user.setUsername("aaa");
            user.setPassword("bbb");
            user.setEmail("[email protected]");
            userDao.saveUser(user);
            ///
            at.setPoster(user);
            at.setParentArticle(null);
            at.setLastUpdateTime(new java.util.Date());
            articleDao.saveArticle(at);
        }    public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
        }    public void setArticleDao(ArticleDao articleDao) {
            this.articleDao = articleDao;
        }    public static void main(String[] args) {
            ApplicationContext contex=new FileSystemXmlApplicationContext("applicationContext-jotm.xml");
            JOTMService s=(JOTMService)contex.getBean("jotmService");
            s.doTest();
            System.out.println("=============end================");
        }
    }
      

  5.   

    我报以下异常:
    Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'CopyDataServerProxy' defined in class path resource [gov/cd12366/bridge/spring/applicationContext_jotm.xml]: Cannot resolve reference to bean 'CopyDataServer' while setting bean property 'target'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'CopyDataServer' defined in class path resource [gov/cd12366/bridge/spring/applicationContext_jotm.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'LoginDAOInfo' of bean class [gov.cd12366.bridge.server.CopyDataServer]: Bean property 'LoginDAOInfo' is not writable or has an invalid setter method. Did you mean 'loginDAOInfo'?
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'CopyDataServer' defined in class path resource [gov/cd12366/bridge/spring/applicationContext_jotm.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'LoginDAOInfo' of bean class [gov.cd12366.bridge.server.CopyDataServer]: Bean property 'LoginDAOInfo' is not writable or has an invalid setter method. Did you mean 'loginDAOInfo'?
    org.springframework.beans.NotWritablePropertyException: Invalid property 'LoginDAOInfo' of bean class [gov.cd12366.bridge.server.CopyDataServer]: Bean property 'LoginDAOInfo' is not writable or has an invalid setter method. Did you mean 'loginDAOInfo'?
    at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:699)
    at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:575)
    at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:769)
    at org.springframework.beans.BeanWrapperImpl.setPropertyValues(BeanWrapperImpl.java:796)
    at org.springframework.beans.BeanWrapperImpl.setPropertyValues(BeanWrapperImpl.java:785)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:779)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:575)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:405)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:238)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:148)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:186)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:764)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:575)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:405)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:238)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:148)
    at gov.cd12366.bridge.spring.CustomBeanFactory.getBean(CustomBeanFactory.java:29)
    at Test.main(Test.java:85)
    ---
    感觉是在处理如下配置
    <bean id="jotmServiceTarget" class="com.saro.example.JOTMService" >
            <property name="userDao" ref="userDaox"/>
            <property name="articleDao" ref="articleDaox"/>
        </bean>
    时出错,能否把你的com.saro.security.dao.UserDaoImpl代码贴出来看一下
      

  6.   

    我那2个dao很简单的,就是HibernateDaoSupport的子类.我唯一担心的就是程序正常执行完成会停住的问题,也不知道是哪个线程不能结束,目前寻找答案中,不知道你碰到这种情况没有.你现在的问题是Bean gov.cd12366.bridge.server.CopyDataServer没有LoginDAOInfo这个属性的set方法,呵呵,是不是急胡涂了.jotm以前都没用过,今天捣鼓了半天,jotm的包还要自己编译打包的,.
    分布式事务还是用jta方便啊,哈哈.据说weblogic express是支持jta的,但不支持ejb,价格应该不贵吧.
      

  7.   

    to:Saro(三生)
    把你的测试代码的main函数中s.doTest()执行三次,第1次正确,第2次设置为异常并回滚,第3次正确,结果应该是第1、3次数据插入成功,第2次失败。
    你运行一下,看结果是否相符?
      

  8.   

    但是实际情况的确应该继续执行啊,异常发生了我catch并写入日志就行了,并非致命性异常,怎么就不能继续执行啊?那么请问这种需要又该如何实现?weblogic我也配置过,但还是事务没成功,不过研究得不深。“我唯一担心的就是程序正常执行完成会停住的问题”,我也有这种情况,估计是jotm连接池配置的问题,从日志中觉得其连接池一直在运行,但每运行一个JAVA APPLICATION其就创建一个连接池,这样的情况不知道如果部署在web server中是否也存在,那样内存不是很快就耗尽了?jotm应该不会发生这样的问题。我一直用java app做测试,还没有在容器中试过,估计应该是配置问题!
      

  9.   

    把你的测试代码的main函数中s.doTest()执行三次,第1次正确,第2次设置为异常并回滚,第3次正确,结果应该是第1、3次数据插入成功,第2次失败。
    ------------
    是的,确实如此。第2次出现的异常捕捉后,第3次会继续执行,并成功写入。