jBPM4.4开发(八)-----------java活动

java活动

1.定义

java活动可以指定一个java类的方法,当流程执行到此活动时,马上自动执行此java方法。

2.属性

class 属性用来指定此java 的全类名,要注意这个类要有public无参的默认构造方法。
expr   这个表达式返回方法被调用所产生的目标对象。
method  指定要调用的方法名。
var  返回存储的变量名。
field  在方法调用之前为成员变量赋值。
arg  要调用的方法的参数。

3.Demo

流程定义文件:
<?xml version="1.0" encoding="UTF-8"?>

<process name="Java" xmlns="http://jbpm.org/4.4/jpdl">

  <start g="20,20,48,48">
    <transition to="greet" />
  </start>

  <java name="greet"
        class="com.itstudio.jbpm.java.demo.JohnDoe"
        method="hello"
        var="answer"
        g="96,16,83,52">

    <field name="state"><string value="fine"/></field>
    <arg><string value="Hi, how are you?"/></arg>

    <transition to="shake hand" />
  </java>

  <java name="shake hand"
        expr="#{hand}"
        method="shake"
        var="hand"
        g="215,17,99,52">

    <arg><object expr="#{joesmoe.handshakes.force}"/></arg>
    <arg><object expr="#{joesmoe.handshakes.duration}"/></arg>

    <transition to="wait" />
  </java>

  <state name="wait" g="352,17,88,52"/>

</process>
java类:
Hand.java
package com.itstudio.jbpm.java.demo;

import java.io.Serializable;


public class Hand implements Serializable {

  private static final long serialVersionUID = 1L;

  private boolean isShaken;

  public Hand shake(Integer force, Integer duration) {
    if (force>3 && duration>7) {
      isShaken = true;
    }
    
    return this;
  }

  public boolean isShaken() {
    return isShaken;
  }
}
JoeSmoe.java
package com.itstudio.jbpm.java.demo;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

public class JoeSmoe implements Serializable {

  private static final long serialVersionUID = 1L;

  public Map<String, Integer> getHandshakes() {
    Map<String, Integer> handshakes = new HashMap<String, Integer>();
    handshakes.put("force", 5);
    handshakes.put("duration", 12);
    return handshakes;
  }
}
JohnDoe.java

package com.itstudio.jbpm.java.demo;

import java.io.Serializable;

public class JohnDoe implements Serializable {
  
  String state;
  
  public String hello(String msg) {
    if ( (msg.indexOf("how are you?")!=-1)
       ) {
      return "I'm "+state+", thank you.";
    }
    return null;
  }
}

测试类:JavaInstantiateTest.java
package com.itstudio.jbpm.java.demo;

import java.util.HashMap;
import java.util.Map;

import org.jbpm.api.Configuration;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.RepositoryService;
import org.jbpm.api.TaskService;

public class JavaInstantiateTest {

	public  final Configuration configuration = new Configuration();
	public  final ProcessEngine processEngine=configuration.buildProcessEngine();
	public  final RepositoryService repositoryService= processEngine.getRepositoryService();
	public  final ExecutionService executionService=processEngine.getExecutionService();
	public  final TaskService taskService=processEngine.getTaskService();
	
	private void deploy() {
		repositoryService.createDeployment().addResourceFromClasspath(
				"com/itstudio/jbpm/java/demo/process.jpdl.xml").deploy();
		System.out.println("Successful");
	}
	
	private void test() {
		Map<String, Object> variables = new HashMap<String, Object>();
		variables.put("hand", new Hand());
		variables.put("joesmoe", new JoeSmoe());

		ProcessInstance processInstance = executionService
				.startProcessInstanceByKey("Java", variables);
		String pid = processInstance.getId();

		String answer = (String) executionService.getVariable(pid, "answer");
		//显示返回值是否为I'm fine, thank you. 
		System.out.println(answer);
		
		Hand hand = (Hand) executionService.getVariable(pid, "hand");
	    System.out.println(hand.isShaken());
	}
	
	public static void main(String[] args) {
		JavaInstantiateTest t = new JavaInstantiateTest();
		t.deploy();
		t.test();
	}
}



By Mr.Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值