流程任务-服务任务(Java Service Task)

服务任务用于请求流程外任务或自动执行任务,有3种实现:Java Service Task/Web Service /Task和shellTask,

当流程到达该任务时,执行相应的java类或webservice或shell命令。

1.Java Service Task

  1.1使用activiti:class指定java类,该类必须实现JavaDelegate,activiti每次都会创建新的实例。

public class MyJavaDelegate implements JavaDelegate{
    public void execute(DelegateExecution execution) throws Exception {
        System.out.println(" 实现  JavaDelegate 的  JavaSeviceTask: " + this);
    }
}

流程文件全名限定delete类

<serviceTask id="servicetask1" name="Service Task 1"
    <!--MyJavaDelegate必须是JavaDelegate实现类-->
    activiti:class="org.crazyit.activiti.MyJavaDelegate">
</serviceTask>

  1.2使用delegateExpression指定java类,该类必须实现JavaDelegate和Serializable

  a.创建java service task类

public class MyJavaDelegate implements JavaDelegate, Serializable {
    public void execute(DelegateExecution execution) throws Exception {
        System.out.println(" 实现  JavaDelegate 的  JavaSeviceTask: " + this);
    }
}

  b.流程文件juel表达式

<serviceTask id="servicetask1" name="Service Task"
    activiti:delegateExpression="${myDelegate}">
</serviceTask>

  c.实例的创建由提供者提供,需将实例设置到流程参数中:

  // 部署流程文件      repositoryService.createDeployment().addClasspathResource("bpmn/JUELClass.bpmn").deploy();
  Map<String, Object> vars = new HashMap<String, Object>();
   vars.put("myDelegate", new MyJavaDelegate());
  // 启动流程
  ProcessInstance pi = runtimeService.startProcessInstanceByKey("process1", vars);

  1.3 使用activiti:expression 调用普通的java bean

    a.创建java bean

public class MyJavaBean implements Serializable {
    public String getName() {
        return "bestmyself"
    }
    public void print(Execution exe) {
        System.out.println("使用Java Bean的print方法:" + exe.getId());
    }
}

  b.流程文件结合juel调用对象方法

<serviceTask id="servicetask1" name="Service Task"
    <!--执行mybean的print方法-->
    activiti:expression="${myBean.print(execution)}">
</serviceTask>

<serviceTask id="servicetask2" name="Service Task"
    <!--执行mybean.getName()方法-->
    activiti:expression="${execution.setVariable(‘myName‘, myBean.name)}">
</serviceTask>

  c.设置java bean 实例到流程中

  

    Map<String, Object> vars = new HashMap<String, Object>();
    vars.put("myBean", new MyJavaBean());
    // 启动流程
    ProcessInstance pi = runtimeService.startProcessInstanceByKey("process1", vars);
    // 进行任务参数查询
    System.out.println(  runtimeService.getVariable(pi.getId(), "myName"));
时间: 2024-10-25 02:16:35

流程任务-服务任务(Java Service Task)的相关文章

Java Service Wrapper 发布Java程序为Windows服务

下载Windows版本:http://nchc.dl.sourceforge.net/sourceforge/wrapper/wrapper-windows-x86-32-3.2.3.zip 现在目前只要32位有免费的,64位免费版目前还没有做出来.官网上(社区)那一列是免费的. 1.先把你的项目用MANIFEST.MF打成jar包,例如bb.jar.新建目录,例如:dist,放在D盘下面.把bb.jar放到dist目录下. 2.在dist目录下新建conf,lib,log三个文件夹.conf是

详解Maven项目利用java service wrapper将Java程序生成Windows服务

在项目的开发中,有时候需要将Java应用程序打包成Windows服务,我们就直接可以通过windows的服务来启动和关闭java程序了. 本博文将通过有两种方法实现该功能,手动创建法和Maven自动打包法. 一. 准备 下载java service wrapper 网址:http://sourceforge.net/projects/wrapper/或http://wrapper.tanukisoftware.com/doc/english/download.jsp 我下载的版本是wrapper

使用Java Service Wrapper将jar包安装成Windows服务

在windows上运行jar包,需要在工作目录下使用命令行运行jar包,这样会出现一个命令行窗口.而且这个命令行窗口有可能会不小心被关闭,且服务器启动后需要人为去点击开启. 对于有些服务性的程序来说,我们需要将其部署为windows服务,在系统启动的时候自动启动. 前面我使用了yajsw来进行,请参考我的博文:http://www.cnblogs.com/kxxx/p/6744309.html 但本次在另外一台服务器上进行处理时,安装了服务之后不能打开,服务每次都报找不到指定文件的错误,试了很久

利用JAVA Service Wrapper把JAVA程序做成windows服务

今天复习了一下Java的基础知识,做了一个读取数据入库的程序.由于读取的数据每天都更新,于是就想把程序做成一个服务,每天定时执行.研究了一下,发现有几种方式可以做.下面我主要记录一下JAVA Service Wrapper方式.除此之外,我会把一些基本内容也贴上,以后复习所用. 一.下面是整个程序的功能部分: 1.连接数据库的功能.我写了一个DBConnecter类,是一个单例. public class DBConnecter { private static DBConnecter inst

使用java service wrapper将java程序注册为windows服务

转载自 http://blog.csdn.net/coolcoffee168/article/details/9980009 1. 下载java service wrapper 网址:http://sourceforge.net/projects/wrapper/ 或者 http://wrapper.tanukisoftware.com/doc/english/download.jsp 我下载的版本是wrapper-windows-x86-32-3.5.20.zip. 2. 配置过程 1)首先确

Java Service Wrapper将jar包安装成Windows服务

刚接触java,第一次使用Java开发windows服务,也是刚不久看了SSM框架 简直也是一头雾水,不过只要用心理解,其实很简单,下面有详细的步骤,包学包会 在windows上运行jar包,需要在工作目录下使用命令行运行jar包,这样会出现一个命令行窗口 而且这个命令行窗口有可能会不小心被关闭,且服务器启动后需要人为去点击开启 对于有些服务性的程序来说,我们需要将其部署为windows服务,在系统启动的时候自动启动 后来研究了两种方式: 1.使用 JavaService.exe 安装jar包

使用Java Service Wrapper将java程序作为linux服务并且开机自动启动

以java应用程序为例,打包为tianlong.jar,程序入口为tianlong.QueueTest. 下面在linux的/opt下建立tianlong目录,复制tianlong.jar到/opt/tianlong/lib目录下. 1.下载Java Service Wrapper(目前版本wrapper-linux-x86-32-3.3.2), 解压. http://wrapper.tanukisoftware.org/ 复制src/bin/sh.script.in到/opt/tianlong

Java Service Wrapper简介与使用(转)

本文转自https://www.cnblogs.com/zcy_soft/p/3738947.html,写的非常好,珍藏一下 1. wrapper的意思? wrapper在此处理解为"包装". 2.  java service wrapper的作用? 在实际开发过程中很多模块需要独立运行,他们并不会以web形式发布,传统的做法是将其压缩为jar包独立运行,这种形式简单易行也比较利于维护,但是一旦服务器重启或出现异常时,程序往往无法自行修复或重启.解决服务器重启的传统做法是编写一段she

无状态服务(stateless service)

一.定义 无状态服务(stateless service)对单次请求的处理,不依赖其他请求,也就是说,处理一次请求所需的全部信息,要么都包含在这个请求里,要么可以从外部获取到(比如说数据库),服务器本身不存储任何信息 有状态服务(stateful service)则相反,它会在自身保存一些数据,先后的请求是有关联的 二.优劣 有状态服务常常用于实现事务(并不是唯一办法,下文有另外的方案).举一个常见的例子,在商城里购买一件商品.需要经过放入购物车.确认订单.付款等多个步骤.由于HTTP协议本身是