1. 动作使用于:
(1) 向另一个系统一步的发送消息;
(2) 以同步的方式调用外部的Web服务;
(3) 用于回调场景,向远程的系统发送请求,完成以后发起一次方法调用。
2. jPDL中action元素使用的位置
(1)Node节点类型:用动作处理器实现节点定制的功能并将信标前移到合适的转换路径;
(2)转换路径:作为transition元素的子元素(或属性),当转换路径被触发时,可以调用一个动作;
(3)事件
(4)异常
(5)定时器:当定时器到期时可以触发动作。
3. 实例化动作类的属性
默认情况下采用字段值的方式,也可以配置属性@config-type来指定,config-type的值包括:
bean,constructor,constructor-property.当采用字段值的风格的类实例化方式时,jBPM会尝试自动将XMl中
action元素的子元素值按照其名称填充到匹配的类成员变量中。当要传递跟更复杂的数据时,可采用下面几种方式:
(1)使用任意复杂的XMl数据
(2)转换成dom4j的Element
(3)使用一种<map><entry><key>的XML格式将数据以一个Java Map对象传入
<action class="com.sample.action.MessageActionHandlerField"
config-type="field" name="action">
<message>Going to the field state!</message>
<xml>
<value1>Value 1</value1>
<value2>Value 2</value2>
<value3 value="Value 3"/>
</xml>
<map>
<entry><key>key1</key> <value>Value 1</value></entry>
<entry><key>key2</key> <value>Value 2</value></entry>
</map>
</action>
用于接收注入数据的MessageActionHandlerField类:
public class MessageActionHandlerField implements ActionHandler {
String message;
Element xml; //org.dom4j.Element;
Map<String, String> map;
public void execute(ExecutionContext context) throws Exception {
context.getContextInstance().setVariable("message", message);
System.out.println("map is: " + map.size());
System.out.println("xml is: " + xml.asXML());
}
}