(9)Shark工作流的實現和WMFC&OMG規範的對比 (轉)

themoney發表於2007-10-05
(9)Shark工作流的實現和WMFC&OMG規範的對比 (轉)[@more@]

Shark工作流的實現和WMFC&OMG規範的對比

  -----第九部分:分析obe自帶例子的過程

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

關鍵字:Shark 工作流 WMFC OMG 規範

 

  Obe工作流的執行過程,下面來說說自帶test中的例子的執行過程:

  初始化工作流引擎的時候需要一個RepositoryManager 的例項

  RepositoryManager 代表工作流執行中需要的資源庫,比如:活動的參與者,活動中需要的外部工具資訊,等等。然後進行工作流引擎的初始化:

  WorkflowEngine engine = new WorkflowEngine(repositoryManager);

  引擎初始化後用obe的xpdl解析類從定義的xpdl流程中例項化Package。

  XPDLParser parser = new 4JXPDLParser();

FileInputStream in = new FileInputStream(file);

Package pkg = null;

  try{

  pkg = parser.parse(in);

  } catch(Exception e){

  log.al("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 DeApplicationConnector("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引擎的執行過程。

待續

田春峰

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


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10794571/viewspace-974827/,如需轉載,請註明出處,否則將追究法律責任。

相關文章