怎样应用osworkflow

1.初始化一流程
      // a workflow implement which does not read in the      
  //current user from any context,but allow one to be specified via the constructor
       Workflow workflow = new BasicWorkflow("starter");

//  Configuration object that is responsible for all 'static' workflow information.  就是指配置文件中的相关信息
// DefaultConfiguration 是Configuration接口的一个默认实现
// DefaultConfiguration类中的最主要方法         public void load(URL url) throws FactoryException
//      如果url不为null     ,就通过url.openStream()来得到       I nputStream.
 // 如果url为null,              先得到 当前线程的classloader, ClassLoader classLoader = //Thread.currentThread().getContextClassLoader(); 再通过classLoader得到osworkflow.xml配置文件  的//inputStream, is = classLoader.getResourceAsStream("osworkflow.xml");   从这一句源码中我们也可得知我
//们不应该更改osworkflow的 名字,注意osworklfow.xml的位置是classes文件夹下。
//is = classLoader.getResourceAsStream("/osworkflow.xml");
//is = classLoader.getResourceAsStream("META-INF/osworkflow.xml");
// is = classLoader.getResourceAsStream("/META-INF/osworkflow.xml");    
//从源码中以上三语句我们也可得知osworkflow.xml可以放在4个地方()。                              
 
//  如果 我们在开始一流程时,不写下面的两句语句也是可以的,这可以从源码中得到验证
//  在AbstractWorkflow.java中(BasicWorkflow继承自AbstractWorkflow,实现Workflow,而AbstractWorkflow 也是//interface Workflow的一个实现。此处也是一种模式的应用,因为AbstractWorkflow还是其它类的父类),
//BasicWorkflow 中有一方法    Configuration getConfiguration(),当其它地方要用到configuration这一属性
//时,都是通过这一方法来调用的。如果直接拿configuration的话,就会在每个使用的地方进行判断,出现代码
//冗余,并且如果到时逻辑变了,维护起来也困难。而通过getConfiguration的话,判断就只出现在一个地方。下面就先看一下其中的逻辑。
// .....Configuration config = (configuration != null) ? configuration : DefaultConfiguration.INSTANCE;
// if (!config.isInitialized())
// ......config.load(null); 其中对load();这一方法,我已经在上面进行逻辑分析.
DefaultConfiguration  config = new DefaultConfiguration();
        workflow.setConfiguration(config);

         HashMap map = new HashMap();
            map.put("type",type);
            workflowId = workflow.initialize("leave",0, map); // 褪初始化一个定义为leave的流程,

2. com.opensymphony.workflow.loader分析
 这个包定义了与工作流定义密切相关的类,包括与工作流定义中对应元素的java类(),相关的factory类和一些工具类
   java.lang.Object
         com.opensymphony.workflow.loader.AbstractWorkflowFactory
              com.opensymphony.workflow.loader.XMLWorkflowFactory
                           com.opensymphony.workflow.loader.JDBCWorkflowFactory
AbstractWorkflowFactory是基类,定义了工作流定义的管理,以及工作流描述类(WorkflowDescriptor)的创建。factory类对应配置文件中的<factory>元素。和XMLWorkflowFactory处于同一层 的还有URLWorkflowFactory,它们都会使用WorkflowLoader来加载指定的工作流定义。是分析工作定义产生WorkflowDescriptor.
     代码:
 在 public WorkflowDescriptor getWorkflow(String name, boolean validate)中最后将后调用 如下 的private method.
    private void loadWorkflow(WorkflowConfig c, boolean validate) throws FactoryException {
        try {
            c.descriptor = WorkflowLoader.load(c.url, validate);
        } catch (Exception e) {
            throw new FactoryException("Error in workflow descriptor: " + c.url, e);
        }

对于JDBCWorkflowFactory:Workflow Factory that stores workflows in a database. The database requires a property called 'datasource' which is the JNDI name of the datasource for this factory.
  和XMLWorkflowFactory一大不同点就是用 数据库来管理 工作流定义,它支持移除工作流定义。为了使用它Also required is a database table called OS_WORKFLOWDEFS with two columns, WF_NAME which contains the workflow name, and WF_DEFINITION which will contain the xml workflow descriptor, the latter can be either a TEXT or BINARY type. xml定义可以以text 或 二进制进行保存。 在通过workflow name得到 WorkflowDescriptor 时,仍是调用 WorkflowLoader.load(is, validate)来得到WorkflowDescripto,is 是工作流定义从数据库中取出后的一个ByteArrayInputStream.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值