JBPM流程部署之流程定义实体对象分析

JBPM流程部署之流程定义实体对象分析

JBPM中运行时使用的流程定义实体对象是ProcessDefinitionImpl,流程定义实体对象是流程流转的路线图,他是根据我们对jpdl的解析形成的,他是在我们发布流程的同时,或者是首次发起本版本的流程实例的时候进行实例化;由于流程定义实体的初始化需要动态的解析jpdl,所以相对来说还是很耗费资源的,所以ProcessDefinitionImpl一旦形成流程引擎就会将其缓存起来,以后就会直接从缓存中获取。
ProcessDefinitionImpl在流程引擎具有很重要的作用,除了作为流程流转的依据外,同时也需要具有一些别的特别重要的功能,那么现在我们来看看JBPM中ProcessDefinitionImpl的UML类库,同时让我们来领略一下JBPM中流程实体对象的架构设计思想

JBPM流程部署之流程定义实体对象分析_第1张图片

下面我们将根据流程定义的功能来分析上图的设计

流程定义元素
流程定义是由流程定义元素构成,一般来说(狭义)流程定义是由活动节点组成的,但是从广义上来说,流程定义是由流程元素(ProcessDefinitionImpl和ActivityImpl)组成的;同时从类图上看,我们可以看到同样作为流程元素,ProcessDefinitionImpl和ActivityImpl都具有作为流程元素所应具有的功能特性,只不过ProcessDefinitionImpl作为流程定义本身来说需要具有创建并初始化流程实例的功能特性。同时ProcessDefinitionImpl只能作为流程定义的首节点,ActivityImpl作为前者的嵌套活动节点。所以他们都继承了ProcessElementImpl
可被监听对象
作为流程定义元素,他们代表了流程流转的不同步骤,同时流程的流转执行是片段式的,同一个流程元素不同时间会处于不同的执行状态,JBPM为流程元素内置了开始和结束事件,我们可以在节点开始时候进行一些业务数据资源的初始化等工作,同时在节点结束事件中完成资源的释放销毁等。所以两者都继承了ObservableElementImpl;
数据作用域
如同java中的变量有自己的作用域一样,每个流程元素都承载了一些数据和资源,他们只在这个节点及其子节点的范围内有效,超出这个范围就会被销毁;JBPM为节点定义的变量和定时器,如果我们在ProcessDefinitionImpl中定义了他们,那么我们可以在所有的节点中使用他们,这个时候可以说他们就是全局变量。所以两者都继承了ScopeElementImpl
复合流程元素
流程定义本身来说就具有树的特点,所以作为流程节点需要具有复合元素的特性,其可以作为其他节点的承载容器。所以两者都继承了CompositeElementImpl;
可创建流程实例
ProcessDefinitionImpl是流程实例运转的依据,同时也是流程实例的创建者,所以ProcessDefinitionImpl继承了ClientProcessDefinition;

通过以上分析,我们可以看到JBPM根据流程元素的共同功能特性对ProcessDefinitionImpl和activityImpl进行抽象提取,达到了代码的重用;根据流程土元素的功能特性抽取不同的接口和类进行封装和实现,在保证功能单一的情况下,我们可以根据方法的不同功能传递同一对象的不同类型作为参数,在一定的程度上保证了数据封装性和可扩展性;总之,这些都体现了良好的可扩展性和易维护性

你可能感兴趣的:(jbpm)