流程定义文件
test.xml:
<?xml version="1.0" encoding="UTF-8"?>
<process-definition name="新流程">
<start-state name="开始">
<transition name="找王八" to="王八审批"></transition>
</start-state>
<task-node name="王八审批">
<task name="审1">
<assignment actor-id="王八"/>
</task>
<transition name="找赵明" to="赵明审批"></transition>
</task-node>
<task-node name="赵明审批">
<task name="审2">
<assignment actor-id="赵明"/>
</task>
<transition name="找总经理" to="总经理审批"></transition>
</task-node>
<task-node name="总经理审批">
<task name="审3">
<assignment actor-id="总经理"/>
</task>
<transition name="批完" to="结束"></transition>
</task-node>
<end-state name="结束"></end-state>
</process-definition>
使用:
//创建数据库
JbpmConfiguration.getInstance().createSchema();
//读取流程定义文件,创建processdefinition对象
ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource("test.xml");
//context对象类似于hibernate session对象的功能
//创建jbpmContext对象
JbpmContext context = jbpmConfiguration.createJbpmContext();
try{
//部署流程到数据库
context.deployProcessDefinition(processDefinition);
}finally{
//context对象需要关闭
context.close();
}
创建文档:
Session session = HibernateUtils.getSession();
try{
session.beginTransaction();
Document doc = new Document();
doc.setTitle("测试gjs");
doc.setContent("测试gjs的内容");
doc.setCreator("gjs");
session.save(doc);
session.getTransaction().commit();
}catch(Exception e){
session.getTransaction().rollback();
}finally{
HibernateUtils.closeSession(session);
}
绑定流程与文档
JbpmContext context = jbpmConfiguration.createJbpmContext();
context.setSessionFactory(HibernateUtils.getSessionFactory());
//从数据库中加载ProcessDefinition对象
ProcessDefinition definition = context.getGraphSession().findLatestProcessDefinition("新流程");//流程文件根元素name值
//从流程中创建一个流程实例
ProcessInstance processInstance = new ProcessInstance(definition);
//存储流程实例
context.save(processInstance);
//加载公文
Document doc = (Document)context.getSession().load(Document.class, 1);
//绑定流程实例到公文
doc.setProcessIntanceId(processInstance.getId());
//绑定公文到流程实例(ContextInstance相当于一个变量的容器)
processInstance.getContextInstance().createVariable("document", doc.getId());
context.close();
使流程到下一步:
JbpmContext context = jbpmConfiguration.createJbpmContext();
context.setSessionFactory(HibernateUtils.getSessionFactory());
Document doc = (Document)context.getSession().load(Document.class, 1);
ProcessInstance processInstance = context.getProcessInstance(doc.getProcessIntanceId());
//触发流程实例走向下一步
processInstance.getRootToken().signal();
context.close();
获取当前结点:
JbpmContext context = jbpmConfiguration.createJbpmContext();
context.setSessionFactory(HibernateUtils.getSessionFactory());
Document doc = (Document)context.getSession().load(Document.class, 1);
ProcessInstance processInstance = context.getProcessInstance(doc.getProcessIntanceId());
//当前节点?
System.err.println(processInstance.getRootToken().getNode().getName());
context.close();
查询特定对象拥有的文档:
JbpmContext context = jbpmConfiguration.createJbpmContext();
context.setSessionFactory(HibernateUtils.getSessionFactory());
List tasks = context.getTaskMgmtSession().findTaskInstances("王八");
System.err.println("王八的文档有:");
for (Iterator iter = tasks.iterator(); iter.hasNext();) {
TaskInstance taskInstance = (TaskInstance) iter.next();
Integer docId = (Integer)taskInstance.getProcessInstance().getContextInstance().getVariable("document");
System.err.println(docId);
}
context.close();
审批提交所有:
JbpmContext context = jbpmConfiguration.createJbpmContext();
context.setSessionFactory(HibernateUtils.getSessionFactory());
List tasks = context.getTaskMgmtSession().findTaskInstances("总经理");
System.err.println("总经理的文档有:");
for (Iterator iter = tasks.iterator(); iter.hasNext();) {
TaskInstance taskInstance = (TaskInstance) iter.next();
Integer docId = (Integer)taskInstance.getProcessInstance().getContextInstance().getVariable("document");
System.err.println(docId);
}
//依次对张三的公文进行提交
for (Iterator iter = tasks.iterator(); iter.hasNext();) {
TaskInstance taskInstance = (TaskInstance) iter.next();
//张三已经审批结束,继续提交,这将触发流程继续向下流动!
taskInstance.end();
Integer docId = (Integer)taskInstance.getProcessInstance().getContextInstance().getVariable("document");
System.err.println(docId+"已被审批完成");
}
context.close();
}
测试流程是否结果:
JbpmContext context = jbpmConfiguration.createJbpmContext();
context.setSessionFactory(HibernateUtils.getSessionFactory());
Document doc = (Document)context.getSession().load(Document.class, 1);
ProcessInstance processInstance = context.getProcessInstance(doc.getProcessIntanceId());
System.err.println("流程已结束? - "+processInstance.hasEnded());
context.close();
分享到:
相关推荐
**jbpm简介** jbpm(Java Business ...总之,"jbpm使用简单示例"是一个很好的学习资源,通过它,开发者不仅可以了解jbpm的基本操作,还能掌握如何在实际项目中运用流程管理技术,提升业务系统的灵活性和可维护性。
《jbpm使用和说明文档》是针对业务流程管理(BPM)系统jbpm的一份详细指南,旨在帮助用户从基础入门到熟练掌握该工具。jbpm是一个开源的工作流管理系统,它允许开发者通过图形化的方式设计、执行和管理业务流程。 ...
这个“jbpm使用手册”显然是一份宝贵的资源,对于想要深入了解和应用工作流流程的人来说非常有帮助。 首先,手册可能涵盖了jbpm的基本概念,如流程定义、任务管理和工作流实例。流程定义通常使用Business Process ...
1. **spring-modules-jbpm31.jar**:这是Spring与JBPM集成的一个模块,包含Spring对JBPM的封装和扩展,使得可以在Spring环境中方便地使用JBPM的功能。 2. **项目源代码(全,不含jar包).rar**:这可能是一个完整的...
在实践中,开发者可以使用JBPM提供的API来实现上述步骤。例如,加载流程定义到内存、文件或数据库,启动流程实例,处理任务实例,以及对流程实例进行监控和管理。通过这些步骤,开发者可以构建出符合业务需求的动态...
**jBPM 4 使用手记** jBPM(Java Business Process Management)是一个开源的工作流管理系统,它提供了全面的业务流程管理和工作流解决方案。在jBPM 4这个版本中,开发者可以利用其强大的功能来设计、执行和管理...
Hibernate是JBPM使用的ORM(对象关系映射)框架,用于处理数据库操作。`jbpm.hibernate.cfg.xml`是Hibernate的配置文件,它定义了数据源、数据库连接信息(URL、用户名、密码)、事务管理策略、缓存设置以及实体类...
- **工作流模型**:jbpm使用JPDL(jBPM Process Definition Language)来定义工作流程。JPDL是一种基于XML的语言,用于描述任务的顺序、分支、循环等逻辑。 - **流程实例**:每个运行中的流程都称为一个实例,它...
jPDL(jBPM Process Definition Language)是jbpm使用的一种基于XML的语言,用于描述业务流程。它提供了一系列的元素和指令,让开发者能够清晰地定义流程的各个阶段、任务分配、决策逻辑以及流程间的交互。在jBPM-...
此外,jbpm使用Hibernate作为默认的ORM框架,因此熟悉Hibernate的使用也是很重要的。 jbpm的部署涉及到流程定义的打包和安装。通常,流程定义以.bpmn或.xml文件的形式存在,可以通过jbpm提供的工具或API进行部署。...
3. **持久化**:jbpm使用JPA(Java Persistence API)进行持久化,可以将流程实例和相关数据存储在数据库中,确保数据的可靠性和可恢复性。 4. **规则集成**:jbpm集成了Drools规则引擎,允许在流程中嵌入复杂的...
3. **持久化**:jbpm使用JPA(Java Persistence API)进行数据持久化,可以将流程实例、任务和变量等信息存储在数据库中,便于后续查询和管理。 4. **集成能力**:jbpm可与Java EE、Spring等框架无缝集成,也可以与...
6. **持久化与事务管理**:jbpm使用Hibernate作为持久化框架,确保流程实例和相关数据能够正确存储和恢复。同时,jbpm支持JTA事务管理,保证了流程的完整性和一致性。 7. **监控与审计**:jbpm提供流程实例的监控和...
jbpm使用JPA(Java Persistence API)进行数据持久化,确保流程实例和相关数据在系统重启后能够恢复。这部分内容会讲解如何配置数据库连接和管理流程实例的数据。 7. **监控与报表** 为了更好地管理和优化业务...
1. 过程定义(Process Definition):jbpm使用 BPMN 2.0(Business Process Model and Notation)标准来定义流程,这是一种图形化的表示方式,使得非技术人员也能理解流程逻辑。 2. 任务(Task):在流程中,每个...
1. **流程建模**:JBPM使用BPMN 2.0(Business Process Model and Notation)标准,这是一种图形化表示业务流程的方法,允许开发者用直观的图表来设计流程。BPMN符号丰富,涵盖了各种流程控制结构,如任务、事件、...
1. **流程定义**: jbpm使用Business Process Definition Language (BPMN 2.0)来定义业务流程。BPMN是一种图形化语言,用于描述业务流程的逻辑,包括任务、网关、事件等元素。 2. **工作流引擎**: jbpm的核心是工作...
3. **持久化机制**:jbpm使用Hibernate作为默认的持久化框架,确保流程实例和相关数据在数据库中的存储和恢复。 4. **规则集成**:jbpm与Drools规则引擎紧密集成,允许在流程中嵌入决策逻辑,使流程更灵活。 5. **...
jbpm使用案例,非常不错,大家都来看看吧。