工作流jbpm4的学习笔记4

来源:互联网 发布:开淘宝充值店赚钱吗 编辑:程序博客网 时间:2024/04/29 23:33

4.把流程部署到服务器上

 部署包含的文件:

 1.定义流程的jPDL文件

 2.根据图形化流程定义同步生成的流程图片文件(PNG)格式

 3.业务流程中用于人机交互的表单页面文件

 4.事件监听器等用户自定义代码的Java类文件

 4.其他流程资源文件

如何部署:jBPM4支持将流程定义及其相关资源打包成Jar格式的文件部署到服务器上,然后流程敌营就可以被执行了。这个归档文件就是"业务流程归档"。

4.1部署流程定义和资源文件

  如何将流程定义和流程先关资源部署到jBPM数据库中?

jBPM工作流引擎提供了一个基于ant任务的API来部署业务流程归档org.jbpm.pvm.internal.ant.JbpmDeployTask。

  JbpmDeployTask不仅可以部署单个业务流程归档,也可以部署一组业务流程归档到服务器上。还可以通过提取jbpm.cfg.xml中的JDBC数据连接信息直接将业务流程部署到数据库上。

创建和部署业务流程归档的例子在jbpm发布包example目录下的building.xml,任务名为create.and.deploy.examplies.

第一步:需要声明一个path任务来指定包含JbpmDeployTask的jbpm.jar及其包含的库。
<target name="jbpm.libs.path">

<path id="jbpm.libs.incl.dependencies">

<pathelement location="${jbpm.home}/examples/target/classes" />

<fileset dir="${jbpm.home}">

<include name="jbpm.jar" />

</fileset>

<fileset dir="${jbpm.home}/lib" />

</path>

</target>

 

第二步,需要创建一个业务流程归档,可以使用ant的jar任务,下面我们创建为examples.jar的业务流程归档

<target name="create.and.deploy.examples" 

      depends="jbpm.libs.path, examples.jar">

<mkdir dir="${jbpm.home}/examples/target" />

<copy file="${jbpm.home}/install/src/cfg/hibernate/jdbc/${database}.hibernate.cfg.xml"

    tofile="${jbpm.home}/examples/target/classes/jbpm.hibernate.cfg.xml" 

      overwrite="true">

<filterset filtersfile="${jbpm.home}/install/jdbc/${database}.properties" />

</copy>

<jar destfile="${jbpm.home}/examples/target/examples.bar">

<fileset dir="${jbpm.home}/examples/src">

<exclude name="jbpm.cfg.xml" />

<exclude name="jbpm.hibernate.cfg.xml" />

<exclude name="jbpm.mail.properties" />

<exclude name="jbpm.mail.templates.examples.xml" />

<exclude name="logging.properties" />

<exclude name="org/jbpm/examples/task/swimlane/process.jpdl.xml" />

<exclude name="org/jbpm/examples/task/candidates/process.jpdl.xml" />

<exclude name="org/jbpm/examples/concurrency/graphbased/process.jpdl.xml" />

<exclude name="org/jbpm/examples/timer/repeat/process.jpdl.xml" />

<exclude name="org/jbpm/examples/script/text/process.jpdl.xml" />

<exclude name="org/jbpm/examples/decision/handler/process.jpdl.xml" />

<exclude name="org/jbpm/examples/mail/template/process.jpdl.xml" />

<exclude name="org/jbpm/examples/script/expression/process.jpdl.xml" />

<exclude name="org/jbpm/examples/task/assignee/process.jpdl.xml" />

<exclude name="org/jbpm/examples/mail/inline/process.jpdl.xml" />

<exclude name="org/jbpm/examples/mail/template/process.jpdl.xml" />

<exclude name="org/jbpm/examples/eventlistener/process.jpdl.xml" />

<exclude name="org/jbpm/examples/timer/event/process.jpdl.xml" />

<exclude name="org/jbpm/examples/task/assignmenthandler/process.jpdl.xml" />

<exclude name="org/jbpm/examples/java/JavaInstantiateTest.java" />

<exclude name="org/jbpm/examples/decision/conditions/process.jpdl.xml" />

<exclude name="org/jbpm/examples/decision/expression/process.jpdl.xml" />

  <exclude name="org/jbpm/examples/java/process.jpdl.xml" />

<exclude name="org/jbpm/examples/task/notification process.jpdl.xml" />

<exclude name="org/jbpm/examples/task/reminder process.jpdl.xml" />

        <exclude name="org/jbpm/examples/rulesdecision/process.jpdl.xml" />

<exclude name="org/jbpm/examples/task/notification/process.jpdl.xml" />

<exclude name="org/jbpm/examples/task/reminder/process.jpdl.xml" />

<exclude name="org/jbpm/examples/bpmn/event/terminateend/terminate_end_event.bpmn.xml" />

<exclude name="org/jbpm/examples/bpmn/gateway/exclusive/exclusive_gateway.bpmn.xml" />

<exclude name="org/jbpm/examples/bpmn/gateway/exclusive/exclusive_gateway_default_seq_flow.bpmn.xml" />

<exclude name="org/jbpm/examples/bpmn/gateway/parallel/parallel_gateway.bpmn.xml" />

<exclude name="org/jbpm/examples/bpmn/task/service/service_task_java.bpmn.xml" />

<exclude name="org/jbpm/examples/bpmn/task/usertask/user_task_human_performer_variable.bpmn.xml" />

<exclude name="org/jbpm/examples/bpmn/task/script/script_task.bpmn.xml" />

</fileset>

</jar>

<taskdef name="jbpm-deploy" classname="org.jbpm.pvm.internal.ant.JbpmDeployTask" classpathref="jbpm.libs.incl.dependencies" />

<jbpm-deploy file="${jbpm.home}/examples/target/examples.bar" />

</target>

 

工作流引擎扫描业务流程归档中所有以.jpdl.xml结尾的文件,所有这些文件的内容都会被当成jPDL流程定义解析,让后可以被用来发起流程实例。业务流程归档中所有其他资源也会在部署过程中被持久化到数据库中,所有资源将保存在jbpm4_job中

第三步就是部署需要在ant中将JbpmDeployTask声明为jbpm-deploy的自定义任务:

<taskdef name="jbpm-deploy" classname="org.jbpm.pvm.internal.ant.JbpmDeployTask" classpathref="jbpm.libs.incl.dependencies" />

<jbpm-deploy file="${jbpm.home}/examples/target/examples.bar" />

</target>

File接口指定需要部署的业务流程归档文件

 

org.jbpm.pvn.internal.ant.JbpmDeployTask预留了一下四个参数:

 String jbpmCfg = null;

//File接口指定需要部署的业务流程归档文件

  File file = null;

  List fileSets = new ArrayList();

  boolean failOnError = true;

属性

类型

默认值

是否可填

描述

File

文件

可选

指定需要被部署的业务流程定义文件。以.xml结尾的文件都会被作为流程定义文件直接部署;以“*ar”结尾的文件,比如.bar或。jar文件,则会被作为业务流程归档部署

Cfg

文件

Jbpm.cfg.xml

可选

指定jbpm配置文件。默认寻找classpath根目录下jbpm.cfg.xml。如果需要自定义,这个路径应该谓语jbpm-deploy任务定义的classpath范围内

Fileset

0..*

 

 

指定需要被部署的业务流程定义文件集合,以一个简单的ant的fileset表示。以。xml结尾的文件会被作为流程定义文件直接部署;以"*ar"结尾的文件,比如。bar或。jar文件,则会被作为业务流程归档部署

 

4.2部署流程Java类的3个方法

  1.将Java类打包在业务流程归档中的部署

  2.把Java类部署到应用服务器的类库中

  3.把流程Java类部署到Web应用或企业应用相应目录中。

 

4.3例程:部署业务流程定义

1>通过ant脚本方式部署。Ant脚本如下:

<?xml version="1.0" encoding="UTF-8"?>

 

<project name="jbpm.examples">

 

<!-- DEVELOPER SPECIFIC CONFIGURATIONS -->

<property file="${user.home}/.jbpm4/build.properties" />

 

<!-- DEFAULT PROPERTY VALUES -->

<property name="database" value="mysql" />

<property name="jbpm.parent.dir" value="../.." />

<property name="jbpm.version" value="4.3" />

<property name="jboss.version" value="5.0.0.GA" />

<!--使用jbpm.home表示jbpm的安装目录-->

<property name="jbpm.home" value="D:/myworkspace/javacode/workflow/jbpm-4.3" />

 

<!-- JDBC PROPERTIES -->

<property file="${user.home}/.jbpm4/jdbc/${database}.properties" />

<property file="${jbpm.home}/db/jdbc/${database}.properties" />

 

<!-- ### LOG PROPERTIES ################################################# -->

<target name="log.properties">

<echo message="database: ${database}" />

<echo message="jdbc.driver........ ${jdbc.driver}" />

<echo message="jdbc.url........... ${jdbc.url}" />

<echo message="jdbc.username...... ${jdbc.username}" />

<echo message="jbpm.version....... ${jbpm.version}" />

<echo message="jbpm.home.......... ${jbpm.home}" />

</target>

   <!--这个ant任务专门用来定义jbpm的运行库.依赖库一级配置文件的classpath路径-->

<target name="jbpm.libs.path">

<path id="jbpm.libs.incl.dependencies">

<pathelement location="${jbpm.home}/examples/target/classes" />

<fileset dir="${jbpm.home}">

<include name="jbpm.jar" />

</fileset>

<fileset dir="${jbpm.home}/lib" />

</path>

</target>

 

<!-- ### DEPLOY EXAMPLE BUSINESS ARCHIVES ############################### -->

<!--使用jbpm工作流引擎提供的antapi——————————JbpmDeployTask 来执行部署-->

<target name="create.and.deploy.examples" 

      depends="jbpm.libs.path, examples.jar">

<mkdir dir="${jbpm.home}/examples/target" />

<copy file="${jbpm.home}/install/src/cfg/hibernate/jdbc/${database}.hibernate.cfg.xml"

    tofile="${jbpm.home}/examples/target/classes/jbpm.hibernate.cfg.xml" 

      overwrite="true">

<filterset filtersfile="${jbpm.home}/install/jdbc/${database}.properties" />

</copy>

<jar destfile="${jbpm.home}/examples/target/examples.bar">

<fileset dir="${jbpm.home}/examples/src">

<exclude name="jbpm.cfg.xml" />

<exclude name="jbpm.hibernate.cfg.xml" />

<exclude name="jbpm.mail.properties" />

<exclude name="jbpm.mail.templates.examples.xml" />

<exclude name="logging.properties" />

<exclude name="org/jbpm/examples/task/swimlane/process.jpdl.xml" />

<exclude name="org/jbpm/examples/task/candidates/process.jpdl.xml" />

<exclude name="org/jbpm/examples/concurrency/graphbased/process.jpdl.xml" />

<exclude name="org/jbpm/examples/timer/repeat/process.jpdl.xml" />

<exclude name="org/jbpm/examples/script/text/process.jpdl.xml" />

<exclude name="org/jbpm/examples/decision/handler/process.jpdl.xml" />

<exclude name="org/jbpm/examples/mail/template/process.jpdl.xml" />

<exclude name="org/jbpm/examples/script/expression/process.jpdl.xml" />

<exclude name="org/jbpm/examples/task/assignee/process.jpdl.xml" />

<exclude name="org/jbpm/examples/mail/inline/process.jpdl.xml" />

<exclude name="org/jbpm/examples/mail/template/process.jpdl.xml" />

<exclude name="org/jbpm/examples/eventlistener/process.jpdl.xml" />

<exclude name="org/jbpm/examples/timer/event/process.jpdl.xml" />

<exclude name="org/jbpm/examples/task/assignmenthandler/process.jpdl.xml" />

<exclude name="org/jbpm/examples/java/JavaInstantiateTest.java" />

<exclude name="org/jbpm/examples/decision/conditions/process.jpdl.xml" />

<exclude name="org/jbpm/examples/decision/expression/process.jpdl.xml" />

  <exclude name="org/jbpm/examples/java/process.jpdl.xml" />

<exclude name="org/jbpm/examples/task/notification process.jpdl.xml" />

<exclude name="org/jbpm/examples/task/reminder process.jpdl.xml" />

        <exclude name="org/jbpm/examples/rulesdecision/process.jpdl.xml" />

<exclude name="org/jbpm/examples/task/notification/process.jpdl.xml" />

<exclude name="org/jbpm/examples/task/reminder/process.jpdl.xml" />

<exclude name="org/jbpm/examples/bpmn/event/terminateend/terminate_end_event.bpmn.xml" />

<exclude name="org/jbpm/examples/bpmn/gateway/exclusive/exclusive_gateway.bpmn.xml" />

<exclude name="org/jbpm/examples/bpmn/gateway/exclusive/exclusive_gateway_default_seq_flow.bpmn.xml" />

<exclude name="org/jbpm/examples/bpmn/gateway/parallel/parallel_gateway.bpmn.xml" />

<exclude name="org/jbpm/examples/bpmn/task/service/service_task_java.bpmn.xml" />

<exclude name="org/jbpm/examples/bpmn/task/usertask/user_task_human_performer_variable.bpmn.xml" />

<exclude name="org/jbpm/examples/bpmn/task/script/script_task.bpmn.xml" />

</fileset>

</jar>

<taskdef name="jbpm-deploy" classname="org.jbpm.pvm.internal.ant.JbpmDeployTask" classpathref="jbpm.libs.incl.dependencies" />

<!--在这里指定流程定义打包-->

<jbpm-deploy file="process.jar" />

</target>

 

<target name="examples.jar" depends="jbpm.libs.path">

<mkdir dir="${jbpm.home}/examples/target/classes" />

<javac srcdir="${jbpm.home}/examples/src"

           destdir="${jbpm.home}/examples/target/classes"

     source="1.5"

           classpathref="jbpm.libs.incl.dependencies" />

<copy todir="${jbpm.home}/examples/target/classes">

<fileset dir="${jbpm.home}/examples/src">

<exclude name="**/*.java" />

</fileset>

</copy>

<jar destfile="${jbpm.home}/examples/target/examples.jar" >

<fileset dir="${jbpm.home}/examples/target/classes">

<include name="**/*.class" />

</fileset>

</jar>

</target>

 

</project>

2>通过编写java通过调用jbpm工作流引擎提供的部署服务API完成流程定义部署。

public class Test extends JbpmTestCase {

 

/***

 * 这个成员为单元测试保存流程定义的部署ID

 */

String deploymentId;

 

/***

 * 一般在单元测试的初始化方法中,执行流程定义的部署工作

 * 这是在jbpm4单元测试的约定,在后面的单元测试代码中,都将默认执行此约定

 */

@Override

protected void setUp() throws Exception {

super.setUp();

//使用 repositoryService提供的API方法从classpath中部署流程定义

deploymentId = repositoryService.createDeployment()

.addResourceFromClasspath(

"com/examples/jbpm4/n2_3_4/process.jpdl.xml").deploy();

//当然在这里可以多次调用addResourceFromClasspath方法,将流程定义的其他资源都将部署到数据库中

}

    /**

     * 一般在单元测试的结束方法中执行删除流程定义部署的工作

     * 这是在jbpm4单元测试的约定,在后面的单元测试代码中,都将默认执行此约定

     */

@Override

protected void tearDown() throws Exception {

//使用repositoryService.deleteDeploymentCascade(deploymentId)方法,将物理清理

//deploymentId对应的流程定义及其所有相关资源,并关联清理基于此流程定义的流程实例。

//活动.实例.任务.历史流程实例等所有运行时及历史的流程实体记录

repositoryService.deleteDeploymentCascade(deploymentId);

super.tearDown();

}

 

/***

 * 这是单元测试方法

 */

public void test() {

}

 

}

 

原创粉丝点击