JBPM(四)——把流程部署到服务器上

当我们的业务流程被设计开发完毕之后,会有许多相关的文件"散落"在工程中,其中包括:

  • 定义流程的JPDL文件
  • 根据图形化流程定义同步生成的流程图片文件(PNG格式)
  • 业务流程中用于人机交互的表单页面文件
  • 事件监听器等用户自定义代码的Java类文件
  • 其他流程资源文件,例如小图标、css样式表、脚本文件、属性文件等

jbpm4支持将流程定义及其相关资源打包一个JAR(Java归档)格式的文件,部署到服务器上(其实就是服务所连接的JBPM数据库中),然后流程定义就可以被执行了。

一、如何将流程定义和流程相关资源部署到jbpm数据库中?

jbpm4提供了一个基于Ant任务的API来部署业务流程归档——

org.jbpm.pvm.internal.ant.JbpmDeployTask。

JbpmDeployTask不仅可以部署单个业务流程归档,也可以部署一组业务流程归档到服务器上。通过读取jbpm.cfg.xml中的jdbc数据连接信息将业务流程归档部署到数据库中。因此,在使用JbpmDeployTask部署流程定义之前,先确保部署的数据库正在运行

创建和部署业务流程归档的例子位于jbpm4发布包中的examples目录下的Ant build.xml中,任务名称是create.and.deploy.examples。

该Ant所解决的问题如下:在examples/build.xml中

1>需要声明一个path任务来指定包含JbpmDeployTask的jbpm.jar及其所有的依赖库。

2>需要创建一个业务流程归档,可以使用Ant的jar任务

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

所有这些资源被统一编号保存在数据库表jbpm4_lob中,因此可以很方便地通过jbpm4提供的RepositoryService.getResourceAsStream API随时访问这些资源。

3>部署,需要先在Ant中将JbpmDeployTask生命一个jbpm-deploy的自定义任务

4>调用这个自定义的Ant任务

通过查看org.jbpm.pvm.internal.ant.JbpmDeployTask类的源码,可以发现为我们预留了3个接口参数

private String jbpmCfg;
private File file;
private List<FileSet> fileSets = new ArrayList<FileSet>();

file:指定需要被部署的业务流程定义文件;以.xml结尾的文件会被作为流程定义文件直接部署;

以"*ar"结尾的文件,比如.bar或.jar文件,则会作为业务流程归档部署。

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

fileSets:指定需要被部署的业务流程定义文件集合。

二、部署流程Java类的2种方式

  • 把Java类部署到应用服务器类库中,例如在Tomcat服务器的lib目录中部署流程Java类的jar包。这种方式加载类的优先级最高
  • 把流程Java类部署到Web应用或企业应用相应目录中,例如WEB-INF、classes目录或WEB-INF/lib目录。Tomcat在运行时会找到流程所需的Java类并调用。这种方式加载类的优先级为次高

三、示例:部署业务流程定义

首先配置好JBPM运行环境,即在classpath根目录下的jbpm.hibernate.cfg.xml中设置好数据库连接,并确保数据库服务正常。

第一种流程定义方式

1>通过执行Ant脚本的方式进行部署,这需要将要部署的流程定义及其相关资源按照classpath的层次结构打包归档,假设业务流程归档为process.jar,则部署process.jar的Ant脚本如下:

<project name="jbpm.examples.process.deployment"> 
<!--使用jbpm.home表示JBPM4的安装目录-->
<property file="jbpm.home" value="D:/jbpm-4.4" />

<!--这个Ant任务专门用来定义JBPM的运行库、依赖库以及配置文件的classpath路径-->
 <target name="jbpm.libs.path">
    <path id="jbpm.libs.incl.dependencies">
      <pathelement location="${jbpm.home}/examples/bin" />
      <pathelement location="${jbpm.home}/jbpm.jar" />
      <fileset dir="${jbpm.home}/lib" includes="*.jar" />
    </path>
  </target>
  <target name="process.jar" depends="jbpm.libs.path">
  </target>
  <!--使用JBPM4工作流引擎提供的Ant API——JbpmDeployTask来执行部署-->
  <target name="create.and.deploy.example" depends="jbpm.libs.path,process.jar">
	<taskdef name="jbpm-deploy" classname="org.jbpm.pvm.internal.ant.JbpmDeployTask"
		classpathref="jbpm.libs.incl.dependencies"/>
		<!--指定流程定义打包文件-->
		<jbpm-deploy file="process.jar"/>
  </target>
</project>

2>执行Ant任务create.and.deploy.examples即可部署流程定义打包process.jar至jbpm数据库中

第二种流程定义方式:

通过编写Java代码直接调用JBPM工作流引擎提供的部署服务API完成流程定义部署。

//JbpmTestCase继承了JUnit的TestCase类,是JBPM对Junit框架的扩展
public class Test extends JbpmTestCase {

	//保存流程定义的部署ID
	String deploymentId;

	@Override
	protected void setUp() throws Exception {
		super.setUp();
		//使用RepositoryService提供的API方法从classpath中部署流程定义
		deploymentId = repositoryService.createDeployment()
				.addResourceFromClasspath("produce.jpdl.xml").deploy();
	}

	@Override
	protected void tearDown() throws Exception {
		//该方法会物理清楚deployementId对应的流程定义及其所有相关资源,
		//并关联清除基于此流程定义的流程实例、活动实例、任务、历史流程实例等所有运行时及历史的流程实体记录
		repositoryService.deleteDeployment(deploymentId);
		super.tearDown();
	}

	public void test(){
		//@Todo
	}
}

注意:

在以上单元测试中流程引擎服务(RepositoryService)的初始化工作室由JbpmTestCase.setUp方法完成的,为此定义了6个流程引擎服务:

protected ProcessEngine processEngine;

//资源库服务
protected RepositoryService repositoryService;
//执行服务
protected ExecutionService executionService;
//管理服务
protected ManagementService managementService;
//任务服务
protected TaskService taskService;
//历史服务
protected HistoryService historyService;
//身份认证服务
protected IdentityService identityService;

而JbpmTestCase在其setUp方法中初始化:

@Override
  protected void setUp() throws Exception {
    super.setUp();
    processEngine = buildProcessEngine();

    repositoryService = processEngine.getRepositoryService();
    executionService = processEngine.getExecutionService();
    historyService = processEngine.getHistoryService();
    managementService = processEngine.getManagementService();
    taskService = processEngine.getTaskService();
    identityService = processEngine.getIdentityService();
  }
时间: 2024-10-10 00:54:12

JBPM(四)——把流程部署到服务器上的相关文章

总结之提交代码并部署到服务器上,为什么代码却没有更新?

问题描述: 遇到过几次这种情况:开发将代码提交之后,通过打包部署,发现部署到服务器上的代码不是最新的,还是修改之前的老代码. 打包部署流程背景说明: gitlab-->jenkins服务器打jar包-->将打好的jar包过滤并推送到服务器A上build镜像-->将镜像推送到harbor仓库-->部署容器到服务器 1.代码没有提交成功 这个不用多说,遇到过几次. 2.jenkins上的缓存没有清除 例如test服务的构建包的缓存目录就是在jenkins服务器的~/.m2/reposi

记录第一次将自己的网页部署到服务器上的过程

0 写在前面 近来又是疏于编写文章.2019春季学期的软件工程课程项目也已经如火如荼的启动了,我和我的团队负责的项目是实现一套基于物联网的智能机器人系统. 学校还算蛮给力,提供了一个服务器(虽然只是1核1G的),这样就可以将团队的主页给部署到服务器上,被大家访问了. 由于是第一次的部署,我在这个过程中遇到了不少坑,在这里简要记录一下~ 1 环境/工具 作为新手(而且我也不太会用Linux)我申请了一个Windows Server R2016的服务器. 网站的管理上,我则是使用了对新手友好,容易操

将网站部署到服务器上出现_STORAGE_WRITE_ERROR_问题

用的thinkphp3.2的框架,在本地运行没有问题,部署到服务器上(基于centos的LAMP环境)即报错,报错信息如下(完全看不懂...):求大神帮帮忙~~~~(>_<)~~~~ :(_STORAGE_WRITE_ERROR_:./Application/Runtime/Cache/Home/f8995a0e1afcdadc637612fae5a3b585.php错误位置FILE: /var/www/html/shoppingback/ThinkPHP/Library/Think/Stor

sqlite数据库部署到服务器上的问题

试了一天...本地测试是好的(WIN10 64位+VS2015),部署到服务器上(WIN2008 32位+IIS6) 总是不行..按网上说了什么不要BUNDLE的,加入X86X64目录再放那个SQLite.Interop.dll到不同的目录,还是不行,还是出错, 最后修改了应用程序池的标识里的预定义账户为本地系统就好了..还有我按网上做的IIS6运行32位模式的做了结果是没有任何反应的,可能是我的服务器本 来就是32位的原因的吧!!!

【笔记】第一次将网站部署到服务器上

前几天和两个朋友一起租了个国外的服务器,自己手头有个域名,打算寒假把flask学了做个网站玩一玩,不过还没开工,下午学了下flask弄了个helloworld,所以迫不及待的想先试一下把它部署到服务器上去. 使用的架构是uwgsi+nginx+flask. nginx是个什么东西呢,我们购买的服务器有一个ip地址,我们3个人有个人的域名需要解析到这个地址,互联网上默认的请求都是通过80端口,然后我们各自的web应用在服务器上需要有自己的端口,那么nginx就把请求转移到对应的服务器端口上去,比如

如何把vue.js项目部署到服务器上

如何把vue.js项目部署到服务器上面,我用的是tomcat服务器 1-改一下config/index.js文件,如下图,把assetsPublicPath: './', productionSourceMap: false 2-运行npm run build 然后在项目路径中找到打包后的文件,在项目文件的dist文件夹下面的static和index.html就是打包后的文件.然后我自己创建了cccBlog文件夹,把static和index.html拷贝到cccBlog下面,然后向服务器上传这个

DJANGO项目部署到服务器上

---- 说明: 本文章来自于 http://www.pythonav.com/wupeiqi/3.html  是武沛齐老师个人博客上取的内容. 尊重老师的成果. 小白的项目部署 项目开发完毕后,需要将代码放到服务器上,这样用户才能访问.接下来我们一步一步来进行一波部署操作. 1. 简单粗暴 项目开发完毕,在部署之前需要再配置文件中将 ALLOWED_HOSTS配置设置为:当前服务器IP或*,如: ALLOWED_HOSTS = ["*",] 示例源码:猛击下载 然后将源码上传至服务器

如何将Java Web项目部署到服务器上

项目部署 我们对于 Java Web 项目在本地机器(无论是 Windows 还是 Linux)上的部署已经了然于心了,那么对于在云服务器上部署 Java Web 项目又是如何操作的呢? 其实很简单,还是离不开 Web 项目部署的那三点:① 基础的 JDK 环境② 一个 Web 服务器.如 Tomcat.JBoss③ 一款数据库.如:mysql 对于云服务器上 Java Web 项目的部署,和平时在 Windows.Linux 下部署是一样的.最多也就是只能使用纯命令模式来操作而已,其实过程都一

百度编辑器本地上传图片可以正常显示,部署到服务器上就显示不出来只显示图片的名字

1.要添加编辑器的相关jar包 2.配置路径访问前缀,没有temp文件时需要在服务器上新建一个 . 原文地址:https://www.cnblogs.com/qianzf/p/9636082.html