OSWorkflow 包用途分析及代碼片斷[原作者:Rosen Jiang]

來源:互聯網
上載者:User
出自:http://blog.csdn.net/rosen/archive/2005/04/10/342134.aspx

OSWorkflow 包用途分析及代碼片斷
   
com.opensymphony.workflow
    該包為整個 OSWorkflow 引擎提供核心介面。例如 com.opensymphony.workflow.Workflow 介面,可以說,實際開發中的大部分工作都是圍繞該介面展開的,該介面有 BasicWorkflow、EJBWorkflow、OfbizWorkflow 三個實作類別。

com.opensymphony.workflow.basic
    該包有兩個類,BasicWorkflow 與 BasicWorkflowContext。BasicWorkflow 不支援事務,儘管依賴持久實現,事務也不能包裹它。BasicWorkflowContext 在實際開發中很少使用。

  public void setWorkflow(int userId) {
  Workflow workflow = new BasicWorkflow(Integer.toString(userId));
 }

com.opensymphony.workflow.config
    該包有一個介面和兩個該介面的實作類別。在 OSWorkflow 2.7 以前,狀態由多個地方的靜態欄位維護,這種方式很方便,但是有很多缺陷和約束。最主要的缺點是無法通過不同配置運行多個 OSWorkflow 執行個體。實作類別 DefaultConfiguration 用於一般的設定檔載入。而 SpringConfiguration 則是讓 Spring 容器管理配置資訊。

  public void setConfiguration(SpringConfiguration configuration) {
  SpringConfiguration configuration = configuration;
workflow.setConfiguration(configuration);
 }

com.opensymphony.workflow.ejb
    該包有兩個介面 WorkflowHome 和 WorkflowRemote。該包的若干類中,最重要的是 EJBWorkflow,該類和 BasicWorkflow 的作用一樣,是 OSWorkflow 的核心,並利用 EJB 容器管理事務,也作為工作流程 session bean 的封裝器。

com.opensymphony.workflow.loader
    該包有若干類,用得最多的是 XxxxDescriptor,如果在工作流程引擎運行時需要瞭解指定的動作、步驟的狀態、名字,等資訊時,這些描述符會起到很大作用。

  public String findNameByStepId(int stepId,String wfName) {
  WorkflowDescriptor wd = workflow.getWorkflowDescriptor(wfName);
  StepDescriptor stepDes = wd.getStep(stepId);
  return stepDes.getName();
 }

com.opensymphony.workflow.ofbiz
    OfbizWorkflow 和 BasicWorkflow 在很多方面非常相似,除了需要調用 ofbiz 的 TransactionUtil 來封裝事務。

com.opensymphony.workflow.query
    該包主要為查詢而設計,但不是所有的工作流程儲存都支援查詢。通常,Hibernate 和 JDBC 都支援,而記憶體工作流程儲存不支援。值得注意的是 Hibernate 儲存不支援混合型查詢(例如,一個查詢同時包含了 history step 上下文和 current step 上下文)。執行一個查詢,需要建立 WorkflowExpressionQuery 執行個體,接著調用 Workflow 對象的 query 方法來得到最終查詢結果。

  public List queryDepAdmin(int userId,int type) {
  int[] arr = getSubPerson(userId,type);

  //構造運算式
  Expression[] expressions = new Expression[1 + arr.length];
  Expression expStatus = new FieldExpression(FieldExpression.STATUS,
    FieldExpression.CURRENT_STEPS, FieldExpression.EQUALS, "Queued");
  expressions[0] = expStatus;

  for (int i = 0; i < arr.length; i++) {
   Expression expOwner = new FieldExpression(FieldExpression.OWNER,
     FieldExpression.CURRENT_STEPS, FieldExpression.EQUALS,
     Integer.toString(arr[i]));
   expressions[i + 1] = expOwner;
  }

  //查詢未完成流編號
  List wfIdList = null;
  try {
   WorkflowExpressionQuery query = new WorkflowExpressionQuery(
     new NestedExpression(expressions, NestedExpression.AND));
   wfIdList = workflow.query(query);
  } catch (Exception e) {
   e.printStackTrace();
  }

com.opensymphony.workflow.soap
    OSWorkflow 通過 SOAP 來支援遠端調用。這種調用藉助 WebMethods 實現。

com.opensymphony.workflow.spi
    該包可以說是 OSWorkflow 與持久層打交道的途徑,如當前工作流程的實體,其中包括:EJB、Hibernate、JDBC、Memory、Ofbiz、OJB、Prevayler。

  HibernateWorkflowEntry hwfe = (HibernateWorkflowEntry) getHibernateTemplate()
     .find("from HibernateWorkflowEntry where Id="
         + wfIdList.get(i)).get(0);

com.opensymphony.workflow.util
該包是 OSWorkflow 的工具包,包括了對 BeanShell、BSF、EJB Local、EJB Remote、JNDI 的支援。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.