bboss持久层事务管理组件托管第三方持久层框架(mybatis等)事务功能介绍

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: bboss持久层事务管理组件托管第三方持久层框架(mybatis等)事务功能介绍 bboss持久层框架中的TXDataSource数据源类,可以实现第三方数据库事务代理功能 com.frameworkset.
bboss持久层事务管理组件托管第三方持久层框架(mybatis等)事务功能介绍

bboss持久层框架中的TXDataSource数据源类,可以实现第三方数据库事务代理功能
com.frameworkset.orm.transaction.TXDataSource
1.事务托管原理
TXDataSource可以托管hibernate,ibatis,mybatis等持久层框架的事务管理,原理如下:
我们只需要通过TXDataSource的构造函数传入需要托管事务的实际数据源DataSource即可,这个DataSource可以是bboss内置的数据源,也可以是第三方数据源(common dbcp,C3P0,Proxool ,Druid)等等
public TXDataSource(DataSource datasource)

这样我们只要通过TXDataSource实例的getConnection()方法既可以获取到事务环境中的connection资源从而实现数据库事务的托管功能。
2.TXDataSource数据源的具体使用方法
我们以托管开源工作流activiti的事务作为示例,采用bboss内置数据源
在继续之前需要知道一下组件com.frameworkset.common.poolman.util.SQLManager中的两个工具方法:
public static DataSource getTXDatasourceByDBName(String dbname) --直接获取bboss的内置数据源,并将该数据源转换为一个代理事务的数据源,bboss持久层的poolman.xml文件中需要定义dbname代表的数据源
public static DataSource getTXDatasource(DataSource ds) --直接将ds数据源转换为一个代理事务的数据源

如果在poolman.xml配置中已经制定了enablejta参数为true,则通过SQLManager的getDatasource方法直接就会返回一个支持TX事务的数据源。

首先在poolman.xml文件中配置一个名称叫mysql的datasource
 <datasource>

    <dbname>mysql</dbname>
	<loadmetadata>false</loadmetadata>
    <enablejta>true</enablejta>
    <jndiName>jdbc/mysql-ds</jndiName>
    <driver>com.mysql.jdbc.Driver</driver>

     <url>jdbc:mysql://localhost:3306/activiti</url> 

    <username>root</username>
    <password>123456</password>
    .........
 </datasource>


如果然后在activiti的配置文件activiti.cfg.xml中做如下配置:
<properties>
  <property name="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
     <property name="dataSource" factory-class="com.frameworkset.common.poolman.util.SQLManager" factory-method="getTXDatasourceByDBName">
    	<construction>
    		<property value="mysql" />
    	</construction>
    </property>
    <!-- Database configurations -->
    <property name="databaseSchemaUpdate" value="true" />    
    <!-- job executor configurations -->
    <property name="jobExecutorActivate" value="false" />    
    <!-- mail server configurations -->
    <property name="mailServerPort" value="5025" />    
    <property name="history" value="full" />
  </property>
</properties>


从activiti.cfg.xml配置文件中可以看出,我们已经可以使用bboss ioc框架来管理activiti流程引擎,bboss ioc容器中管理的组件都可以用于activiti的相关
活动环节和事件监听器中(该功能参考文章 开源工作流引擎activiti与bboss整合使用方法浅析)。这里需要关注的是配置内容:
<property name="dataSource" factory-class="com.frameworkset.common.poolman.util.SQLManager" factory-method="getTXDatasourceByDBName">
    	<construction>
    		<property value="mysql" />
    	</construction>
    </property>

我们采用bboss ioc的静态工厂模式来定义一个TXDatasource并注入到activiti的org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration
组件中,这样activiti流程引擎的db事务就可以被bboss数据库事务所托管了。bboss数据库事务管理可以参考 http://sourceforge.net/projects/bboss/files/bbossgroups-3.4/bbossgroups%20training.ppt/download中的数据库相关事务介绍章节。


配置好了后就可以,启动流程引擎(相关方法请参考activiti的十分钟指南),看看两个事务管理的代码示例。

3.代码示例

3.1 创建activiti的用户信息--将两个创建用户操作包含在事务中,activiti采用mybatis作为持久层框架
TransactionManager tm = new TransactionManager();
    try
    {
	    tm.begin();//开启事务
	    identityService.saveUser(identityService.newUser("kermit"));
	    identityService.saveUser(identityService.newUser("gonzo"));	    
	    tm.commit();//提交事务
    }
    catch(Throwable e)
    {
    	throw e
    }
    finally
{
    tm.release();
}


3.2 完成流程任务和业务逻辑处理相结合--将业务处理和流程操作包含在一个事务中,activiti采用mybatis作为持久层框架
// Start process instance
	ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("taskAssigneeExampleProcess");
	TransactionManager tm = new TransactionManager();
	try {
		tm.begin();
		//处理业务逻辑,省略处理代码
		.....
	    // 获取用户任务列表
	    List<Task> tasks = taskService
	      .createTaskQuery()
	      .taskAssignee("kermit")
	      .list();
	    
	    Task myTask = tasks.get(0);
	    //完成任务
	    taskService.complete(myTask.getId());
	    
	    tm.commit();
	} catch (Throwable e) {
    	throw e
    }
    finally
{
    tm.release();
}


3.3 在spring中引用bboss数据源
  
 <bean id="dataSource" 
         class="com.frameworkset.common.poolman.util.SQLManager"
         factory-method="getTXDatasourceByDBName">
         <constructor-arg value="wood"></constructor-arg>
     </bean>


相关资源:
activiti和bboss结合工程下载: https://github.com/yin-bp/activiti-engine-5.12
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
5
分享
相关文章
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
160 29
MyBatis-Plus关键功能使用
通过本文的详细介绍,您可以系统地了解并掌握MyBatis-Plus的关键功能,进一步提高开发效率和代码质量。
94 23
框架源码私享笔记(02)Mybatis核心框架原理 | 一条SQL透析核心组件功能特性
本文详细解构了MyBatis的工作机制,包括解析配置、创建连接、执行SQL、结果封装和关闭连接等步骤。文章还介绍了MyBatis的五大核心功能特性:支持动态SQL、缓存机制(一级和二级缓存)、插件扩展、延迟加载和SQL注解,帮助读者深入了解其高效灵活的设计理念。
深入 MyBatis-Plus 插件:解锁高级数据库功能
Mybatis-Plus 提供了丰富的插件机制,这些插件可以帮助开发者更方便地扩展 Mybatis 的功能,提升开发效率、优化性能和实现一些常用的功能。
734 26
深入 MyBatis-Plus 插件:解锁高级数据库功能
持久层框架MyBatisPlus
持久层框架MyBatisPlus
90 1
持久层框架MyBatisPlus
spring复习05,spring整合mybatis,声明式事务
这篇文章详细介绍了如何在Spring框架中整合MyBatis以及如何配置声明式事务。主要内容包括:在Maven项目中添加依赖、创建实体类和Mapper接口、配置MyBatis核心配置文件和映射文件、配置数据源、创建sqlSessionFactory和sqlSessionTemplate、实现Mapper接口、配置声明式事务以及测试使用。此外,还解释了声明式事务的传播行为、隔离级别、只读提示和事务超时期间等概念。
spring复习05,spring整合mybatis,声明式事务
原生JDBC简单实现Mybatis核心功能
本文介绍了在Vertx项目中使用Tdengine时,因缺乏异步JDBC驱动而采用同步驱动结合`vertx.executeBlocking`实现异步查询的方法。文中详细描述了自行开发的一个简易JDBC工具,该工具实现了SQL参数绑定与返回值映射至实体类的功能,简化了原生JDBC的繁琐操作。通过具体示例展示了其实现过程及代码细节,并与原生JDBC进行了对比,突显了其便捷性和实用性。
102 5
探索阿里巴巴新型ORM框架:超越MybatisPlus?
【10月更文挑战第9天】在Java开发领域,Mybatis及其增强工具MybatisPlus长期占据着ORM(对象关系映射)技术的主导地位。然而,随着技术的发展,阿里巴巴集团推出了一种新型ORM框架,旨在提供更高效、更简洁的开发体验。本文将对这一新型ORM框架进行探索,分析其特性,并与MybatisPlus进行比较。
220 0