osworkflow基于JDBC存储实现的表结构(oracle)

一、序列:

1.序列seq_os_wfentry:

OS_WFENTRY表的主键ID引用

create sequence seq_os_wfentry minvalue 10 increment by 10;

2.序列seq_os_currentsteps:

OS_CURRENTSTEP表的主键ID引用

create sequence seq_os_currentsteps;

二、表

1OS_WFENTRY:

create table OS_WFENTRY

(

    ID number,           --工作流实例Id,引用seq_os_wfentry. Nextval

    NAME varchar(20),    --工作流名称,通过workflowinitialize方法传入

    STATE integer,       --工作流实例的状态

    primary key (ID)

);

说明:

该表存储了工作流实例Id,名称及状态信息。

工作流实例的状态主要有以下几种:

public static final int CREATED = 0;//被创建

    public static final int ACTIVATED = 1;//活动

    public static final int SUSPENDED = 2;//挂起

    public static final int KILLED = 3;// 杀死

    public static final int COMPLETED = 4;//完成

public static final int UNKNOWN = -1;//未知

2OS_CURRENTSTEP:

create table OS_CURRENTSTEP

(

    ID number,                                        --主键,引用seq_os_currentsteps.nextVal

    ENTRY_ID number,                           --引用OS_WFENTRYID

    STEP_ID integer,                               --引用流程定义文件step标记的Id属性值

    ACTION_ID integer,                          --详见该表的说明

    OWNER varchar(20),                         --stepowner(拥有者)

    START_DATE date,                            --step开始时间

    FINISH_DATE date,                           --step结束时间

    DUE_DATE date,                               --step的最后期限

    STATUS varchar(20),                         --step的状态

    CALLER varchar(20),                         --stepcaller(调用者)

    primary key (ID),

    foreign key (ENTRY_ID) references OS_WFENTRY(ID),

    foreign key (OWNER) references OS_USER(USERNAME),

    foreign key (CALLER) references OS_USER(USERNAME)

);

说明:

存放当前步骤的表。

ACTION_ID:该字段在一开始时为null,即表示当前step未执行任何action。当执行了一个action后,其result(可能是有条件结果,也可能是无条件结果)致使产生了一个新的step,此时将更新current stepACTION_ID的字段为该action标记的id属性值,同时更新该currentstep的状态为该resultold-status,以及FINISH_DATE字段为当前时间。

START_DATE:新插入一条记录时的时间。

DUE_DATE:如果一个actionresult致使了一个新的step,则该resultdue-date属性的值为新的current-stepDUE_DATE字段的初始值。

STATUS:该字段的一般取值为”Underway””Finished””Queued”

3OS_HISTORYSTEP

create table OS_HISTORYSTEP

(

    ID number,                          --历史stepId

    ENTRY_ID number,             --所属工作流实例的Id,引用了OS_WFENTRYID

    STEP_ID integer,                 --引用流程定义文件step标记的Id属性值

    ACTION_ID integer,            --引用了action标记的Id属性值,参考os_currentsteps

    OWNER varchar(20),           --历史状态下的step拥有者

    START_DATE date,              --STEP开始日期,参考OS_CURRENTSTEPS

    FINISH_DATE date,             --STEP结束日期,参考OS_CURRENTSTEPS

    DUE_DATE date,                 --STEP最后期限, 参考OS_CURRENTSTEPS

    STATUS varchar(20),           --STEP状态,一般为”Finished”

    CALLER varchar(20),           --STEP最后调用者

    primary key (ID),

    foreign key (ENTRY_ID) references OS_WFENTRY(ID),

    foreign key (OWNER) references OS_USER(USERNAME),

    foreign key (CALLER) references OS_USER(USERNAME)

);

说明:

Osworkflow中的step都是经历了一个从currentstephistorystep的过程。

可能一个stepA成为currentstep后,经历一个动作(action)并完成其result(可能是有条件结果,也可能是无条件结果)后,会产生新的stepB并将其放到os_currentstep表中。在将新的stepB插入到os_currentstep表中之前必须先做另一件事就是:

(1)    先改变OS_CURRENTSTEP表中stepASTATUS字段为该action标记的old-status属性值,更新stepAACTION_ID字段值为该actionid属性值,更新stepAFINISH_DATE值为当前日期,更新stepACALLER字段为工作流上下文中的caller

(2)    stepA记录插入到OS_HISTORY表中;

(3)    stepAOS_CURRENTSTEP_PREV中的记录转移到OS_HISTORYSTEP_PREV表中(先插入到后表中,再从前表中删除);

(4)    OS_CURRENTSTEP表中的stepA记录删除。

基于以上的逻辑可以更好理解OS_CURRENTSTEPOS_HISTORYSTEP表,OS_CURRENTSTEP_PREVOS_HISTORYSTEP_PREV之间的关系。

4OS_CURRENTSTEP_PREV

create table OS_CURRENTSTEP_PREV

(

    ID number,                          --引用OS_CURRENTSTEP表的ID

    PREVIOUS_ID number,        --引用OS_HISTORYSTEP表的ID

    primary key (ID, PREVIOUS_ID),

    foreign key (ID) references OS_CURRENTSTEP(ID),

    foreign key (PREVIOUS_ID) references OS_HISTORYSTEP(ID)

);

5OS_HISTORYSTEP_PREV

create table OS_HISTORYSTEP_PREV

(

    ID number,

    PREVIOUS_ID number,                      --引用OS_HISTORYSTEP表的ID

    primary key (ID, PREVIOUS_ID),       --引用OS_HISTORYSTEP表的ID

    foreign key (ID) references OS_HISTORYSTEP(ID),

    foreign key (PREVIOUS_ID) references OS_HISTORYSTEP(ID)

);

 

 

另外,osworkflow还利用了OpenSymphony的两个开源项目:osuserosproperty,而这两个项目也提供了JDBC实现。在osworkflow提供的JDBC实现中也提供了这两个项目的表结构支持,表示如下:

 

 

项目名称

Osproperty项目

OS_PROPERTYENTRY

Osuser项目

OS_USER

OS_GROUP

OS_MEMBERSHIP

现依次介绍:

6. OS_PROPERTYENTRY

create table OS_PROPERTYENTRY

(

       GLOBAL_KEY varchar(255),              --全局变量名称,"osff_" + entryId

       ITEM_KEY varchar(255),                   --局部变量名称,某个属性的值

       ITEM_TYPE smallint,                         --该属性的变量类型,

       STRING_VALUE varchar(255),           --属性字符串类型的值

       DATE_VALUE date,                            --属性日期类型的值

       DATA_VALUE blob,                            --属性字节数组的值

       FLOAT_VALUE float,                         --属性float的值

       NUMBER_VALUE numeric,                 --属性number的值

       primary key (GLOBAL_KEY, ITEM_KEY)

);

 

7. OS_USER

create table OS_USER

(

    USERNAME varchar(20),                   --用户名称

    PASSWORDHASH varchar(2024),       --加密过的密码值

    primary key (USERNAME)

);

 

8OS_GROUP

create table OS_GROUP

(

    GROUPNAME varchar(20),         --用户组的名称

    primary key (GROUPNAME)

);

 

9OS_MEMBERSHIP

create table OS_MEMBERSHIP

(

    USERNAME varchar(20),                                 --用户名称

    GROUPNAME varchar(20),                              --组名称

    primary key (USERNAME, GROUPNAME),

    foreign key (USERNAME) references OS_USER(USERNAME),

    foreign key (GROUPNAME) references OS_GROUP(GROUPNAME)

);

说明:

OS_USER,OS_GROUP通过OS_MEMBERSHIP实现了多对多的关联,实现了一个用户群组角色管理。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值