ITPub博客

首页 > 应用开发 > IT综合 > (9)Shark工作流的实现和WMFC&OMG规范的对比 (转)

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

原创 IT综合 作者:themoney 时间:2007-10-05 21:03:30 0 删除 编辑
(9)Shark工作流的实现和WMFC&OMG规范的对比 (转)[@more@]

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

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

XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

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

 

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

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

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

  WorkflowEngine engine = new WorkflowEngine(repositoryManager);

  引擎初始化后用obe的xpdl解析类从用户定义的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

2)WorkflowSystem

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

    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引擎的执行过程。

待续

田春峰

Mailto:accesine@163.com">accesine@163.com


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10794571/viewspace-974827/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 学习队列 (转)
请登录后发表评论 登录
全部评论
  • 博文量
    119
  • 访问量
    337658