下面是一个赛跑的小流程。这里我已经把流程持久化到数据库中。
为什么第一种方法不行呢?
代码如下:
类都实现ActionHandler接口:
方法都类似RunAction类。如下:
RunAction: public void execute(ExecutionContext executionContext) throws Exception {System.out.println("开始了...");}
MatchAction:{System.out.println("比赛中...");
PauseAction:System.out.println("受伤了...");
EndAction:System.out.println("比赛结束!");
Test1类:
ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource("E:\\workspace\\articleaudit\\WebRoot\\WEB-INF\\test1\\processdefinition.xml");
ProcessInstance ProcessInstance = new ProcessInstance(processDefinition);
Token token = ProcessInstance.getRootToken();
System.out.println(token.getNode().getName());
token.signal("tr1");
System.out.println(token.getNode().getName());
token.signal();
System.out.println(token.getNode().getName());
程序运行到第1句就异常了,下面是所有异常信息:
16:32:21,093 INFO JbpmConfiguration:277 - using jbpm configuration resource 'jbpm.cfg.xml'
16:32:21,453 ERROR JpdlXmlReader:158 - couldn't parse process definition
org.dom4j.DocumentException: null Nested exception: null
at org.dom4j.io.SAXReader.read(SAXReader.java:484)
at org.jbpm.jpdl.xml.JpdlParser.parse(JpdlParser.java:57)
at org.jbpm.jpdl.xml.JpdlXmlReader.readProcessDefinition(JpdlXmlReader.java:138)
at org.jbpm.graph.def.ProcessDefinition.parseXmlInputStream(ProcessDefinition.java:172)
at org.jbpm.graph.def.ProcessDefinition.parseXmlResource(ProcessDefinition.java:153)
at test1.struts.Test1.main(Test1.java:11)
Nested exception:
java.net.MalformedURLException
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.dom4j.io.SAXReader.read(SAXReader.java:465)
at org.jbpm.jpdl.xml.JpdlParser.parse(JpdlParser.java:57)
at org.jbpm.jpdl.xml.JpdlXmlReader.readProcessDefinition(JpdlXmlReader.java:138)
at org.jbpm.graph.def.ProcessDefinition.parseXmlInputStream(ProcessDefinition.java:172)
at org.jbpm.graph.def.ProcessDefinition.parseXmlResource(ProcessDefinition.java:153)
at test1.struts.Test1.main(Test1.java:11)
Exception in thread "main" org.jbpm.jpdl.JpdlException: [[ERROR] couldn't parse process definition]
at org.jbpm.jpdl.xml.JpdlXmlReader.readProcessDefinition(JpdlXmlReader.java:163)
at org.jbpm.graph.def.ProcessDefinition.parseXmlInputStream(ProcessDefinition.java:172)
at org.jbpm.graph.def.ProcessDefinition.parseXmlResource(ProcessDefinition.java:153)
at test1.struts.Test1.main(Test1.java:11)
****************************************************************
但当我把第一句改为直接写的方式:
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString("" +
"<process-definition xmlns='urn:jbpm.org:jpdl-3.1' name='test1'>" +
"<start-state name=\"开始\">" +
"<event type=\"node-leave\">" +
"<action name=\"action1\"></action></event>" +
"<transition name=\"tr1\" to=\"赛跑中\"></transition>" +
"<transition name=\"tr2\" to=\"受伤中\"></transition>" +
"</start-state>" +
"<state name=\"赛跑中\">" +
"<event type=\"node-enter\">" +
"<action name=\"赛跑\" class=\"test1.struts.MatchAction\"></action>" +
"</event>" +
"<transition name=\"结束\" to=\"比赛结束\"></transition></state>" +
"<state name=\"受伤中\">" +
"<event type=\"node-enter\">" +
"<action name=\"受伤\" class=\"test1.struts.PauseAction\"></action>" +
"</event>" +
"<transition name=\"结束\" to=\"比赛结束\"></transition></state>" +
"<end-state name=\"比赛结束\">" +
"<event type=\"node-enter\">" +
" <action name=\"结束\" class=\"test1.struts.EndAction\"></action></event>" +
"</end-state>" +
"</process-definition>");
正常输出:
开始
比赛中...
赛跑中
比赛结束!
比赛结束
为什么前一方式不行呢?
帮助文档上就这么一句:
引用
15.2.2. 解析xml文件
其他情况, 你可能想手写 processdefinition.xml 文件然后打包进zip文件通过ant script.这钟情况下你可以选择 JpdlXmlReader
...
static ProcessDefinition auctionProcess =
ProcessDefinition.parseXmlResource("org/jbpm/tdd/auction.xml");
...
分享到:
相关推荐
2. **部署流程**:将流程定义文件(.bpmn或.bpmn2)部署到JBPM服务器,使其可以被执行。 3. **启动流程**:创建一个流程实例,传入必要的输入参数,例如员工ID和请假天数。 4. **任务处理**:模拟员工提交请假申请后...
在JBPM 3.2.3 版本中,数据库设计是整个系统的核心部分,用于存储流程定义、运行时流程实例以及与流程相关的各种数据。下面将详细介绍这些关键数据库表的功能和作用。 ### 1. 流程配置类数据库表 #### 1.1 JBPM_...
流程定义解析器则用于读取并解析流程定义文件,将其转化为可执行的结构。 其次,Web控制台是jbpm的可视化界面,提供了流程设计、部署、监控和管理等功能。开发者和管理员可以通过Web界面进行流程模型的创建和修改,...
4. **流程实例的启动**:详述如何通过API或用户界面启动一个新的流程实例,并解释流程实例与流程定义的关系。 5. **工作项管理**:讨论如何处理流程中的工作项(tasks),包括分配、完成和跟踪。 6. **变量和数据...
同时,jbpm 4支持基于图形化建模工具(如Eclipse BPMN2插件)进行流程模型的设计,使得流程定义更直观,便于理解和维护。 提供的jbpm-pvm-1.0.beta1可能是一个早期版本的jbpm PVm模块,包含了相关的库文件、API文档...
3. **流程定义的加载**:在Spring中,可以使用`ProcessDefinitionBean`来加载流程定义,这个bean会读取流程模型文件(如`.bpmn`或`.bpmn20.xml`),并将它们注册到流程引擎中。 4. **服务接口与实现**:Jbpm提供了...
3. **配置ProcessEngine和RepositoryService**:Spring容器可以创建并管理ProcessEngine实例,同时通过ProcessEngine获取RepositoryService,用于读取和管理流程定义。 4. **配置其他Service**:除了...
流程引擎负责执行流程实例,根据流程定义(BPMN模型)驱动流程的流转。任务服务处理用户任务,而事件服务则支持流程中的事件处理。深入理解jbpm原理,能够帮助开发者构建灵活、可扩展的业务流程应用。 以上知识点...
`processdefinition.xml`文件是`jbpm`流程定义的重要组成部分,它包含了流程的所有元数据,包括`task`的定义、流程步骤、变量、事件和规则等。这个XML文件可以被`jbpm`引擎读取并执行,实现流程实例的自动化运行。...
Kie Repository负责存储流程定义文件,而Kie Container则用于加载这些定义,并创建相应的流程实例。 4. **User Tasks**:在流程定义中,可以设置用户任务(User Task),这些任务通常需要人工参与完成。用户任务的...
- default.query.hbm.xml:命名查询的定义文件。 **功能详解** 1. **创建请假条**:用户需输入请假天数和原因,系统会自动验证数据并显示当前有效的审批人(经理和老板)。 2. **送审**:数据无误后,系统会跳转到...
虽然这里没有提供流程定义文件,但可以假设项目中包含了一个或多个流程定义,这些定义被工作流引擎读取并用于实例化流程。 5. **用户接口**:在JSP页面中,用户可以看到自己的待办任务,可以提交审批意见,触发工作...
3. 流程定义与执行:在JFlow中,流程定义存储在XML文件中,这些文件描述了流程的结构和逻辑。当流程启动时,引擎会读取这些定义并根据它们来执行流程实例。引擎可以处理并发任务,分支和合并,以及异常处理,确保...
这通常通过流程定义语言(如BPMN - Business Process Model and Notation)来完成,它提供了一套图形化的符号和元素来描绘流程。在Java实现中,这可能涉及到读取BPMN文件并将其转换为引擎可理解的数据结构。 然后,...
这个项目可能涉及了Java的核心特性,如面向对象编程、集合框架、异常处理等,也可能运用了Java的I/O流来处理文件,例如读取和存储图书数据。 【描述】"精简图书"描述的可能是该系统追求的目标。在实际应用中,"精简...
压缩包中的文件“jbpm.sql”可能包含的是一个与工作流引擎JBoss jBPM相关的数据库脚本,jBPM是一个开源的业务流程管理系统,它使用PL/SQL来定义和执行工作流程。这个脚本可能涉及创建表、存储过程、触发器等数据库...
9. **JBPM**:JBPM是一个开源的工作流管理系统,用于业务流程管理和工作流自动化。熟悉其基本概念、API和工作流定义语言BPMN 2.0可以帮助开发者构建业务流程驱动的应用。 10. **Nginx**:Nginx是一款高性能的反向...
6. **异常处理**:在集成过程中,需要考虑异常处理机制,比如当规则文件加载失败或者执行规则时遇到错误,应该有适当的错误处理策略。 7. **优化与扩展**:随着业务的发展,可能需要对规则进行动态更新。可以利用...
- **String**:不可变字符串,适用于频繁读取而很少修改的情况。 - **StringBuilder**:可变字符串,线程不安全,效率高于StringBuffer。 - **StringBuffer**:线程安全的可变字符串,适用于多线程环境。 ##### ...
15. **工作流程引擎**:JBPM用于业务流程的建模和执行,实现自动化的工作流管理。 16. **定时任务**:Quartz用于定时任务的调度,例如定期数据备份、清理等。 17. **服务注册中心**:如Eureka、Zookeeper,管理...