1个答案 按时间排序 按投票排序
-
总体过程:读取XML文件->从文件中提取所有Node,Task,Transition等并设置到对应的Domain Object中->持久化到数据库
详细过程(代码):ProcessDefinition解析流程定义文件相关方法 public static ProcessDefinition parseXmlString(String xml); public static ProcessDefinition parseXmlInputStream(InputStream inputStream); public static ProcessDefinition parseXmlReader(Reader reader); .......................................... ..........................................
以上所有方法其实最终都会转化为对JpdlXmlReader对象的readProcessDefinition方法的调用,readProcessDefinition()方法具体实现 // 创建一个新的流程定义对象 processDefinition = ProcessDefinition.createNewProcessDefinition(); // 初始化包含的各种列表 problems = new ArrayList(); unresolvedTransitionDestinations = new ArrayList(); unresolvedActionReferences = new ArrayList(); try { //把流程定义文档读到内存DOM树中 Document document = JpdlParser.parse(inputSource, this); Element root = document.getRootElement(); // 读取流程名称 parseProcessDefinitionAttributes(root); // 读取流程描述 String description = root.elementTextTrim("description"); if (description!=null) { processDefinition.setDescription(description); } // 一次加工:读取流程中各种信息 readSwimlanes(root);//读取所有泳道 readActions(root, null, null);//读取所有Action readNodes(root, processDefinition);//读取所有node readEvents(root, processDefinition);//读取所有event readExceptionHandlers(root, processDefinition);//读取所有异常处理器 readTasks(root, null);//读取所有任务 // 二次加工:处理各种Transition和Action的引用 resolveTransitionDestinations(); resolveActionReferences(); verifySwimlaneAssignments();//确认泳道的分配策略 } catch (Exception e) { log.error("couldn't parse process definition", e); addProblem(new Problem(Problem.LEVEL_ERROR, "couldn't parse process definition", e)); } if (Problem.containsProblemsOfLevel(problems, Problem.LEVEL_ERROR)) { throw new JpdlException(problems); } if (problems!=null) { Iterator iter = problems.iterator(); while (iter.hasNext()) { Problem problem = (Problem) iter.next(); log.warn("process parse warning: "+problem.getDescription()); } } return processDefinition;//返回processDefinition对象,已经完全把xml中定义的流程转化为java中的对象,xml中的各种tag都已经转换为JBPM中的相关图形对象POJO并包含在ProcessDefinition的所包含的各种列表中
如果还不能理解请自己去读JBPM的源代码吧
2008年7月22日 17:07
相关推荐
"JBPM工作流实战_流程定义文件的上传处理视频 03"这一主题主要关注如何在实际操作中处理JBPM流程定义文件的上传,这在构建业务流程自动化系统时是非常关键的步骤。 首先,流程定义文件是JBPM工作流的核心组成部分,...
总结,jbpm请假流程定义发布项目是一个实用的学习和实践案例,涵盖了jbpm的基本使用、数据库集成、流程定义以及流程的监控与管理。通过对该项目的研究,开发者不仅可以了解jbpm的工作原理,还能掌握如何在实际环境中...
jbpm使用关系型数据库来存储其运行时数据,如流程定义、流程实例、任务、变量等。通常,jbpm会创建一系列的数据库表来支持其功能。这些表包括但不限于: - `ACT_RU_EXECUTION`:记录流程实例的状态和执行信息。 -...
jbpm工作流引擎负责解析流程定义文件(.bpmn或.jbpm),并根据流程逻辑执行任务。 2. **流程定义**:报销流程的定义通常通过Business Process Model and Notation (BPMN) 2.0标准进行,这是一种图形化表示业务流程...
总结来说,jbpm是一个强大的工作流管理工具,它提供了图形化的流程定义、灵活的数据库支持和API接口。尽管在应对某些特定的中国业务场景时可能需要额外的定制,但通过对其特性和机制的深入理解,开发者可以有效利用...
1. **流程定义**:jbpm使用BPMN(Business Process Model and Notation)标准来定义流程。BPMN是一种图形化的建模语言,通过泳道、任务、事件和网关等元素,直观地描绘出业务流程的各个步骤和逻辑。 2. **工作流...
jbpm数据库数据是jbpm系统运行过程中产生的各种数据,包括流程定义、任务实例、变量、事件等,这些数据对于系统的正常运行至关重要。 在jbpm中,流程定义(Process Definition)是描述业务流程的蓝图,它定义了流程...
5. **workflow**:这是一个目录,很可能包含了流程定义文件(.bpmn2或.xml格式),这些文件描述了业务流程的逻辑和步骤。流程定义文件使用BPMN(Business Process Model and Notation)标准,它是业务流程建模的常用...
文档《JBPM流程引擎资料》详细介绍了如何利用JBPM开发流程应用,涵盖了从框架构造到节点处理的方方面面。 首先,文档提到了jBPM的基本概念。jBPM是一个轻量级流程引擎,它允许开发者以模块化的方式管理业务流程。...
在JBPM系统中,数据库扮演着至关重要的角色,存储了流程的配置信息以及运行时的状态数据。以下是对JBPM数据库表的详细说明: ### 1. 流程配置类数据库表 #### 1.1 JBPM_PROCESSDEFINITION 这个表存储了流程模板的...
在JBPM 3.2.3 版本中,数据库设计是整个系统的核心部分,用于存储流程定义、运行时流程实例以及与流程相关的各种数据。下面将详细介绍这些关键数据库表的功能和作用。 ### 1. 流程配置类数据库表 #### 1.1 JBPM_...
11. **JBPM4_LOB**:存储表,用于存储大对象数据,如流程图的图像文件或XML流程定义文件。 12. **JBPM4_PARTICIPATION**:参与者表,定义了流程参与者及其角色,如Candidate、Client、Owner等。 13. **JBPM4_...
在JBPM中,所有的流程实例、任务、变量等信息都需要存储在数据库中。因此,在使用JBPM之前,需要先创建一个专门用于存储这些数据的数据库。这一步骤对于确保JBPM的正常运行至关重要。通常情况下,可以使用多种类型的...
流程定义是静态的,而流程实例则是动态的,它们代表了流程定义在实际运行中的具体执行。当启动一个流程实例时,jBPM会根据流程定义创建实例,并进行状态跟踪。流程实例的生命周期包括启动、执行、暂停、恢复和终止等...
文件列表中的"jbpm"很可能包含了流程定义文件(如BPMN2 XML)、数据库脚本、配置文件以及可能的示例代码或文档。通过解压文件并按照指导进行配置,你将能够亲自体验和学习如何利用JBPM构建和运行一个完整的报销流程...
3. **SQL脚本**:用于创建和初始化数据库表的SQL文件,这是JBPM4运行的基础,因为流程实例、任务和其他元数据需要存储在数据库中。 4. **测试用例**:可能包含测试流程执行和审批逻辑的JUnit或其他测试框架的测试类...
在Jbpm项目中,它可能包括编译流程定义文件(.bpmn或.xml)、部署流程实例以及运行测试的命令。 `test`目录通常包含单元测试和集成测试代码,这些测试确保流程的各个部分按照预期工作。在Jbpm中,可能会使用JUnit或...
2. `RepositoryService`:用于管理和操作流程定义,如部署流程定义文件、查询已部署的流程定义等。 3. `RuntimeService`:处理流程实例的生命周期,如启动新实例、信号触发、挂起或激活实例。 4. `TaskService`:...
JBPM的数据库表结构设计得相当全面和细致,涵盖了从流程定义到执行过程中的各个方面。通过对这些表结构的理解,不仅可以帮助开发者更好地了解JBPM的工作原理,还能在实际项目开发中更高效地进行流程设计和优化。此外...