BPEL 語言介紹和應用

来源:http://www.cnblogs.com/shouce/archive/2016/04/21/5415492.html
-Advertisement-
Play Games

概述 BPEL:全稱為Business Process Execution Language,即業務流程執行語言,是一種使用XML編寫的編程語言。用於自動化業務流程,也曾經被稱作WSBPEL和 BPEL4WS。廣泛使用於Web服務相關的項目開發中,優點為具有可移植性和有效保護了投資。 BPEL是一門 ...


概述

BPEL:全稱為Business Process Execution Language,即業務流程執行語言,是一種使用XML編寫的編程語言。用於自動化業務流程,也曾經被稱作WSBPEL和 BPEL4WS。廣泛使用於Web服務相關的項目開發中,優點為具有可移植性和有效保護了投資。 
BPEL是一門用於自動化業務流程的形式規約語言。 用XML文檔寫入BPEL中的流程能在Web 服務之間以標準化的交互方式得到精心組織。這些流程能夠在任何一個符合BPEL規範的平臺或產品上執行。 所以,通過允許顧客們在各種各樣的創作工具和執行平臺之間移動這些流程,BPEL使得他們保護了他們在流程自動化上的投資。儘管以前想使業務流程定義標準化,但BPEL已經引起了史無前例的興趣,而且它最早在軟體供應商中獲得大量認可。

抽象的和可執行的過程

可執行的過程是一個可以在一個電腦上執行的過程。抽象過程是用來描述一個過程的反應的。它被用在一個可執行過程的錶面來將這個過程的內部行為掩飾起來不讓業務對象看到。

發展狀況

目前的版本是2.0,這個版本是OASIS於2007年4月11日推出的。

BPEL活動

BPEL常用的一些基本活動,這些是最基礎的,也就是說不基於其它活動的活動:

      • assign——賦值
      • invoke——同步或非同步地呼叫一個Web服務
      • receive/reply——提供一個同步或者非同步呼叫一個Web服務的介面
      • throw——提示一個錯誤,一個故障處理可以處理這樣的錯誤。假如一個錯誤不被處理的話它最終到達最高層後導致過程的終止
      • wait——等候一個時機或者一段時間
      • empty——無所事事,比如在一個錯誤發生後可以不做反應來消除這個錯誤

結構性活動,這些活動包括其它活動,可以以此建立複雜的過程:

      • sequence——按照一個序列處理一系列活動
      • while——在一個條件滿足的情況下處理一個活動
      • switch——按照不同條件處理不同活動
      • flow——平行或者按照隨意順序處理活動
      • pick——按照外部事件從過程的角度不定值地選擇

scopes——使用這個結構可以將一組活動組織在一起作為一個處理單位。通過這個組織方法多個活動可以使用同一個故障處理、事故處理和補償處理。通過補償處理BPEL可以處理長時間的處理。

1.Receive(接收)/ Reply(回答)

<receive>活動從流程的外部伙伴那獲取數據,並將其保存到流程變數。通常一個Receive是一個流程的初始點,它會阻塞執行直到匹配的消息的到達。

<reply>活動發送消息給伙伴來應答通過receive活動所接收到的消息。receive和reply的組合對應著WSDL portType上定義的一個請求-響應操作。如果receive活動對應著一個單向(one-way)操作,則不能在流程中定義對應的reply活動。

2.Invoke請求

<invoke>活動允許業務流程同步或非同步調用由合作伙伴提供的服務,服務實現可以是單向或請求-響應操作。Invoke活動使用“partnerLink”來引用伙伴服務。同過“portType”和“operation”指定相應的WSDL介面和操作。

3.Assign賦值

<assign>活動的作用是用新的數據來更新變數的值。Assign活動可以包括任意數量的基本複製操作。

4.Wait等待

<wait>活動會暫停流程執行,等待一段給定的時間或等到某一時刻才繼續運行。在WebSphere Process Server 6.0中,開發者可以非常靈活地指定wait中的到期條件,比如等待多少秒,等到特定的一個日期,或是使用內置的日期表現法。也可以使用Java代碼來動態指定等待時間。

BPEL也提供了豐富的結構化活動,可以靈活地控制流程執行。

5.Sequence順序

<sequence>活動定義一組按順序先後執行的活動。執行順序是sequence活動中嵌套活動的先後順序。當sequence中的最後一個活動完成後,該sequence活動也就完成了。

6.Flow流程

<flow>活動可以描述更為複雜的活動執行順序。我們可以利用flow指定一個或多個並行執行的活動。為了定義任意的控制結構,可以在並行的活動中使用鏈接。

flow能進一步表達直接或間接嵌套在其中的活動之間的同步相關性,link(鏈接)用來表達這種同步相關性。

flow活動出現的所有link必須在flow活動中分開定義,並通過名稱進行標識。flow活動中嵌套的活動需要通過source或target屬性來標明該活動為哪個鏈接的源或目標活動。在flow活動中,對於每一個link必須有且僅有一個活動作為它的源活動,同樣有且僅有一個活動作為它的目標活動。目標活動會在源活動完成之後執行。這樣flow內部的活動就可以通過活動構成一個有向圖。

我們還可以在link的源上定義transition(變遷)條件,當源活動完成之後,BPEL引擎會檢查變遷條件是否滿足,如果link的轉移條件滿足目標活動就會執行。

7.Switch分支

<switch>活動與傳統的結構化語言的功能類似,從一組分支情況中選擇一個特定的活動分支加以執行。switch由case元素定義的一個或多個條件分支的有序列表組成,後面可跟也可以不跟一個otherwise分支。以case分支的出現順序檢查,第一個條件是true的分支被選擇並被作為被執行的活動。如果有條件的分支都未被選擇,那麼otherwise分支將被選擇。

8.While——While迴圈

<while>活動也繼承於傳統的結構化編程思想,提供了while-do迴圈結構的支持。它可以包含一個或多個活動。它指定反覆執行其內部活動,直到成功條件不被滿足為止。在WPS中允許其使用Java代碼來描述條件表達式。

9.Pick 選取(在WPS中被稱為Receive Choice)

<pick>活動會等待一組相互排斥事件中的一個事件的發生,然後執行與發生的事件相關聯的活動。它會阻塞業務流程執行,以等待某一特定的事件發生,比如接收到一個合適的消息或超時警報響起。當其中任何一個事件被觸發後,業務流程就會繼續執行,pick也隨即完成了,不會再等待其他事件的發生。

每個pick活動必須至少包括一個onMessage事件。onMessage事件的語義等同於有關變數屬性的可選類型的receive活動。pick活動還可以定義onAlarm事件用於指定超時警報。

以下是用BPEL定製的一個簡單的狀態機工作流流程程:

 

<process name="TestStateWorkFlow" targetNamespace="http://BusinessProcessDiagram1" xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/" xmlns:Pool="http://mypool" xmlns:tns=http://BusinessProcessDiagram1 
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <partnerLinks>
	    <partnerLink name="CommonState" partnerLinkType="lns:CommonState" myRole="EmployeeRole" 
       partnerRole="EmployeeParterRole" />
          <partnerLink name="ManageState" partnerLinkType="lns:ManageState" myRole="ManageRole" 
       partnerRole="ManageParterRole" />
	  <partnerLink name="DoneState" partnerLinkType="lns:DoneState" myRole="DoneRole" partnerRole="DoneParterRole" />
          <partnerLink name="RefuseState" partnerLinkType="lns:RefuseState" myRole="RefuseRole" partnerRole="RefuseParterRole" />
    </partnerLinks>
    <variables>
            <variable messageType="xsd:string" name="EmployeeOperation"/>
		<variable messageType="xsd:string" name="ManageOperation"/>
		<variable messageType="xsd:string" name="RemarkMessage"/>
    </variables>
    <sequence>     
		<invoke name="Common" partnerLink="CommonState" portType="EmployeeAction" operation="StateOperation" 
          inputVariable="EmployeeOperation" />
        <switch name="EmployeeAction">
            <case condition="Submit">
                <sequence>
                   <invoke name="Manage" partnerLink="ManageState" portType="ManageAction" operation="StateOperation" 
           inputVariable="ManageOperation" />
                </sequence>
            </case>
	  <case condition="Resubmit">
                <sequence>
                   <invoke name="Manage" partnerLink="ManageState" portType="ManageAction" operation="StateOperation" 
           inputVariable="ManageOperation" />
                </sequence>
            </case>
            <case condition="Save">
                <sequence>
                   <invoke name="Common" partnerLink="CommonState" portType="EmployeeAction" operation="StateOperation" 
           inputVariable="EmployeeOperation" />
                </sequence>
            </case>
	  <case condition="Revoke">
                <sequence>
                   <invoke name="Common" partnerLink="CommonState" portType="EmployeeAction" operation="StateOperation" 
           inputVariable="EmployeeOperation" />
                </sequence>
            </case>
        </switch>
        <invoke name="Manage" partnerLink="ManageState" portType="ManageAction" operation="StateOperation" 
     inputVariable="ManageOperation" />
	<switch name="ManageAction">
            <case condition="Approve">
                <sequence>
                   <invoke name="Done" partnerLink="DoneState" portType="None" operation="StateOperation" 
           inputVariable="RemarkMessage" />
                </sequence>
            </case>
            <case condition="Reject">
                <sequence>
                   <invoke name="Refuse" partnerLink="RefuseState" portType="None" operation="StateOperation" 
           inputVariable="RemarkMessage" />
                </sequence>
            </case>
        </switch>
		<invoke name="Done" partnerLink="DoneState" portType="None" operation="StateOperation" 
         inputVariable="RemarkMessage" />
		<invoke name="Refuse" partnerLink="RefuseState" portType="None" operation="StateOperation" 
         inputVariable="RemarkMessage" />
    </sequence>
</process>

 

 

這個流程圖表達的意思是:

StateWorkFlowStateDiagram

 

就是一個簡單的BPEL語言設計狀態機工作流。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Qt Creator 你必須要掌握的快捷操作 多使用快捷鍵能顯著提高工作效率,儘可能減少鍵盤,滑鼠之間切換所浪費的時間。我這裡列出個人認為非常重要必須掌握的 Qt Creator 快捷鍵。看你知道幾個? Qt Creator 你必須要掌握的快捷操作 多使用快捷鍵能顯著提高工作效率,儘可能減少鍵盤,鼠 ...
  • 一Linux伺服器突然發送不出郵件,檢查了很多地方都沒有發現異常,檢查/var/log/maillog發現如下具體信息: Apr 12 00:36:04 mylinux sendmail[4685]: u3BGa4Is004685: Authentication-Warning: mylinux.x... ...
  • DNS伺服器介紹 DNS是電腦功能變數名稱系統(Domain Name System 或Domain Name Service) 的縮寫,它是由功能變數名稱解析器和功能變數名稱伺服器組成的。功能變數名稱伺服器是指保存有該網路中所有主機的功能變數名稱和對應IP地址,並具有將功能變數名稱轉換為IP地址功能的伺服器。其中功能變數名稱必須對應一個IP地址,一個... ...
  • 今天學到了很有意思的三個命令:怎麼有意思 快看下圖啦! 這是Ubuntu系統下的三個命令,跟echo本質一樣,但是輸出的字元是圖形的 ,很可愛! 以下是安裝命令: sudo apt-get update;sudo apt-get install sysvbanner sudo apt-get upd ...
  • 磁碟分析 本機的系統盤是C盤,操作系統是Windows 7 專業版,通過磁碟屬性可以看到C盤的已用空間是69.4G。 而我們運行自己編寫的腳本(腳本程式參考附錄,統計原理:計算目錄下各個文件的大小,然後相加,即為該目錄的大小;再將各個目錄占用空間相加,即為總的占用空間),可以發現,占用空間為59G。 ...
  • 由於需要安裝hadoop集群,有10台機器需要安裝,一開始打算用SCP複製,後來覺得不可接受(實際現場可能數倍的機器集群,就是10台也不想乾)。後來在網上找了,發現了clustershell和pssh這兩個工具。這兩個工具隨便用其中一個就可以了。 環境說明:centos6.5機器10台 需求:確定一... ...
  • 我第一次接觸“線程”的概念時,覺得它深奧難懂,看了好多本書,花了很長時間才領悟到它的真諦。現在我就以一個初學者的心態,把我所理解的“多線程”描述給大家。這一次是系列文章,比較完整的展示與線程相關的基本概念。希望對初學者有所幫助。 如果你是高手,請你別繼續看,會浪費你寶貴的時間。 一、基本概念 什麼是 ...
  • 我們在做開發的時候,很多時候需要和Json數據格式打交道,如Web開發裡面,很多時候,數據通過Json進行傳遞到頁面上,然後在進行處理的。而使用Json的時候,我們很多時候會涉及到幾個序列化對象的使用:DataContractJsonSerializer,JavaScriptSerializer 和 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...