




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JWFDv0 96 开源工作流引擎设计开源工作流引擎设计 XML 数据库解析过程说明 注 这篇文章中所使用的 函数 就是指 JAVA 语言中的方法 作者 comsci 2011 4 25 四川 成都 简要说明 实际上 用户通过 JWFD 流程设计器设计出的流程图的结构一般是保存在 XML 格式的 文件中的 XML 文件结构请参考 JWFDv0 96 开源工作流引擎设计开源工作流引擎设计 流程图流程图 XML 结构说结构说 明明 doc 而流程引擎的运行和控制却是建立在对后台数据库的基本表结构的 SQL 操作基 础上面的 数据库结构请参考 JWFDv0 96 开源工作流引擎设计开源工作流引擎设计 数据库结构说明数据库结构说明 doc 因此从前端设计器 XML 到后台数据库基本表的数据解析和转换过程对于整个 JWFD 工作 流系统的设计就显得尤为重要 所以我在初步完成了 JWFD 工作流系统设计文档的编写之 后 发现这个环节必须补上 因此我将在这篇文档中 详细介绍 JWFD 工作流系统的 XML 数据库解析过程 包括代码实现 我尽量把整个设计思想和实现代码的结构都用很通俗的语言来讲述清楚 方便大家理解 如果经过自己的思考之后 还有不理解的地方 可以给我发邮件或者在 JWFD 的论坛上面 提问题 非常感谢 fireflow 的非也和 openjweb 的阿宝同志的大力支持 JWFD 也有自己的 论坛板块 http www fireflow org forum 33 1 html 如果大家对 JWFD 有什么意见和建议 可以再这个论坛上面发帖 包括提交 BUG 报告 设计与实现方法 采用基于 JGRAPH 开源软件的流程图数据结构 XML 模型 通过调用 JGraphGXLCodec 类的流程图编码和解码方法 将设计器设计出来的流程图转换为 GXL XML 文件格式存储 在本地硬盘 服务器 上面 解释 gxl 文件格式就是一种简单的图形 xml 文件存储格式 然后通 过调用 ParserGxl 类和 GxlToDatabase 类实现将 XML 文件中存储的流程图数据转换到数 据库中进行存储 以便实现下一步 JWFD 流程引擎对流程图数据的处理 JWFD 流程图流程图 数据库转换的实现过程数据库转换的实现过程 上面的图例是 JWFD 开源工作流系统里面的流程图 XML 数据库转换的实现流程 而具 体负责实现上述功能的代码是在 JWFD 的代码包里面的 org jwfd workflowDesigner FLCLs Gxl 的 package 里面的下面三个类 如下 org jwfd workflowDesigner FLCLs Gxl GxlToDatabase java org jwfd workflowDesigner FLCLs Gxl JgraphGxlCodec java org jwfd workflowDesigner FLCLs Gxl ParserGxl java 主要的实现方法用简单的语言来描述就是 通过调用 DOM 一种 XML 解析工具包 类中 的函数对流程图文件的 XML 结构进行解析 对存储在 XML 文件里面的流程图的拓扑结 构 节点和连接线 进行提取操作 然后把提取出来的流程图拓扑结构数据 通过数据库的 SQL 操作 insert update 等方式插入到已经建立好的 MYSQL 数据库的 JWFD 流程基本表 中 JWFD 的流程基本表的表结构请参考 JWFDv0 96 开源工作流引擎设计 数据库结构说 明 doc 一文 需要说明的是 XML 解析模块在 JWFD 中主要是依靠 JGRAPH 开源软件的 XML 处理模 块来实现的 JWFD 通过调用这个 XML 处理模块 然后加上 XML 数据整理和数据库操作 方法来共同完成这一过程 public ParserGxl String fe String gid throws Exception 这个类中的主函数 ParserGxl 是一个 DOM 类的变形函数 主要用于从流程图的 XML 文 档中把流程图的节点 连接线 坐标等数据提取出来 如果大家需要改造流程图的定义 XML 文件格式 那么就需要对这个函数中的某些代码有所了解 现在我们来对具体的实现代码进行分析 File f new File fe 这句代码的意义是通过参数 fe 传递过来的文件名称建立一 个文件类型的变量 f 这个变量 f 就是后面 DOM 类用来读取 xml 文件的文件名称 流程设计器 GXL 流程 图文件 MYSQL 数据 库 基本表 JWFD GXL 流程图转换模 块 DocumentBuilderFactory dbf DocumentBuilderFactory newInstance 这句代码的意义是建立一个 XML 文档数据处理模型的实例 newInstance 的意思就是在 内存中创建一个 XML 数据模型的实例 DocumentBuilder db dbf newDocumentBuilder 这句代码的意思是实例化一个XML文档解析类 Document doc db parse f 这句代码的意思是装载前面导入的XML文件 Element gxl Element doc getDocumentElement NodeList graph list gxl getChildNodes 这两句代码的作用是初始化需要解析的XML文件 并获取该XML文件的第一个元素 并从 第一个元素列表list开始解析这个XML数据 实际上 前面几句代码联合在一起就是一个初始化XML数据处理类的代码段 这些代码段 是统一在一起的 不能够分开使用 这点需要注意 特别是大家在复制这段代码的时候要 注意 它们是一个整体 作用是初始化一个XML数据模型实例 并为下面的提取XML数据元做准 备 if graph list getLength 0 return 这段代码的意思通过判断xml数据列表的长度是否为0 并执行返回命令 for int graph index 0 graph index graph list getLength graph index for循环 循环控制变量graph index是XML文件的数据段长度 从这个循环开始程序开 始自动的提取xml文件的数据 Node graph node graph list item graph index 定义一个Node类型变量 并从graph list数组item中提取graph node元数据 if graph node getNodeName equals graph 这个IF判断的用处是通过判断xml数据段的初始名称是否为 graph 如果是则决定执行 下面的操作 getNodeName 方法是用来程序读取XML数据段节点名称的操作 Element graph elem Element graph node 定义一个Element元素变量 并将graph node变量类型强行转化为Element类型 NodeList list graph elem getChildNodes 定义一个NodeList变量list 并将前面定义的graph elem里面的子元素提取出来 for int i 0 i list getLength i 这个FOR循环把前面获得xml流程图的LIST数据列表的长度作为循环控制条件 循环体内 部是读取XML流程节点和连接线数据的操作函数 读取这些数据并同步写入数据库的表中 注意 这个for循环和前面另外一个for循环共同发挥作用 一起来做这个XML数据提取工 作 因为XML数据结构是嵌套的 因此需要两个FOR循环来一起使用 if node getAttributes null if type equals node Node edgeid node getAttributes getNamedItem id String id edgeid getNodeValue 这两个嵌套的if判断语句是用来过滤需要提取的XML数据的标志头的 第一个if判断语 句是过滤空数据的操作 就是属性和名称都为空null的数据就不进入下一步的提取操作 而非空的数据则需要进行tostring 字符串转换操作并转化为小写lowerCase 第二个if语句是判断type数据名称是否为node 节点 如果数据段标志为node 则我们就 可以对这个XML数据段中包含的数据进行提取 这里主要提取两个标志中的数据 一个是 节点的id 一个是连接边edge的id 并在下面的wis into node 方法中把这两个关 键id值写入到数据库的表结构中去 wis into node getLabel node id gid getcondition node 这句代码是这个类中所有代码的一个核心语句 意义就是把提取出来的XML文件中的流程 图节点的id和节点包含的条件控制参数数据一起写入数据库中 当然这个方法是引用另外 一个类GxlToDatabase中的操作 该操作实际上是一个SQL操作 具体的代码如下 insert into step main step name graph id step id cond values step name gid step id condition Insert语句中使用的数据库表名称 step main是JWFD数据结构的节点主表 其表结构 的详细说明请参考文档 JWFDv0 96 开源工作流引擎设计 数据库结构说明 doc 这个语句中的insert插入操作仅仅涉及step main表中的step name 节点名称 字段 graph id 流程图id 字段 step id 节点id 字段 cond 节点嵌入条件控制参数 字段 而这些字段中的具体数据就是用前面所描述的那些JAVA语句从XML数据文件中提取 出来的 所以按照insert操作的顺序我们可以了解 getLabel node 是取节点名称的操 作 id是流程节点的id gid是流程图的id getcondition node 是取节点嵌入的条件 控制参数的操作 这样的说明是否让大家对本语句所执行的操作和涉及到数据结构有比较 清晰的理解了呢 如果还有不清楚地地方 请给我发邮件或者在论坛上面发帖或者加我的 QQ 我会尽量回答大家的问题 接下来的这个IF判断语句是继续前面的工作 不过这次是提取XML中的节点之间的连接线 edge的数据 如果类型为edge 则进行下面的提取操作 if type equals edge String from null String to null String edge null String prop null Node edgeid node getAttributes getNamedItem id Node tmp node getAttributes getNamedItem from Node tmp1 node getAttributes getNamedItem to edge edgeid getNodeValue from tmp getNodeValue to tmp1 getNodeValue 这段代码完成几个工作 前面四行定义四个字符串 from to edge prop 变量 用于存 储接下来要提取的XML文件中的连接线数据 其中from用于存储节点连接线的起始端点 to变量用于存储节点连接线的终止端点 两个节点之间的连接线就是通过起始端点和终止 端点来定义的 另外加上一个Edgeid变量 这个变量作为连接边的唯一标志id 而接下来的代码段中的粗体字所表示的代码就是本程序用于提取xml文档中的数据的操作 函数 这些操作代码来源于JAVA的XML处理模块dom类 大家可以找找专门介绍DOM数据处 理的文章来看看 我在这里就不做详细介绍了 本段最后的三行代码就是利用getNodeValue 函数把XML数据段中的流程图的边 边起 始点 边终止点的具体数据提取出来 并存放在前面定义的字符串变量edge from to中 以便下一步的处理 try wis into edge edge from to gid getcondition node catch Exception ex System out println 创建edge异常 ex 在理解前面一段的代码的意义之后 我们再来看看这段代码 这是一个try catch异常处 理语句包围的功能执行语句 前面我们已经介绍过这种wis类中的一个函数 wis into node 而这里的wis into edge的功能和这个wis into node的功能是对 应的 into node 函数是系统在提取了xml数据段中的节点相关数据之后 往数据库中 写入这些数据的功能代码函数 而into edge 函数却是系统在提取了XML数据段中的节 点连接边的相关数据之后 往数据库中写入这些节点连接边数据的功能代码函数 这个功 能函数其实和前面介绍过的into node 函数一样 是一个SQL语句 具体代码如下 insert into edge control edge id from step to step graph id prop values edgeid from to gid prop 前面介绍过这种类似的SQL操作 这里就再简略介绍下 edge control 是 JWFD流程数据库结构中的一个基础表 这个基础表是系统用于存储 流程图中连接边edge的一张表 其详细的数据结构请参考 JWFDv0 96 开源工作流引擎 设计 数据库结构说明 doc 向edge control数据表中写入的数据参数分别如下 Edge id 两个节点间连接线段的唯一标识id From step 连接线段的起始节点id To step 连接线段的终止节点id Graph id 该连接线段所在的流程图的id Prop 该连接线所包含的嵌入式参数 未使用 这里通过getcondition node 函数来获得这个参数 实际上并未使用 这个参数是节点的嵌入数据 而不是连接边的嵌 入数据 所有这些参数都已经通过前面的XML数据提取操作保存在本类定义的字符串变量中了 这 个sql操作就用这些字符串变量作为写入数据库中的实际数据变量 到这里为止 系统提取XML数据的功能代码 和写入数据库的操作代码 就基本介绍完了 这个类的剩下的函数的代码 都是同一结构的函数 其主要功能是提取xml数据段中的详 细参数 比如说getlabel是提取xml数据段中的节点的名称 注意是名称而不是id 而 getcondition是提取节点中嵌入的条件表达式参数 getBound是提取节点在整个流程 图的二维坐标的数据 这些功能代码的结构均来自jgraph的一个子项目 jgraphpad的代 码包中 我仅仅是做了下修改 具体的代码结构我就不做详细的介绍了 protected String getcondition Nod
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 沙石购买协议书
- 服装管理协议书
- 更改股东协议书
- 进口无偿贸易合同协议
- 运营合同续签合同协议
- 转包工合同协议
- 足疗合作分红合同协议
- 运损豪车专卖合同协议
- 2024年嘉兴市卫生健康委员会直属单位招聘考试真题
- 路面机械转让合同协议
- 2022-2023学年部编版必修下册 第19课资本主义国家的新变化 课件(32张)
- GB/T 17737.4-2013同轴通信电缆第4部分:漏泄电缆分规范
- GB/T 17620-2008带电作业用绝缘硬梯
- 档案管理学(本科)(全)课件
- 学校国家义务教育质量监测应急预案(三页)
- 领取门诊使用免费基本药品治疗严重精神障碍患者知情同意书
- 吉林市富源石材有限公司三佳子饰面花岗岩及周边矿区矿山地质环境保护与土地复垦方案
- 2022年上海奉贤经济发展有限公司招聘笔试题库及答案解析
- 新教材人教版高中数学必修第二册全册教案(教学设计)
- DB23∕T 440-1996 柞蚕生产技术规程
- 药物溶解与溶出及释放-精品医学课件
评论
0/150
提交评论