一种融合原生事务和逻辑事务的方法

文档序号:6628067阅读:386来源:国知局
一种融合原生事务和逻辑事务的方法
【专利摘要】本发明公开了一种融合原生事务和逻辑事务的方法,其实现过程为:创建事务;启动事务;加入事务管理;提交事务;事务回滚。本发明的一种融合原生事务和逻辑事务的方法与现有技术相比,采用逻辑事务类型和逻辑事务边界类型,用户可以选择是启动事务或者直接提交,逻辑事务的提交、回滚根据当前事务的边界类型决定事务的执行,解决事务之间的死锁,实用性强。
【专利说明】一种融合原生事务和逻辑事务的方法

【技术领域】
[0001]本发明涉及云计算【技术领域】,具体地说是一种实用性强、融合原生事务和逻辑事务的方法。

【背景技术】
[0002]数据库事务,是指作为单个逻辑工作单元执行的一系列操作,要么完整地执行,要么完全地不执行。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。但是数据库事务必须保证事务在同一个应用程序中,不适用与多框架之间的使用,不能保证多框架之间的操作使用同一个事务来管理。
[0003]另外使用逻辑锁和事务的结合,会有以下的问题:
1、可能导致死锁或者阻塞,同一个逻辑事务中,业务代码在写操作前要求先锁定资源,如果锁定失败,需要解锁同一个功能sess1nID下的所有的锁。
[0004]2、事务隔离级别,理论上逻辑事务的隔离级别没有实际用处,主要是给数据库事务用的,目前需求不是很明确。
[0005]3、事务嵌套,用户需要关心事务隔离级别,需要了解上层事务。
[0006]基于此,现提供一种融合原生事务和逻辑事务的方法,该方法保证多框架之间的数据操作能够存在统一个实际事务中,有效解决上述问题。


【发明内容】

[0007]本发明的技术任务是针对以上不足之处,提供一种实用性强、融合原生事务和逻辑事务的方法。
[0008]一种融合原生事务和逻辑事务的方法,其具体实现过程为:
创建事务,初始化事务边界,指定事务执行方式、事务边界的类型,这里的事务执行方式包括本地事务和逻辑事务两种;
启动事务,配置事务执行方式,决定启动逻辑事务或者本地事务:当启动逻辑事务时,记录事务嵌套边界类型和环境事务,并创建线程安全的集合来存储Sql ;当启动本地事务时,记录事务嵌套边界类型和环境事务;
加入事务管理,执行Sql,创建数据库对象实例,当启用逻辑事务时,创建延迟提交的数据库对象实例;当启用本地事务时,使用原生的数据库对象实例;
延迟提交的数据库对象实例,缓存要执行的Sql语句、功能Sess1nID、数据库对象名到线程安全的集合中;
提交事务,显示调用事务Complete方法,设置Complete标识,如果启动的是逻辑事务,此时统一执行线程安全的集合中的Sql语句;
当执行Sql出现异常时,根据启动事务的类型,选择是否回滚:启动的是逻辑事务,则回滚;启动的是本地事务,则只抛出异常,不进行真正的回滚。
[0009]当事务执行方式为逻辑事务嵌套,创建并启动内部逻辑事务的时候,记录上层逻辑事务,并根据上层逻辑事务的事务边界类型和内部逻辑事务的事务边界类型,启动内部逻辑事务,决定是否继承上层逻辑事务,或者自己重新创建逻辑事务,或者启动本地事务。
[0010]当上层逻辑事务失败时,或者内部逻辑事务失败,或者全部执行失败时,根据上层逻辑事务和内部逻辑事务的边界类型,决定上层逻辑事务、内部逻辑事务是否回滚或者只抛出异常。
[0011]本发明的一种融合原生事务和逻辑事务的方法,具有以下优点:
该发明的一种融合原生事务和逻辑事务的方法可以控制是否推迟将数据提交到数据库;可以解决事务之间的死锁;能够做到事务的嵌套使用;保证多框架之间的数据操作能够存在统一个实际事务中,做到在逻辑事务执行的时候才延迟提交所有数据,并且做到了根据业务场景通过配置启用逻辑事务;实用性强,适用范围广泛,易于推广。

【专利附图】

【附图说明】
[0012]附图1为本发明的实现流程图。

【具体实施方式】
[0013]下面结合附图和具体实施例对本发明作进一步说明。
[0014]本发明提供一种融合原生事务和逻辑事务的方法,如附图1所示,其具体实现过程为:
创建事务,初始化事务边界,指定事务执行方式、事务边界的类型,这里的事务执行方式包括本地事务和逻辑事务两种;
启动事务,配置事务执行方式,决定启动逻辑事务或者本地事务:当启动逻辑事务时,记录事务嵌套边界类型和环境事务,并创建线程安全的集合来存储Sql ;当启动本地事务时,记录事务嵌套边界类型和环境事务;
加入事务管理,执行Sql,创建数据库对象实例,当启用逻辑事务时,创建延迟提交的数据库对象实例;当启用本地事务时,使用原生的数据库对象实例;该步骤中原生的数据库对象实例,直接执行Sql。
[0015]延迟提交的数据库对象实例,缓存要执行的Sql语句、功能Sess1nID、数据库对象名到线程安全的集合中;
提交事务,显示调用事务Complete方法,设置Complete标识,如果启动的是逻辑事务,此时统一执行线程安全的集合中的Sql语句;
当执行Sql出现异常时,根据启动事务的类型,选择是否回滚:启动的是逻辑事务,则回滚;启动的是本地事务,则只抛出异常,不进行真正的回滚。
[0016]内部逻辑事务的时候,记录上层逻辑事务,并根据上层逻辑事务的事务边界类型和内部逻辑事务的事务边界类型,启动内部逻辑事务时,决定是否继承上层逻辑事务,或者自己重新创建逻辑事务,或者启动本地事务。根据上层逻辑事务和内部逻辑事务的边界类型,当上层逻辑事务失败,或者内部逻辑事务失败,或者全部执行失败时,决定上层逻辑事务、内部逻辑事务是否回滚或者只抛出异常。
[0017]对于逻辑事务嵌套,内部逻辑事务复用上层逻辑事务的情景,内部逻辑事务不在创建新的逻辑事务,将当前要执行的Sql和数据库连接、功能Sess1nID记录到线程安全的集合,做到延迟提交。这样只能是上层逻辑事务才能真正提交,做到统一管理,可以保证多逻辑事务之间的写操作能够存在同一个实际事务中。
[0018]实施例:以下内容为该方法的一个实例的数据访问,本实例应用了事务嵌套。
[0019]其具体实现过程为:
一、定义外部事务执行方式和事务边界类型,创建逻辑事务。
[0020]var ltrans = new GSPTransact1nScope (GSPTransact1nScopeOpt1n,ScopeType0
[0021]二、执行数据操作,创建数据库实例对象,将需要执行的Sql语句、功能Sess1nID、数据库对象名存放到线程安全的集合中,见以下代码:

【权利要求】
1.一种融合原生事务和逻辑事务的方法,其特征在于:其实现过程为: 创建事务,初始化事务边界,指定事务执行方式、事务边界的类型,这里的事务执行方式包括本地事务和逻辑事务两种; 启动事务,配置事务执行方式,决定启动逻辑事务或者本地事务:当启动逻辑事务时,记录事务嵌套边界类型和环境事务,并创建线程安全的集合来存储Sql ;当启动本地事务时,记录事务嵌套边界类型和环境事务; 加入事务管理,执行Sql,创建数据库对象实例,当启用逻辑事务时,创建延迟提交的数据库对象实例;当启用本地事务时,使用原生的数据库对象实例; 延迟提交的数据库对象实例,缓存要执行的Sql语句、功能Sess1nID、数据库对象名到线程安全的集合中; 提交事务,显示调用事务Complete方法,设置Complete标识,如果启动的是逻辑事务,此时统一执行线程安全的集合中的Sql语句; 当执行Sql出现异常时,根据启动事务的类型,选择是否回滚:启动的是逻辑事务,则回滚;启动的是本地事务,则只抛出异常,不进行真正的回滚。
2.根据权利要求1所述的一种融合原生事务和逻辑事务的方法,其特征在于:当事务执行方式为逻辑事务嵌套,创建并启动内部逻辑事务的时候,记录上层逻辑事务,并根据上层逻辑事务的事务边界类型和内部逻辑事务的事务边界类型,启动内部逻辑事务,决定是否继承上层逻辑事务,或者自己重新创建逻辑事务,或者启动本地事务。
3.根据权利要求2所述的一种融合原生事务和逻辑事务的方法,其特征在于:当上层逻辑事务失败时,或者内部逻辑事务失败,或者全部执行失败时,根据上层逻辑事务和内部逻辑事务的边界类型,决定上层逻辑事务、内部逻辑事务是否回滚或者只抛出异常。
【文档编号】G06F17/30GK104199976SQ201410492350
【公开日】2014年12月10日 申请日期:2014年9月24日 优先权日:2014年9月24日
【发明者】周仑, 王震 申请人:浪潮通用软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1