JBPM简介

什么是jbpm

JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。

为什么用jbpm

业务分析师和开发人员使用的是同一种语言来交谈,大大降低了开发的风险,如果要开发一个项目,速度也更快了,因为开发人员不用再将用户需求转化成软件设计了。其次,JBPM采用的不是一般的开发工具,而是自己的图形化开发工具,非常方便随时了解和掌握运行的进程。最后,JBPM的流程框架非常灵活,使用起来也非常安全,它经过了安全认证,因此可以保证一些商业机密不被

JBPM所需要的jar包

1.创建表结构

@Test
public void create(){ new org.hibernate.cfg.Configuration().configure("jbpm.hibernate.cfg.xml").buildSessionFactory();
System.out.println("ok"); }

2.创建ProcessEngine对象

    ProcessEngine pro=Configuration.getProcessEngine();

3.部署流程定义

@Test
//部署流程定义
public void getDeploy(){ String re=pro.getRepositoryService()
.createDeployment()
.addResourceFromClasspath("jbpms.jpdl.xml")
.addResourceFromClasspath("jbpms.png").deploy();
System.out.println(re);
}

4. 启动流程实例  通过key,key是process节点中的key,如果不写,默认为name的值

@Test
public void testStart(){
//启动流程实例 通过key,key是process节点中的key,如果不写,默认为name的值
ProcessInstance pi=pro.getExecutionService().startProcessInstanceByKey("jbpms");
System.out.println("start ok!");
System.out.println("id:"+pi.getId()+",状态:"+pi.getState()+",流程定义的ID:"+pi.getProcessDefinitionId());
}

5.查看任务列表

    @Test
public void selectTask(){
//查看任务列表
String user="hh";
String user2="boss";
List<Task> tasks = pro.getTaskService().findPersonalTasks(user);
for (Task task : tasks) {
System.out.println("任务ID:"+task.getId()+"\t任务名称:"+task.getName()+"\t任务的办理人:"+task.getAssignee());
}

6.查询当前任务所在点

    @Test
public void findSelect(){
//查询当前任务所在点
String name=pro.getExecutionService().createProcessInstanceQuery().processInstanceId("jbpms.130001").uniqueResult().findActiveActivityNames().toString();
System.out.println(name);
}

7.办理任务

@Test
public void testCompleteTask(){
pro.getTaskService().completeTask("130002");
System.out.println("ok");
}

流程管理

public class ProcessTest {

    ProcessEngine pro=Configuration.getProcessEngine();

    @Test
public void findAll(){
//查询所有流程定义
List<ProcessDefinition> list=pro.getRepositoryService().createProcessDefinitionQuery().list(); for (ProcessDefinition pd : list) {
System.out.println("id:"+pd.getId()+"\tname:"+pd.getName()+"\tkey:"+pd.getKey()+"\t版本号:"+pd.getVersion()+"\t部署的id:"+pd.getDeploymentId());
} }

查看所有流程定义的信息

@Test

public void findAll(){

List<ProcessDefinition> list = pe.getRepositoryService().createProcessDefinitionQuery().list();

for (ProcessDefinition pd : list) {

/**

 * id的格式  name-版本号

 * name:jbpm.cfg.xml文件中根据点的name属性值

 * key,如果在配置文件中指定了,那么就是根据点中的test的 值,如果不指定默认是name的值

 * version版本号,同一个名称的第一个为1后续的自增

 */

System.out.println("id:"+pd.getId()+"\tname:"+pd.getName()+"\tkey"+pd.getKey()+"\t版本号:"+pd.getVersion()+"\t部署的id:"+pd.getDeploymentId());

}

}

删除指定id流程信息

  @Test
public void deleteByid(){
pe.getRepositoryService().deleteDeploymentCascade("100001");
System.out.println("删除成功");
}

删除指定key的所有流程信息

 @Test
public void deleteByids(){
//01.取出当前key对应的版本信息
List<ProcessDefinition> list = pe.getRepositoryService().createProcessDefinitionQuery().processDefinitionKey("jbpmtest").list();
for (ProcessDefinition pd : list) {
pe.getRepositoryService().deleteDeploymentCascade(pd.getDeploymentId());
}
System.out.println("删除成功");
}

获取流程图

 @Test
public void getImage() throws Exception{
String deploymentId="10001";
String resouceName="jbpmtest.png";
//根据id去查询所有对应的资源名
Set<String> resourceNames = pe.getRepositoryService().getResourceNames(deploymentId);
for(String item: resourceNames){
System.out.println("资源名称:"+item);
}
InputStream in=pe.getRepositoryService().getResourceAsStream(deploymentId, resouceName);
OutputStream os=new FileOutputStream("D:\\1.png");
int a=in.read();
while (a!=-1) {
os.write(a);
a=in.read();
}
in.close();
os.close();
System.out.println("成功");
}

部署zip格式的资源

public void addZipResource(){
InputStream is=this.getClass().getClassLoader().getResourceAsStream("two.zip");
ZipInputStream zs=new ZipInputStream(is);
String id= pe.getRepositoryService().createDeployment().addResourcesFromZipInputStream(zs).deploy();
System.out.println("部署成功:deploymentid:"+id);
}

找到所有最新版本的流程定义

@Test
public void findNewVersionInfo(){
//查询所有
List<ProcessDefinition> list = pe.getRepositoryService().createProcessDefinitionQuery()//
.orderAsc(ProcessDefinitionQuery.PROPERTY_VERSION)
.list();
Map<String,ProcessDefinition> map=new java.util.HashMap<String,ProcessDefinition>();
for (ProcessDefinition item : list) {
map.put(item.getKey(),item);
}
for (ProcessDefinition pd : map.values()) {
System.out.println("id:"+pd.getId()+"\tname:"+pd.getName()+"\tkey"+pd.getKey()+"\t版本号:"+pd.getVersion()+"\t部署的id:"+pd.getDeploymentId());
}
}

设置流程变量

public void setVariable() {
pe.getExecutionService().setVariable("jbpm01.90001", "请假天数", 18);
} @Test
public void getVariable() {
Integer days = (Integer) pe.getExecutionService().getVariable("jbpm01.90001", "请假天数");
System.out.println(days);
}

 

JBPM的更多相关文章

  1. JBPM工作流

    一.开发环境的搭建 1.下载Jbpm4.4 1.1下载地址: https://sourceforge.net/projects/jbpm/files/jBPM%204/jbpm-4.4/ 1.2解压后 ...

  2. jBPM4.4 no jBPM DB schema: no JBPM4_EXECUTION table. Run the create.jbpm.schema target first in the install tool.

    jBPM4.4 no jBPM DB schema: no JBPM4_EXECUTION table. Run the create.jbpm.schema target first in the ...

  3. 纵观jBPM:从jBPM3到jBPM5以及Activiti5

    http://www.infoq.com/cn/articles/rh-jbpm5-activiti5/ 作者 荣浩 发布于 2010年12月28日 | 注意:GTLC全球技术领导力峰会,500+CT ...

  4. 【Java EE 学习 67 下】【OA项目练习】【SSH整合JBPM工作流】【JBPM项目实战】

    一.SSH整合JBPM JBPM基础见http://www.cnblogs.com/kuangdaoyizhimei/p/4981551.html 现在将要实现SSH和JBPM的整合. 1.添加jar ...

  5. 【Java EE 学习 67 上】【OA项目练习】【JBPM工作流的使用】

    OA项目中有极大可能性使用到JBPM框架解决流程控制问题,比如请假流程.报销流程等等. JBPM:JBoss Business Process Management,翻译过来就是业务流程管理.实际上就 ...

  6. Eclipse JEE 安装JBPM 4.4 GPD

    回顾往昔,发现自己好久没写博客了,想想以前自己是多么热衷于写博客分享,虽然分享的都是比较基础的东西,但每每看到访问量不断增加的时候内心还是爽爽的. 时间过的真的很快,离开学校和团队已经一个月了.来到了 ...

  7. jbpm的学习 出处http://blog.csdn.net/hxirui/article/details/1221911

    jbpm入门例子 分类: opensourse2006-09-14 11:30 37308人阅读 评论(22) 收藏 举报 jbpmhibernate数据库oraclemysqltransition ...

  8. Eclipse的link方式安装JBPM6插件(JBPM学习之一)

    1. 首先下载最新的JAVA开发最受欢迎的Eclipse IDE工具,下载地址:http://www.eclipse.org/downloads/ 2. 然后去JBPM社区去下载最新的JBPM6,下载 ...

  9. 第六节 JBPM版本控制以及Token对象

    1.JBPM版本 2.Token 3.流程上下文

随机推荐

  1. Git 子模块 - submodule

    有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你 独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想在 一个项目中使用另 ...

  2. Laravel Composer and ServiceProvider

    Composer and: 创建自定义类库时,按命名空间把文件夹结构组织好 composer.json>autoload>classmap>psr-4 composer dump-a ...

  3. [版本控制之道] Git 常用的命令总结(欢迎收藏备用)

    坚持每天学习,坚持每天复习,技术永远学不完,自己永远要前进 总结日常开发生产中常用的Git版本控制命令 ------------------------------main-------------- ...

  4. 【开源毕设】一款精美的家校互动APP分享——爱吖校推 [你关注的,我们才推](持续开源更新3)附高效动态压缩Bitmap

    一.写在前面 爱吖校推如同它的名字一样,是一款校园类信息推送交流平台,这么多的家校互动类软件,你选择了我,这是我的幸运.从第一次在博客园上写博客到现在,我一次一次地提高博文的质量和代码的可读性,都是为 ...

  5. ReactiveCocoa代码实践之-UI组件的RAC信号操作

    上一节是自己对网络层的一些重构,本节是自己一些代码小实践做出的一些demo程序,基本涵盖大多数UI控件操作. 一.用UISlider实现调色板 假设我们现在做一个demo,上面有一个View用来展示颜 ...

  6. 使用Hudson搭建自动构建服务器

    环境: ubuntu1404_x64 说明: 使用hudson和git搭建自动构建服务器的简单示例 安装hudson及相关插件 安装hudson 安装命令如下: sudo sh -c "ec ...

  7. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  8. Windows 上安装 Jekyll.

    Jekyll是一个静态网站生成工具.它允许用户使用HTML.Markdown或Textile来建立静态页面,然后通过模板引擎Liquid(Liquid Templating Engine)来运行. 原 ...

  9. 虚拟机体验之 KVM 篇

    在上一篇中,我展示了虚拟机软件 QEMU 的使用.效果及其性能,同时也分析了不同用户对虚拟机的不同追求.但是不管是桌面用户还是企业级用户,对虚拟机软件的追求有一点是共同的,那就是性能.QEMU 是一个 ...

  10. 在 Ubuntu 15.04 中使用 ubuntu-make、Eclipse 4.4、Java 8 以及 WTP

    Ubuntu 今天发布新版本了 其实昨天(2015-04-23)我就看到了 Ubuntu 发布新版本的新闻,下班后回家的第一件事就是访问 Ubuntu 的官网,很可惜,没有提供下载.今天(2015-0 ...