转载请说明出处。该文档的版权属于
http://zstzah.blog.bokee.net
首先来看看它的包的静态结构,
![](http://www.bokee.net/userfilespace/2006/05/14/zstzah43361.gif)
在workflow包中我们发现了很多内容,光从名字上来看,就很一目了然。我将对最初常用的几个包进行阅读,后续在用到更多的功能时,补充该文档。
该文档原始地址
最早主要会提到的是basic、config、loader这三个包中的部分类,这三个包对于osworkflow的初始化非常重要。其中也会提到spi中的几个类,对于持久化操作的封装将使用这个包内的东西。
1、 basic 这个包中有两个类,BasicWorkflow,BasicWorkflowContext。如下我们来看看这两个类的继承体系:下面首先是workflow控制流程对象的继承体系
![](http://www.bokee.net/userfilespace/2006/05/14/zstzah43362.gif)
再来看看BasicWorkflowContext的继承体系:
![](http://www.bokee.net/userfilespace/2006/05/14/zstzah43363.gif)
这个包其实从名字上来看非常的明了,也就是我们从使用osworkflow的角度来看,一个流程实例的创建,我们可以使用的基本对象是BasicWorkflow,而我们同时也使用的BasicWorkflowContext这个对象来完成保存流程请求的用户的基本功能。
2、 config 这个包完成的工作就像他的名字一样,基本的两个配置类在这个包中:DefaultConfiguration、SpringConfiguration。我们来看看这个包的基本结构:
![](http://www.bokee.net/userfilespace/2006/05/13/zstzah42843.gif)
DefaultConfiguration这个类,完成了基本的配置文件的载入工作,包括osworkflow.xml(存放持久层配置以及流程工厂配置的文件)以及workflows.xml(存放流程模型资源的配置文件)的解析和映射。
我们来看看它的几个实例字段:
//流程工厂类,通常被配置到osworkflow.xml文件中,在初始化的时候会去寻找是不是配置了别的工厂,如果配置了,将替换这个工厂的引用
private AbstractWorkflowFactory factory = new URLWorkflowFactory();
//持久化信息的map,从配置文件中读出来,存放到这个map中
private Map persistenceArgs = new HashMap();
//完成持久化信息的各种工作的类全路径
private String persistenceClass;
//这个引用本身是一个接口,它将在初始化发生的时候,赋予它的子类实现,这个接口在类中直接被实例化成WorkflowStore这接口的实现类。具体使用什么实现类将在配置文件中配置。
private transient WorkflowStore store = null;
//这个是配置是否完成的标志字段,这个字段在load方法完成的时候,被设置为true
private boolean initialized;
SpringConfiguration这个类为和Spring的整合提供了支持,目前还没有对Spring整合进行分析,在这里暂时不进行分析,将在以后补充。
3、 loader 这个包,这个包中有大量的Descriptor,这些个描述符对象,记录了一个流程实例的步骤、动作、状态、名称等信息。由于这个类图过分庞大,因此不在这里出图例。这个类中也有一些关键的流程模型加载的工厂类,完成流程模型信息的初始化。我们在实际的应用中,只使用到了XMLWorkflowFactory,那么我们的流程配置文件自然也就使用了xml格式,在AbstractWorkflow中,大量的调用到了这个类的接口,来获取模型对象。这个类的详细分析,将放到以后的文档中。这里只要明白这个类是保存里流程模型对象的工厂,也就对模型进行一些操作,比如删除和保存一个流程模型。
4、 spi 这个包里面的东西也很多,主要我们会提到的是记录流程实例状态的对象、持久化真正实现的方式。先来看看实例状态对象的类图:
![](http://www.bokee.net/userfilespace/2006/05/14/zstzah43365.gif)
SimpleWorkflowEntry这个类,经常会用到,在流程启动和运行过程中,我们通常都使用这个类来标识流程实例的所对应的模型和实例状态。
5、还有就是真正操作持久类的对象Store
![](https://i-blog.csdnimg.cn/blog_migrate/02bd72b5a18293240e85f4ba5f1fd799.png)
这里只把实际操作流程数据库的jdbc实现类图画出来。创建流程实例对象到数据库,操作流程实例相关的很多数据库数据。