本发明属于内存数据处理,具体涉及基于java的内存事务管理方法。
背景技术:
1、程序在处理业务逻辑的过程中,在出现程序异常或是特定业务场景下,需要将已修改的内存数据回滚到修改之前的状态,这就需要程序拥有内存级别的数据事务处理能力。但实际的内存数据结构非常复杂,存在着各种嵌套和引用的关系,而且程序代码执行过程也非常复杂,想记录内存修改的数据,并且回滚这些数据的修改,就成为了一个技术难题。
技术实现思路
1、有鉴于此,一些实施例公开了基于java的内存事务管理方法,包括:
2、java类数据结构赋能成为diff类;
3、通过diff对象的唯一标识rootid,获取diff对象的事务上下文实例;
4、事务上下文执行start方法,开始事务;
5、执行原有业务逻辑,修改diff对象的内存数据;
6、业务逻辑执行结束后,
7、若业务逻辑正常,则事务上下文执行commit方法提交事务,事务结束;
8、若业务逻辑有异常,则事务上下文执行rollback方法回滚事务,还原diff对象已修改的数据内容,事务结束。
9、进一步,一些实施例公开的基于java的内存事务管理方法,java类数据结构赋能成为diff类包括:
10、数据结构类继承diffobject;
11、对于数据结构类的成员属性,增加取值方法,执行父类diffobject提供的方法,更新属性节点的数据变化路径;
12、对于数据结构类的成员属性,增加赋值方法,执行父类diffobject的方法,将每次属性数据的变化记录到事务上下文中。
13、一些实施例公开的基于java的内存事务管理方法,java类数据结构赋能成为diff类还包括:
14、对于集合类的成员属性,采用类darraylist替换java list类型和java set类型数据;采用类dhashmap替换java map类型数据。
15、一些实施例公开的基于java的内存事务管理方法,java类数据结构赋能成为diff类包括:
16、在根节点类构造函数中,初始化根节点标识和根节点路径属性,确保每一个根节点类对象实例具有根节点唯一标识,确保每个实例对象对应一个事务上下文。
17、一些实施例公开的基于java的内存事务管理方法,更新属性节点的数据变化路径,其中,属性节点数据包括属性的名称和属性当前值。
18、一些实施例公开的基于java的内存事务管理方法,将每次属性数据的变化记录到事务上下文中,其中,属性数据的变化包括属性的名称、属性修改后的值、属性修改前的值。
19、一些实施例公开的基于java的内存事务管理方法,通过diff对象的唯一标识rootid,获取diff对象的事务上下文实例,包括:
20、通过根节点diff对象,获得根节点标识rootid;
21、通过事务上下文管理类,获得根节点标识rootid对应的事务上下文实例。
22、一些实施例公开的基于java的内存事务管理方法,内存事务包括多个相互嵌套的事务,多个事务的管理嵌套进行。
23、一些实施例公开的基于java的内存事务管理方法,第一事务中嵌套有第二事务,第一事务与第二事务的管理嵌套方法包括:
24、java类数据结构赋能成为diff类;
25、通过diff对象的唯一标识rootid,获取diff对象的事务上下文实例;
26、事务上下文执行start方法,开始第一事务;包括创建第一事务,创建第一diff数据缓存池;
27、执行第一事务业务逻辑,修改diff对象的内存数据,并记录diff数据;
28、事务上下文再次执行start方法,开始事务;
29、创建第二事务,创建第二diff数据缓存池;
30、执行第二事务业务逻辑,修改diff对象的内存数据,并记录diff数据;
31、所有业务逻辑执行结束后,若所有业务逻辑正常,则事务上下文执行commit方法提交第二事务,将记录的修改diff内容提交到第一事务中,记录diff数据;事务上下文执行commit方法提交第一事务,将记录的修改diff内容提交到事务上下文的diffmap中,diffmap记录diff修改内容,事务结束。
32、一些实施例公开的基于java的内存事务管理方法,第一事务中嵌套有第二事务,第一事务与第二事务的管理嵌套方法包括:
33、java类数据结构赋能成为diff类;
34、通过diff对象的唯一标识rootid,获取diff对象的事务上下文实例;
35、事务上下文执行start方法,开始第一事务;包括创建第一事务,创建第一diff数据缓存池;
36、执行第一事务业务逻辑,修改diff对象的内存数据,并记录diff数据;
37、事务上下文再次执行start方法,开始第二事务;包括创建第二事务,创建第二diff数据缓存池;
38、执行第二事务逻业务辑,修改diff对象的内存数据,并记录diff数据;
39、所有业务逻辑执行结束后,若第二事务业务逻辑有异常,第一事务业务逻辑正常,则事务上下文执行rollback方法回滚第二事务,将记录的diff修改内容清空,通过java反射机制还原被修改的值;事务上下文执行commit方法提交第一事务,将记录的修改diff内容提交到事务上下文的diffmap中,diffmap记录diff修改内容,事务结束。
40、本发明实施例公开的基于java的内存事务管理方法,实现了java对象和对象属性的内存级别事务处理,同时支撑复杂类数据结构,例如支撑基础数据类型、支持java原生集合list和map,还支持多层事务嵌套执行,为基于内存数据的事务管理提供了一种具有应用潜力的方法。
1.基于java的内存事务管理方法,其特征在于,包括:
2.根据权利要求1所述的基于java的内存事务管理方法,其特征在于,所述java类数据结构赋能成为diff类包括:
3.根据权利要求2所述的基于java的内存事务管理方法,其特征在于,所述java类数据结构赋能成为diff类还包括:
4.根据权利要求1所述的基于java的内存事务管理方法,其特征在于,所述java类数据结构赋能成为diff类包括:
5.根据权利要求2所述的基于java的内存事务管理方法,其特征在于,更新属性节点的数据变化路径,其中,传入参数包括属性的名称和属性当前值。
6.根据权利要求2所述的基于java的内存事务管理方法,其特征在于,将每次属性数据的变化记录到事务上下文中,其中,输入参数包括属性的名称、属性修改后的值、属性修改前的值。
7.根据权利要求1所述的基于java的内存事务管理方法,其特征在于,所述通过diff对象的唯一标识rootid,获取diff对象的事务上下文实例,包括:
8.根据权利要求1所述的基于java的内存事务管理方法,其特征在于,若内存事务包括多个相互嵌套的事务,多个事务的管理嵌套进行。
9.根据权利要求8所述的基于java的内存事务管理方法,其特征在于,第一事务中嵌套有第二事务,第一事务与第二事务的管理嵌套方法包括:
10.根据权利要求8所述的基于java的内存事务管理方法,其特征在于,第一事务中嵌套有第二事务,第一事务与第二事务的管理嵌套方法包括: