问题描述
系统环境:Linuxversion2.6.18-194.el5PAEmysql5.0.22,forpc-linux-gnumysql-connector-java-5.1.1-alpha-bin.jartry{//订单处理开始时间logHelpService.writeProgramLog(person.getPartyId(),person.getName(),ComLog.logLevel_Info,"派单开始时间:","派单","订单处理时间",System.currentTimeMillis()+"");//保存订单。并派送到门店。//暂时先将保存订单和发送订单事务分离。//orderBiz.saveAndTransport(ccbsOrderHeader,orderItems,person.getName(),person.getPartyId());ccbsOrderHeader=orderBiz.saveOrderWithOutTransport(ccbsOrderHeader,orderItems,person);JdbcTemplatejdbcTemplate=(JdbcTemplate)SpringContextUtils.getService("jdbcTemplateCcbs");StringBuffersql=newStringBuffer();sql.append("selectorder_codefromorder_headerwhereorder_id="+ccbsOrderHeader.getOrderId());logger.info("订单保存成功!从数据库取得订单ID"+ccbsOrderHeader.getOrderId()+"对应的ORDER_CODE为:"+jdbcTemplate.queryForObject(sql.toString(),String.class));//如果是大订单,则将订单的状态改为待审核。if(orderRuleBiz.isBigOrder(ccbsOrderHeader)){orderBiz.reviewingOrder(ccbsOrderHeader,person.getName());}else{//如果不是大订单,则进行派单。orderBiz.transportNewOrder(ccbsOrderHeader,person.getName());}//订单处理结束时间logHelpService.writeProgramLog(person.getPartyId(),person.getName(),ComLog.logLevel_Info,"派单结束时间:","派单","订单处理时间",System.currentTimeMillis()+"");json.put("canOperate","true");}catch(Exceptione){e.printStackTrace();json.put("canOperate",Boolean.FALSE);json.put("warnMsg",e.getMessage());}
上面为我的action层的java程序代码。会打出如下日志:17:43:53PerformOrderAction-20110613174353派单开始:session中的token为:TOKEN2011061317414817:43:53PerformOrderAction-20110613174353派单开始:ccbsOrderHeader中的token为:TOKEN2011061317414817:43:53OrderBiz-saveOrderWithOutTransport():保存订单开始时间:130795823347417:43:53OrderBiz-saveOrderWithOutTransport():保存订单结束时间:130795823359317:43:53PerformOrderAction-订单保存成功!从数据库取得订单ID1003339对应的ORDER_CODE为:20110613001610事务是配置在service层。及biz相关的方法是事务的。所以此段代码会先保存订单。并通过jdbc的方式从数据库里面读取订单ID对应的订单号。事务是通过spring来进行控制的。因为事务不在action层,所以简单的理解是:1.保存订单后事务是提交了的。2.能够通过ID取得提交的订单,则订单应该是持久化到数据库中的。但最终的结果是,订单信息丢失。且查看bin-log的日志,也未找到订单ID对应的数据日志。对于该问题非常纠结,还望javaeyer们帮忙分析,指导!谢谢!