`
rking0228
  • 浏览: 21317 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

解读JBM3源文件 FieldInstantiation 实现集合Field

阅读更多
以前的应用中在节点进入事件中定义ActionHandler,Field中定义人员查找的方法和查找的参数,方法似乎不错^_^ 但是人员查找的方法和参数在不同节点是不相同的(方法名,参数个数,参数值),考虑长远些,如果人员查找服务是确认的,人员查找Action也就是确认的,不用重复去设计,当人员查找服务不能满足现在需求要新增接口时,流程定义肯定要升级新版本,人员查找Action是否可以不会改动,或改动甚少呢?我想是可以的,也是想去解决的问题。
人员查找的接口、参数及参数类型可以用反射去解决。流程定义ActionHandler的Field定义为集合类型就可以应对参数类型不确定的情况。在网上逛了一阵子都没找到相关资料,Jbpm的学习资料相对较小,很多问题只能从源码下手,只得去看源码了。
从 Instantiator 接口和实现类中可以找到答案。

Field 为List的测试ActionHandler
public class FieldOfListTest implements ActionHandler {

	private static final long serialVersionUID = 1L;

	public List<String> parameters;
	
	public void execute(ExecutionContext executionContext) throws Exception {
		System.out.println(parameters);
	}
}


Field 为List的流程定义部分
			<action class="com.jbpm.test.FieldOfListTest">
				<parameters element-type="java.lang.String">
					<parameter>admin</parameter>
					<parameter>manager</parameter>
				</parameters>
			</action>



Field 为Map的测试ActionHandler
public class FieldOfMapActionTest implements ActionHandler {

	private static final long serialVersionUID = 1L;

	public Map<String, String> parameters;
	
	public void execute(ExecutionContext executionContext) throws Exception {
		if (parameters != null){
			Iterator<Entry<String, String>> iterator = parameters.entrySet().iterator();
			while(iterator.hasNext()){
				Entry<String, String> entry = iterator.next();
				System.out.println(entry.getKey() + ":" + entry.getValue());
			}
		}
	}


Field 为Map的流程定义部分
			<action class="com.jbpm.test.FieldOfMapTest">
				<parameters key-type="java.lang.String" value-type="java.lang.String">
					<parameter>
						<key>role</key>
						<value>ROLE_0</value>
					</parameter>
					<parameter>
						<key>level</key>
						<value>LEVEL_0</value>
					</parameter>
				</parameters>
			</action>


从processDefinition 到ActionHandler的类成员,jbpm通过反射实例化类,实现动态加载,所支持的类型很多,可以查看 FieldInstantiator类中的getValue(Class type, Element propertyElement)方法。思想很不错,功能确实很强大,要是定义集合类时支持多种数据类型就好了(Map<String, Object>) 哈。。。


0
0
分享到:
评论

相关推荐

    MSYH-JBM 混合字体,等宽字体,编程字体

    3. MSYH-JBM-Term-Bold.ttf:Term字体的粗体样式。 4. MSYH-JBM-Mono-Bold.ttf:Mono字体的粗体样式。 5. MSYH-JBM-Term-Italic.ttf:Term字体的斜体样式。 6. MSYH-JBM-Mono-Italic.ttf:Mono字体的斜体样式。 7. ...

    XHei-JBM(不支持连字,斜杠0).zip

    包含XHei JBM和XHei JBM H两套字体,其区别是其英文引号是全宽或半宽字符(半宽用于VSCode的PowerShell下,避免全宽引号显示错位);字形都包含常规、粗体、斜体和粗斜体;保证在所有字号下粗体字符和常规的宽度都...

    JBM Source Library-开源

    这是我在2001年至2006年间开发的源代码库。还包含我来自JBM VST Designs项目的文件。

    标准6U VPX主板结构尺寸图,含连接器库及3D封装库

    3. **3D封装库**: 3D封装库在硬件设计中用于模拟实际组件在电路板上的三维布局。"vpx_6u.PcbDoc"可能是一个包含6U VPX主板3D模型的设计文件,设计师可以使用它来预览和优化板级组件的堆叠,确保散热、电气性能和...

    XHei-JBM(不支持连字,圆点0).zip

    包含XHei JBM和XHei JBM H两套字体,其区别是其英文引号是全宽或半宽字符(半宽用于VSCode的PowerShell下,避免全宽引号显示错位);字形都包含常规、粗体、斜体和粗斜体;保证在所有字号下粗体字符和常规的宽度都...

    Jboss messaging

    3. **Cluster通信**:了解JBM如何在集群环境中实现消息的复制和同步。 4. **事务处理**:分析JBM如何实现JTA事务支持,确保消息的正确提交或回滚。 **四、VaOneQueueJMS 示例** `VaOneQueueJMS`可能是一个具体的...

    jboss+jbmp5.3开发手册.rar

    这个开发手册将帮助开发者深入了解如何在JBoss环境中集成和使用JBM进行业务流程的管理和实现。 1. **JBM5.3.chm** - 这个CHM(Compiled Help Manual)文件是JBM5.3的官方帮助文档,通常包含详细的技术指南、API参考...

    matlab-code.rar_Ballistic_EKF_ballistic missile_missile_missile

    Ballistic missile defence multisensor fusion

    jbm_front_end:Java大数据机器学习

    【标题】"jbm_front_end:Java大数据机器学习"是一个项目,主要关注的是将Java技术应用于大数据处理和机器学习领域。这个项目可能包含了利用Java语言进行大数据分析和构建机器学习模型的相关代码和资源。 【描述】...

Global site tag (gtag.js) - Google Analytics