jbpm 4 javaノードダイナミクス参


jbpm 4 beta 2で2日間のjava nodeへの伝達パラメータを実践しましたが、いずれも結果なく終了しました。6月5日にjbpm 4 CR 1バージョンがリリースされました。javaノードにパラメータを伝えることができないバグを解決しました。
JBPM 4 CR 1 released
http://www.jboss.org/feeds/post/jbpm_4_0_グラム1_released
JBPM-279
https://jira.jboss.org/jira/browse/JBPM-2279
今日はSchemaを参考にして一つの方法を実践しました。文脈中のパラメータをjavaノードに伝える方法を見つけました。フローソースファイル(ソースファイルに対して若干の修正を行いました。エラーがあれば、自分でデバッグしてください。)は以下の通りです。
1.フロー定義ファイル:

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

<process name="test">
   <start g="208,15,92,52" name="start">
      <transition to="doCreate"/>
   </start>
   <java class="com.synnex.jbpm.test.java.TestOperator" g="330,79,92,52" method="doCreate" name="doCreate" var="ret">
      <transition to="end"/>
<!--         ,         ref   object  , java            -->
      <arg><ref object="batchNo"/></arg>
      <arg><ref object="list"/></arg>
   </java>
   <end g="223,546,48,48" name="end"/>
</process>
2.javaノードファイル:

package com.synnex.jbpm.test.java;

import java.util.List;

import org.apache.log4j.Logger;
import org.jbpm.pvm.internal.env.ExecutionContext;

public class TestOperator {
	
	public boolean doCreate(String batchNo, List l){
		try{
			System.out.println("----------------------------------------------batchNo = " + batchNo);
			System.out.println("----------------------------------------------list[1] = " +(String)l.get(0));
			
		}catch(Exception e){
			e.printStackTrace();
		}
		return true;
	}
}

3.Main:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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


public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {		
		Test test = new Test();
		test.deploy();
		test.start();
	}

	ProcessEngine processEngine = new Configuration()
      .buildProcessEngine();
	
	RepositoryService repositoryService = processEngine.getRepositoryService();
	ExecutionService executionService = processEngine.getExecutionService();
	TaskService taskService = processEngine.getTaskService();
	HistoryService historyService = processEngine.getHistoryService();
	ManagementService managementService = processEngine.getManagementService();
//    	
	public void deploy(){
		
		long deploymentDbid = repositoryService.createDeployment()
	    .addResourceFromClasspath("com/synnex/jbpm/test/processes/test.jpdl.xml")
	    .deploy();
		System.out.println(deploymentDbid);
	}
//    
	public void start(){
		Map<String,Object> variables = new HashMap<String,Object>();
//      ,     ,  List,  Java  
		List l = new ArrayList();
		l.add("Hello, I am a String~");
		variables.put("batchNo", "12");
		variables.put("list", l);
		ProcessInstance pi = executionService.startProcessInstanceByKey("test", variables);
	}

}