在Jbpm的userguide的第16.2.3节中,讲述了Delegation的四种配置机制。相对应的也就是config-type属性的四种可能的值。分别是“field,bean,constructor,configuration-property”。我建议读者先读一下userguide的第16.2.3节。
回忆一下,Delegation类有一个map成员instantiatorCache。它五个元素的key,除了null,其余四个正是我们上面列出的四个值。也就是说,在建模的时候,对于<action class=”dust.action.Action1Handler” config-type=”field”>元素, Action类的actionDelegation成员的instantiate()方法就会选择instantiatorCache中的FieldInstantiator对象来实例化dust.action.Action1Handler类。如果config-type=”bean”,那么就会选择BeanInstantiator。依次类推。
如果你不写config-type那么这个时候instantiatorCache的null就起作用了,所以默认还是FieldInstantiator。
那么FieldInstantiator,BeanInstantiator,ConfigurationPropertyInstantiator ,ConstructorInstantiator,四个类创建客户化对象有什么不同呢?
我们先写个类dust.action.Action1Handler,来看看。
public Action1Handler implements ActionHandler{
String name;
int count;
public Action1Handler(){}
public Action1Handler(String configuration){
System.out.println("==Action1Handler contstructor==");
System.out.println("==configuration is:"+configuration+"==");
}
public void setConfiguration(String configuration){
System.out.println("==Action1Handler setConfiguration==");
System.out.println("==configuration is:"+configuration+"==");
}
// getters and setters //////////////////////////////////////////////////////
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name ;
}
public void setCount(int count){
this.count = count;
}
public int getCount(){
return count;
}
public void execute(ExecutionContext executionContext) throws Exception {
// TODO Auto-generated method stub
}
}
下面我们假设流程定义为中有
<action class=”dust.action.Action1Handler” config-type=”field”>
<name>dust</name>
<count>5</count>
</action>
5.1. FieldInstantiator类
当config-type为field时,或者没有config-type属性,会使用FieldInstantiator类。
FieldInstantiator类使用反射机制直接对类的成员进行赋值。
也就是说FieldInstantiator会直接将dust付给name,5付给count。
5.2. BeanInstantiator类
当config-type为bean时,会使用BeanInstantiator类。
BeanInstantiator类必须使用setter属性,来对成员赋值。
即,BeanInstantiator使用setName()和setCount()。如果没有这两个方法,那么就会在日志中报错。
5.3. ConstructorInstantiator类
当config-type为constructor时,会使用ConstructorInstantiator类。
ConstructorInstantiator类会调用客户类的具有一个String类型参数的构造函数。并且将<action>元素的所有内容作为字符串类型的参数,传给构造函数。客户可以在这个构造函数中自己处理这段xml文档。
也就是说Jbpm会调用 public Action1Handler(String configuration){}。
5.4. ConfigurationPropertyInstantiator类
当config-type为configuration-property时,会使用ConfigurationPropertyInstantiator类。
ConfigurationPropertyInstantiator类会调用客户类的具有一个String类型参数的一个名叫setConfiguration()方法。并且将<action>元素的所有内容作为字符串类型的参数,传给setConfiguration方法。客户可以在这个方法中自己处理这段xml文档。
也就是说Jbpm会调用 public void setConfiguration(String configuration){}方法。
在Jbpm执行一个流程实例过程中,当遇到一个Action时,会首先实例化流程定义中的Action元素指定的客户化类。如果没有指定config-type的话,那么会调用客户化类的默认构造函数。然后调用execute()方法。
如果config-type为field或bean的话,那么就会在调用execute()前进行属性赋值;如果config-type为constructor,那么就会调用有参数的构造函数;如果config-type为configuration-property是,会先调用默认构造函数,然后调用setConfiguration()方法。
就像Jbpm的文档中自己写的那样,Jbpm使用Delegation机制是为了在流程执行中能够使用用户自己定制的代码(user’s custom code)。
在jPDL的schema定义中,有四个元素是可以添加用户自己定制的类。那就是action,assignment,controller和handler。这四个元素都有两个共同的属性,class和config-type。其中,action元素中class所指定的类必须实现org.jbpm.graph.def.ActionHandler接口。Assignment元素的class所指定的类必须实现org.jbpm.taskmgmt.def.AssignmentHandler接口。controller元素的class所指定的类必须实现org.jbpm.taskmgmt.def.TaskControllerHandler接口。handler元素的class所指定的类必须实现org.jbpm.graph.node.DecisionHandler接口。
在这四个元素的schema定义中还都有一个没有Name属性的成员“{content}”。Jbpm对它的解释是“the content of the handler can be used as configuration information for your custom handler implementations. This allows the creation of reusable delegation classes.”我会在Delegation的配置类型部分,详细讲解这个内容。
分享到:
相关推荐
例如,上述输出展示了已分配的IP地址、客户端标识符、租约到期时间和分配类型等信息。 DHCP服务的实施大大简化了网络管理,避免了手动配置IP地址的繁琐工作,并且有助于保持网络的灵活性和可扩展性。对于企业网络,...
F5 DNS GTM 302 Study Guide的知识点覆盖了DNS资源记录类型、区域类型、DNS查询流程、IPv4和IPv6的区别、GTM的源IP确定、DNS安全概念、监控、GTM负载均衡方法、iRules事件应用、GTM工具使用、区域传输机制、DNS配置...
terraform-aws-elasticache-redis Terraform模块以配置 Redis集群该项目是我们针对DevOps的全面方法的一部分。 它是100%开源的,并根据许可。 从字面上看,我们有,它们都是开源的并且维护良好。 去看一下!安全与...
DHCPv6的运作原理涉及多种消息类型: - SOLICIT:客户端请求IP地址信息。 - ADVERTISE:服务器响应SOLICIT消息,通告其可用的服务。 - REQUEST:客户端向服务器请求地址或其它配置信息。 - RENEW:客户端在地址租约...
- 进入“Delegation”标签页,添加委派权限。 ### 8. 环境完成确认检查 - **测试**: - 检查网络连通性。 - 验证DNS解析。 - 测试DHCP分配。 - 登录到域,验证用户账户功能。 - **文档记录**: - 记录所有的...
- `configType`: 字符串类型,表示配置类型。 - `decisionDelegation`: 与决策节点相关的委托,其数量范围为0到n个。 #### 5. `org.jbpm.graph.def.Node` 这是工作流中节点的基本定义类。包括以下属性: - `name`...
创建链接服务器后,如果你打算使用模拟(Delegation),需要进行额外的配置。模拟允许SQL Server代表一个经过身份验证的用户去连接其他的服务器。这在分布式查询中尤其重要,因为它允许用户在本地服务器上执行查询,...
11. Cocoa设计模式的采纳:Apple的文档可能会介绍如何在Swift中使用Objective-C设计模式,如委托(Delegation)、延迟初始化(Lazy Initialization)等。 12. 错误报告、键值观察(KVO)、目标-动作模式:这一部分...
当谈到对象委托(Object Delegation)的成本时,我们在理解封装一个基本类型到一个对象中时会遇到额外的内存开销,但更重要的是,委托机制可能对性能带来影响。对象间的关联和方法调用可能会导致额外的内存和性能...
JBPM(JBoss Business Process Management)是一个开源的工作流和业务流程管理系统,用于设计、执行、监控和优化...在开发过程中,这些关系将指导如何正确地配置和执行流程,以及如何设计符合业务需求的自定义逻辑。
JavaScript 是一种脚本语言,具有弱类型和动态类型特点。闭包是 JavaScript 中的一种重要概念,用于实现函数的私有变量。 10. JavaScript 调试: JavaScript 调试可以使用 Firebug 等工具,Firebug 提供了网络选项...
- **ACTIONDELEGATION_**:动作类型为`Action`时使用的代理类,与`JBPM_DELEGATION`表关联。 - **EVENT_**:动作中指定的事件,与`JBPM_EVENT`表关联。 - **PROCESSDEFINITION_**:动作所属的流程模版ID,与`JBPM_...
- 令牌委派(Token Delegation):当需要使用一个用户的权限来执行某些操作时,可以对令牌进行委派。 - 令牌有效期与时钟偏差(Token Lifetime-Clock Tolerance):在设计应用时需要考虑到令牌的生命周期以及系统...
* DECISIONDELEGATION:节点类型为Decision时使用,表明Decision对应的代理类,对应JBPM_DELEGATION表 * DECISIONEXPRESSION_:节点类型为Decision时使用,该属性表示Decision中的判断表达式 3. JBPM_TRANSITION表 ...
当启动一个Java应用时,实际上是在与三种类型的类装载器进行交互: 1. **引导程序类装载器(Bootstrap Class Loader)**:这是默认的第一个类装载器,用于加载Java的核心类库,如`java.lang`包中的类。引导程序类装载...
文档中还提到了关于字符串处理、本地化、数字处理、集合类(例如数组和字典)、Foundation数据类型、核心数据、Cocoa设计模式、C API交互、构建配置、混合编程Swift和Objective-C、导入代码、模块命名、迁移等多个...
- **代理**:Groovy的代理(Delegation)机制允许对象将某些方法调用委托给其他对象。 **6. Groovy库的运用** - **Builder模式**:Groovy通过Builder模式简化了XML和其他结构化数据的生成。 - **GDK(Groovy ...
- DECISIONDELEGATION:决策节点的代理类,对应于JBPM_DELEGATION表。 - DECISIONEXPRESSION_:决策节点使用的判断表达式。 - SIGNAL_:任务节点结束时的操作类型。 - CREATETASKS_:任务节点在运行时是否创建任务。...
扩展函数和委托(Extensions and Delegation)是Kotlin中强大的特性,它们允许开发者以非常灵活的方式扩展类的功能或改变类的默认行为。例如,Kotlin提供了属性委托,它允许我们以声明式的方式实现属性的获取和设置...
`ISPROPAGATIONALLOWED_`可能与动作是否允许传播有关,`ACTIONEXPRESSION_`在动作类型为脚本时使用,`ACTIONDELEGATION_`与`JBPM_DELEGATION`表相关,用于指定动作的代理类。`EVENT_`字段可能关联了事件处理,而`...