当前位置: 首页 > 工具软件 > Enhydra Shark > 使用案例 >

(9)Shark工作流的实现和WMFC&OMG规范的对比

燕凯旋
2023-12-01

Shark工作流的实现和WMFC&OMG规范的对比

                                 -----第九部分:分析obe自带例子的执行过程

 

关键字:Shark 工作流 WMFC OMG 规范

  

    Obe工作流的执行过程,下面来说说自带test中的例子的执行过程:

    初始化工作流引擎的时候需要一个RepositoryManager 的实例

    RepositoryManager 代表工作流执行中需要的资源库,比如:活动的参与者,活动中需要调用的外部工具信息,等等。然后进行工作流引擎的初始化:

    WorkflowEngine engine = new WorkflowEngine(repositoryManager);

    引擎初始化后用obexpdl解析类从用户定义的xpdl流程中实例化Package

    XPDLParser parser = new Dom4JXPDLParser();

FileInputStream in = new FileInputStream(file);

Package pkg = null;

            try{

                pkg = parser.parse(in);

            } catch(Exception e){

                log.fatal("Error parsing configuration: " + e.getMessage());

                e.printStackTrace();

                return;

            }

    然后把初始化后的package加入到引擎实例中:

    engine.addPackage(pkg);

    随后就执行了:

try{

        log.info("Executing workflow process " + packageId + ":" + processId);

        if(executionMode.equalsIgnoreCase("asynch")){

                log.info("Executing asynchronously");

                engine.executeAsynch(packageId, processId, getParameters());

        } else {

                log.info("Executing synchronously");

                engine.executeSynch(packageId, processId, getParameters());

        }

    } catch(Exception e){

log.error("Error executing workflow process " + processId + " in package " + packageId);

        e.printStackTrace();

    }

看起来整个执行流程很简单。

 

上面提到的RepositoryManager是如何初始化的呢?

例子中带的资源库有如下类型:

1、  BasicApplicationRepository

2、  BasicProcedureRepository

3、  BasicParticipantRepository

其中BasicParticipantRepository下面又包括:
1
RoundRobinGroup

2WorkflowSystem

 

    比如:添加管理和编辑人员信息:

        RoundRobinGroup editors = new RoundRobinGroup();

        editors.add(new Human("Bob Smith"));

        editors.add(new Human("Joe User"));

       

        RoundRobinGroup administrators = new RoundRobinGroup();

        administrators.add(new Human("Anthony Eden"));

       

        WorkflowSystem system = new WorkflowSystem();

       

        participantRepository.put("P1", editors);

        participantRepository.put("P2", administrators);

        participantRepository.put("P3", system);

        participantRepository.setDefaultConnector(system);

       

        getParticipantRepositories().add(participantRepository);

 

    BasicApplicationRepository appRepository = new BasicApplicationRepository();

        appRepository.put("A1", new DebugApplicationConnector("App 1"));

        appRepository.put("A2", new DebugApplicationConnector("App 2"));

        appRepository.put("A3", new RuntimeApplicationConnector(TEST_EXE,

           ExecutionType.SYNCHRONOUS));

        appRepository.put("A4", new DebugApplicationConnector("App 4", 10000));

        appRepository.put("A5", new DebugApplicationConnector("App 5"));

       

        getApplicationRepositories().add(appRepository);

 

    下面 我们根据obe提供的例子结合引擎分析 obe引擎的执行过程。

 

 

待续

田春峰

accesine@163.com

 

 类似资料: