java主从表事务控制(EJB3.0解决方法)
/*********************************************************************/
主从表事务控制解决方法EJB3.0
author:chinayaosir
QQ:44633197 QQ Group:8284865,34610648
blog http://blog.csdn.net/chinayaosir0.事务一致性控制解释:
银行卡转帐操作事务:
用户从张三帐号1111222333444转帐8000.00到李四帐号2222333344445555!
步骤如下:
0.1验证张三密码和帐号正确!
0.2验证李四帐号2222333344445555输入正确!
0.3张三输入转帐金额8000.00!
0.4计算手续费4.00
0.5验证张三帐号余额>=8000.00+4.000.6李四帐号2222333344445555加上8000.00
0.7张三帐号1111222333444减去8004.000.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 ,