当前位置:编程学习 > JAVA >>

java主从表事务控制(EJB3.0解决方法)

/*********************************************************************/
主从表事务控制解决方法EJB3.0
author:chinayaosir
QQ:44633197  QQ Group:8284865,34610648
blog http://blog.csdn.net/chinayaosir

0.事务一致性控制解释:
银行卡转帐操作事务:
用户从张三帐号1111222333444转帐8000.00到李四帐号2222333344445555!
步骤如下:
0.1验证张三密码和帐号正确!
0.2验证李四帐号2222333344445555输入正确!
0.3张三输入转帐金额8000.00!
0.4计算手续费4.00
0.5验证张三帐号余额>=8000.00+4.00

0.6李四帐号2222333344445555加上8000.00
0.7张三帐号1111222333444减去8004.00

0.8事务控制
0.6到0.7共2步没有任何错误,则转帐成功[提交事务]!
0.6到0.7共2步   有任何错误,则转帐失败[回滚事务]!
/*********************************************************************/
1.主表和从表事务控制要求

假设主表只有一行数据,而从表有1到n行数据!
当我们一起保存或者删除主表和从表,事务要求如下:
1.1.Create/Update事务要求
  如果主表Create/Update失败而从表Create/Update成功;
  或者主表Create/Update成功而从表Create/Update失败.
  则整个事务都回滚,结果是主从表保存失败,达到事务控制要求.
  打个比方:完成一件事情要经过A->B->C->D->E->F共6步,
            如果6步中有一步出错, 则Create/Update成功的部分被事务回滚强制取消;
            如果6步中没有一步出错,则mCreate/Update成功,则事务提交!

1.2.delete事务要求
  如果主表delete失败而从表delete成功;
  或者主表delete成功而从表delete失败.
  则整个事务都回滚,结果是主从表delete失败,达到事务控制要求.

/*********************************************************************/
2.主表和从表事务控制EJB客户调用方法
2.1Create/update调用:spdaotrans.SaveWithTransation(sphead, splist);
sphead=主表,1行记录(最多只能输入一条)
splist=从表,2行记录(可以输入1-N条,N属于自然数)

2.2Delete调用:spdaotrans.DeleteWithTransation("PB100563");
"PB100563"=主从表都使用的一个关键字PK,
DeleteWithTransation()方法由1-2-3步删除数据构成一个整体事务!

2.3源码参考
package com;
//import java basic package
import java.util.*;
import java.lang.String;
import java.text.SimpleDateFormat;
import javax.naming.InitialContext;

//import entity and service package
import shipping.entity.*;
import shipping.shippingDAO.spDAOTransRemote;

public class testTransation {
    public static void main(String[] args) {
        //************************begin************************************   
        try {
            //1.InitialContext and get spDAOTrans object
            InitialContext ctx = JNDIContext.getInitContextByRemote();
            spDAOTransRemote spdaotrans=(spDAOTransRemote)ctx.lookup("spDAOTrans/remote");
            //************************************************************       
            //2.Save  with transation test value=OK
            //SaveWithTransation(SSpMaster m,List<SSpDetail> d )
            System.out.println("SaveWithTransation(SSpMaster m,List<SSpDetail> d )");
            System.out.println("fill SSpMaster data");   
            //2.1fill SSpMaster
            SSpMaster sphead=new SSpMaster();   
            SSpMasterId spheadpk=new SSpMasterId();
            spheadpk.setPsonumber("PB100563");
            spheadpk.setSubcustom("0000000000");
            String s1="10/29/2010",s2="10/25/2010",s3="10/30/2010";
            SimpleDateFormat   sdf =  new SimpleDateFormat("MM/dd/yyyy");  
            Date d1=sdf.parse(s1);
            Date d2=sdf.parse(s2);
            Date d3=sdf.parse(s3);       

            sphead.setId(spheadpk);       
            sphead.setPshipDate(d1);
            sphead.setShippDate(d2);
            sphead.setShip2Date(d3);
            sphead.setCustomerid("B.A.B.");                           
            sphead.setDestinatio("COLUMBUS, OHIO");
            sphead.setCustofPoe("LONG BEACH");
            sphead.setId(spheadpk);           

            //2.2fill SSpDetail list
            System.out.println("fill SSpDetail data");   
   
            SSpDetailId spdetailpk1=new SSpDetailId();       
            SSpDetail spdetail1=new SSpDetail();   
            SSpDetailId spdetailpk2=new SSpDetailId();   
            SSpDetail spdetail2=new SSpDetail();
            ArrayList<SSpDetail> splist = new ArrayList<SSpDetail>();
           
            String sdate="10/25/2010";
            SimpleDateFormat   sdfDetail =  new SimpleDateFormat("MM/dd/yyyy");  
            Date d_shipdate=sdfDetail.parse(sdate);
            //2.3fill spdetailpk data
            spdetailpk1.setShippDate(d_shipdate);
            spdetailpk1.setPsonumber("PB100563");
            spdetailpk1.setOcNumber("B1000577");
            spdetailpk1.setItemnumber("BY34317");  

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,