bboss persistent事务管理介绍 (一)

简介: bboss项目下载列表 在sourceforge访问地址为:https://sourceforge.net/project/showfiles.php?group_id=238653 bboss persistent的事务管理框架实现数据库的增、删、改、查事务管理,整个事务管理框架在下面的各节中详细介绍。

bboss项目下载列表 在sourceforge访问地址为:
https://sourceforge.net/project/showfiles.php?group_id=238653

bboss persistent的事务管理框架实现数据库的增、删、改、查事务管理,整个事务管理框架在下面的各节中详细介绍。事务管理框架的实现原理模型见下图:

应用程序中的事务TX都会和本地线程关联,本地线程ThreadLocal是一个对上下文Thread关联的线程独占资源进行有效管理的容器。

4.9.1.多数据库事务的支持(分布式事务)

一个事务中如果存在不同数据库的操作,那么事务的处理比较复杂,只有所有的数据库的操作都成功以后事务提交,否则事务回滚。下面的代码演示了如果管理两个不同数据库(分布式)事务:

Poolman.xml中配置了两个数据源bspfquery

  <datasource>

      ...

<dbname>bspf</dbname>

...

</datasource>

 

<datasource>

      ...

<dbname>query</dbname>

...

</datasource>

代码段如下:   

           TransactionManager tm =  new TransactionManager();

       try

       {

           tm.begin();

           DBUtil db = new DBUtil();

             //bspf库上执行删除操作

           db.executeDelete("bspf","delete from table1 where id=1");

             //query库上执行更新操作

           db.executeUpdate("query","update table1 set value='test'

where id=1");

           tm.commit();

       }

       catch(Exception e)

       {

           try {

              tm.rollback();

           } catch (RollbackException e1) {

             

              e1.printStackTrace();

           }

   }

上述代码中对bspf库上执行删除操作,在query库上执行更新操作,两个操作被包含在一个事务中,只有两个操作全部成功后事务才会成功,任何一个失败,都会导致事务被回滚。

4.9.2.四种类型的事务

a.    必须创建新的事务(NEW_TRANSACTION

b.    有事务就加入当前事务,没有就不创建事务(MAYBE_TRANSACTION

c.    有事务就加入当前事务,没有就创建事务(REQUIRED_TRANSACTION)(默认情况)

d.    没有事务(NO_TRANSACTION

 

4.9.3.事务嵌套

对于同一个的事务中包含的事务定义为事务嵌套,事务所包含的子事务通过子事务计数器来管理,增加一个子事务时计数器加1,提交一个子事务时计数器减一,当计数器为零时提交所有事务,只要事务执行过程中有rollback的情况则回滚全部子事务。事务的嵌套具有一下16种组合,每种组合对全局事务的影响见表:

 

内部事务类型

外部事

务类型

NEW_TRANSACTION

REQUIRED_TRANSACTION

MAYBE_TRANSACTION

NO_TRANSACTION

NEW_TRANSACTION

屏蔽声明的事务,程序中开启一个新事务

使用声明的事务

使用声明的事务

屏蔽声明的事务,程序在没有事务的环境下运行

REQUIRED_TRANSACTION

屏蔽声明的事务,程序中开启一个新事务

使用声明的事务

使用声明的事务

屏蔽声明的事务,程序在没有事务的环境下运行

MAYBE_TRANSACTION

如果声明的事务存在,屏蔽声明的事务,程序中开启一个新事务

如果声明的事务存在,则使用声明的事务,否则开启一个新的事务

如果声明的事务存在,则使用声明的事务,否则不需声明事务

如果声明的事务存在,屏蔽声明的事务,程序在没有事务的环境下运行

NO_TRANSACTION

程序中开启一个新事务

程序中开启一个新事务

程序在没有事务的环境下运行

程序在没有事务的环境下运行

 

 

4.9.4.支持事务的挂起和恢复

事务的挂起包括挂起当前正在执行的事务和挂起所有的事务.

挂起当前正在执行的事务是指暂停当前线程中运行的事务。如果在执行当前事务之前有事务挂起则恢复之前挂起的事务,

挂起所有的事务是指将当前事务挂起同时不恢复之前事务,即在执行恢复之前的当前环境没有事务关联。

 

事务恢复:将之前挂起的事务进行恢复,事务继续执行

4.9.5 事务管理的相关接口

事务管理器:com.frameworkset.orm.transaction.TransactionManager ,每个

接口表:

名称

功能描述

说明

 

 

public void begin() throws TransactionException

开启一个事务,如果当前上下文有事务则加入,如果没有则创建新的事务

Begin方法只能在TransactionManager的同一个对象实例上调用一次,超过一次将抛出事务异常

 

 

public

void

begin(int tx_type) throws TransactionException

开启一个事务,参数tx_type值的取值范围为:

NEW_TRANSACTION-<span style="color: navy; fo

目录
相关文章
bboss session介绍
本文将主要探讨集群环境session管理模式,bboss session架构及特点以及bboss session的运用。让大家对bboss session有更加深入地了解。
1786 0
bboss 持久层重大改进
bboss 持久层重大改进。 bboss持久层最大特色就是其对动态sql语句的良好支持,这个机制是基于velocity模板引擎的来实现的: Velocity.evaluate(context, out, sqlName, sql); Velocity.evaluate这个方法存在一个非常严重的性能隐患,那就是这个方法没有对解析出来的sql模板语法结构树做任何的缓存机制,每次都会硬解析sql语句,并且在解析sql语句时会向velocity的模板解析器池中获取一个池化的解析器,这样在高并发情况下会频繁地获取解析其池的共享锁,导致系统性能下降。
911 0
bboss持久层事务管理组件TransactionManager增加两个release方法
bboss持久层事务管理组件TransactionManager增加release和releasenolog两个方法,可以在finally块中调用它们来释放事务资源,使得bboss持久层框架的编程事务管理变得更加优雅、更加轻松。
741 0
bboss多数据库事务管理
本文以一个简单的实例来介绍bbossgroups中持久层框架如何实现多数据库事务: @Test public void testMutiDBTX() { TransactionManager tm = new TransactionManager(); try { tm.
633 0
bboss-persistent结合bboss-aop实现注解事务
bboss-persistent结合bboss-aop也可以实现注解事务哦. 先看一个业务组件: package org.frameworkset.spi.transaction.annotation; import java.
636 0
bboss persistent 实现数据库更新操作
4.5 更新操作代码段    4.5.1预编译更新操作        PreparedDBUtil preDBUtil = new PreparedDBUtil();        int pk = 0;        String sqlstr = "update OFFICE_...
598 0
关于bboss persistent主键生成机制的说明
4.14 主键的生成 bboss主键生成有两种模式,一种模式是在对象主键属性上加@PrimaryKey(uuid主键)或者@PrimaryKey(auto=true,pkname="xxxx")(pkname对应tableinfo中的TABLE_NAME子字段的值),另外一种模式就是通过DBUtil.getNextPrimaryKey方法再程序中获取(前提是表的主键信息需要配置到tableinfo中,可以支持uuid和oracle的sequence,以及mysql的自定义sequence)。
1053 0
bboss persistent事务管理介绍 (七)
bboss persistent事务管理介绍 (七)   l        配置步骤 从上述的语法当中可以看出,要声明一个业务组件的事务方法的步骤为: 第一步 准备好业务组件,参考下面的模型 第二步 在配置文件中配置一个管理服务,也就是添加一个manager元素(...
628 0
bboss persistent事务管理介绍 (五)
l       带返回值的模板方法使用实例   Object ret = TemplateDBUtil.executeTemplate(               new JDBCValueTemplate(){                   /**        ...
649 0