下面是我写的一段测试代码,功能大体可以描述出来了ExamTransaction baseExam = new ExamTransaction();
baseExam.BeginTransaction();
ExamTransaction et = new ExamTransaction();
String strSql = "";
strSql = "insert into system_role values(11,'11','11')";et.BeginTransaction();
et.ExecuteNonQuery(strSql);
et.CommitTransaction();
baseExam.RollbackTransaction();
如:
模块1:
功能B();模块2:
功能C();模块3:
功能A();所以功能B和C中都需要单独的事务控制有什么好的办法吗?
这个方法的主要限制是需要采用乐观锁,不能适应悲观锁的需要(要是需要的话,需要模拟EJB的做法,自己创容器,加锁).
主要思想是在开始事务的时候假装开始事务,实际的程序只是开始记录每一个动作,当程序需要update,insert,delete的操作不直接操作数据库,而是操作内存并记录操作,要是query操作则直接操作数据库,并记录操作;提交事务的时候,就需要真的加锁,并执行操作,delete,updata,insert需要检验数据完整性,不符合的rollback.
基本是这样的,细节应该比较复杂,要是真的需要,那需要时间去构建不少类库.
要是没有什么特殊的需要可以避免.