java - ofbiz的事务如何配置才能起作用?
天蓬老师
天蓬老师 2017-04-18 09:22:41
[Java讨论组]

1.仅使用ofbiz的实体引擎,程序如下:

  boolean beganTrans = true;   
    Map resignMap = new HashMap();
    resignMap.put("userLoginId", "wwww");
    resignMap.put("password", "1321313133");
    resignMap.put("signDaySeries","0");
    resignMap.put("isValidate", "1");
    Date date=new Date();
    DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String buildDate=format.format(date);
    resignMap.put("regeTime", buildDate);
    GenericDelegator delegator = GenericDelegator.getGenericDelegator("default");   

    try {      

        if (beganTrans)   
            

             beganTrans = TransactionUtil.begin();  
         
        GenericValue value=delegator.create("LotteryUser", resignMap);
     
        GenericValue value1=delegator.create("LotteryUser", resignMap);
        
        TransactionUtil.commit(beganTrans); 

                
    } catch (Exception e) {      

               e.printStackTrace();      

                  

               try {       

                        TransactionUtil.rollback(beganTrans);   

            } catch (GenericTransactionException e1) {       

                        e1.printStackTrace();   

            }   
        resp.getWriter().write("sorry");
    

}

实体引擎配置如下:

 
    
      
      
       
    
         
      
        
        
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
        
         
        
        
      
    
      
        
        
        
        
      
      
        
        
        
        
      
      
        
        
        
        
        
    
      
    



**出现的错误如下**

2016-06-29 16:23:14,439 675716 (http-0.0.0.0-8086-Processor3) [ TransactionUtil.java:349:WARN ]
---- exception report ----------------------------------------------------------
[TransactionUtil.setRollbackOnly] Calling transaction setRollbackOnly; this stack trace shows where this is happening:
Exception: java.lang.Exception
Message: null
---- stack trace ---------------------------------------------------------------
java.lang.Exception
org.ofbiz.entity.transaction.TransactionUtil.setRollbackOnly(TransactionUtil.java:349)
org.ofbiz.entity.transaction.TransactionUtil.rollback(TransactionUtil.java:286)
org.ofbiz.entity.GenericDelegator.create(GenericDelegator.java:723)
org.ofbiz.entity.GenericDelegator.create(GenericDelegator.java:656)
com.xbstar.wei.servlet.UserLogin.doGet(UserLogin.java:130)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:548)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)

java.lang.Thread.run(Unknown Source)

           *请问大神如何解决?* 
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(2)
伊谢尔伦

举个列子:

<bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    </bean>
    
    <tx:annotation-driven transaction-manager="transactionManager" />

    <context:annotation-config />    
        <tx:advice id="defaultTxAdvice">
        <tx:attributes>
            <tx:method name="*" rollback-for="Exception" />
        </tx:attributes>
    </tx:advice>

    <aop:config>
        <aop:pointcut id="ao_bo"
            expression="(execution(* *..*BoImpl.*(..))) or ( execution(* *..*AoImpl.*(..)) and ( not execution(* *..*AoImpl.mtx_*(..)) ) )" />
        <aop:advisor pointcut-ref="ao_bo" advice-ref="defaultTxAdvice" />
    </aop:config>

配置了事务,抛异常就回滚。

具体参考:
官网中关于事务的说明:http://docs.spring.io/autorepo/docs/spring/4.2.x/spring-framework-reference/html/transaction.html

阿神

没用过这货,一般都是用Spring的注解式事务配置,貌似现在也较少见到用编程式事务了。

配置方式大概跟@菩提旭光 的差不多。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号