Jbpm发行包中定义了ant任务来完成打包和部署任务。
我们可以参考build.xml(位于入门套件解压后的jbpm文件夹中)中的build.processes任务,如下:
<target name="build.processes" depends="compile" description="builds the example processes">
--processdefinition.xml
--classes
process2.zip
--processdefinition.xml
--classes
2.部署流程档案
(1)第一种方式
我们可以参考build.depoly.xml(位于入门套件解压后的jbpm文件夹中)中的deploy.processes任务,如下:
<ant antfile="build.xml" target="build.processes" inheritall="false" />
<deployprocess cfg="src/config.files/hibernate.cfg.xml"
properties="${basedir}/src/resources/hsqldb/create.db.hibernate.properties">
<fileset dir="build" includes="*.process" />
</deployprocess>
</target>
这个任务是用来部署流程档案的,它依赖declare.jbpm.tasks任务(declare.jbpm.tasks任务定义了Jbpm实现的有关部署流程定义的的Ant任务,如标签中的deployprocess,我们暂且不讨论,后面会介绍该任务)。首先它会调用build.xml中的build.processes任务来打包流程档案,然后会使用Jbpm自己实现的ant任务(标签deployprocess)来部署流程档案。部署时需要两个配置文件hibernate.cfg.xml(位于入门套件解压后的jbpm\src\config.files文件夹中)和create.db.hibernate.properties(位于入门套件解压后的jbpm\src\resources\hsqldb文件夹中),这两个文件指定了Hibernate的配置信息,可以直接从发行包中拷贝使用,具体位置和数据库连接信息根据实际情况调整。任务中所发布的流程档案文件在build目录下,扩展名为process,这些可以根据实际情况并结合打包任务build.processes进行相应调整。
<ant antfile="build.xml" target="build" />
<taskdef file="src/java.jbpm/org/jbpm/ant/jbpm.ant.tasks.properties" format="properties">
<classpath refid="classpath.ant" /
</taskdef>
在我们项目中使用时可以删除<ant antfile="build.xml" target="build" />,它仅仅是用来构建Jbpm项目的。
呵呵,第一种方式看起来是不是有点烦琐:)这只是发行包种采用的方式,对于我们使用时,可以使用下面的稍简化方式:
<target name="deploy.processes2" depends="" description="deploys the jbpm processes">
<taskdef name="deployprocess" classname="org.jbpm.ant.DeployProcessTask">
<classpath refid="classpath.ant" />
</taskdef>
<deployprocess process="build/process1.process"
cfg="config.files/hibernate.cfg.xml"
properties="config.files/create.db.hibernate.properties">
<!--多个流程档案时使用fileset元素
<fileset dir="build" includes="*.process" />
-->
</deployprocess>
</target>
这种方式只是集成了第一种方式中的两个任务。
除了通过Jbpm提供的Ant任务进行流程定义的部署之外,还可以通过编程来完成。如下代码:
//也可以根据指定的配置文件获取配置实例。
JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
//创建数据库表,如果数据库表已经存在,则可以省略这一步
//jbpmConfiguration.createSchema();
//从流程档案中加载流程定义,此处的流程档案文件process1.proces是已经打包好的。
//也可以通过其他方式加载流程定义,比如从XML文件中
ProcessDefinition processDefinition = ProcessDefinition.parseParResource("process1.process");
//获取上下文
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
try {
// 部署流程定义
jbpmContext.deployProcessDefinition(processDefinition);
} finally {
jbpmContext.close();
}
以上代码的执行还需要依赖Hibernate的配置文件hibernate.cfg.xml。