Tom:過(guò)程虛擬機(jī)(Process Virtual Machine)是我們?cè)?a id="y70y15" href="http:///">jBPM探索過(guò)程中核心概念的最終產(chǎn)物。
jBPM一開(kāi)始使用被稱(chēng)為jPDL的單一過(guò)程語(yǔ)言,但是在成為JBoss一部分后不久,用戶就一直問(wèn)我們是否也能支持BPEL。那時(shí)我意識(shí)到j(luò)PDL實(shí)現(xiàn)和BPEL有許多重疊的地方。自從那時(shí)起,我們就一直從過(guò)程語(yǔ)言特殊部分中抽取公共部分。
jBPM 3已經(jīng)有了能工作的全部概念,它能運(yùn)行多種過(guò)程語(yǔ)言,如天生就支持jPDL和BPEL。但是缺點(diǎn)是它仍是一個(gè)大代碼庫(kù),不是真正的模塊。因?yàn)锽PM和工作流領(lǐng)域完全都是各自為政,多種過(guò)程語(yǔ)言的需要日益明顯。因此,我們需要一個(gè)更模塊化的方法。
那就是過(guò)程虛擬機(jī)出現(xiàn)的原因。它是一個(gè)用來(lái)構(gòu)建和執(zhí)行過(guò)程圖的代碼庫(kù)。過(guò)程語(yǔ)言的本地實(shí)現(xiàn)可以構(gòu)建于過(guò)程虛擬機(jī)之上。此外,它可以運(yùn)行在任何Java環(huán)境之內(nèi),不論它是標(biāo)準(zhǔn)Java、企業(yè)Java,還是SEAM或Spring。
InfoQ:為什么這很重要?
Tom:一 方面,業(yè)務(wù)過(guò)程管理(BPM)和工作流領(lǐng)域完全都是各自為政。有很多針對(duì)特定用例和環(huán)境的不同類(lèi)型的過(guò)程語(yǔ)言。這和領(lǐng)域特定語(yǔ)言(DSL)有些相似;不是 一門(mén)語(yǔ)言就可以把全部事情都搞定。目前,所有這些語(yǔ)言都有一套自己的單片式(monolithic)引擎,這并不實(shí)用,而且它們也很難包含到一個(gè)應(yīng)用之 中。
過(guò)程虛擬機(jī)提供了一個(gè)簡(jiǎn)單的統(tǒng)一結(jié)構(gòu)來(lái)使這些過(guò)程語(yǔ)言運(yùn)行在一個(gè)核心技術(shù)之上。
另一方面,Java領(lǐng)域也同樣是分裂的。與那些必須在一個(gè)單獨(dú)服務(wù)器上隔離運(yùn)行的傳統(tǒng)過(guò)程引擎不同,過(guò)程虛擬機(jī)可以內(nèi)嵌到你的應(yīng)用中運(yùn)行,不管什么Java環(huán)境。這大大降低了使用過(guò)程技術(shù)的項(xiàng)目的門(mén)檻,因?yàn)檫^(guò)程持久化可以被透明地與應(yīng)用持久化集成。
InfoQ:應(yīng)用開(kāi)發(fā)人員需要使用過(guò)程虛擬機(jī)本身工作嗎?

但是,應(yīng)用開(kāi)發(fā)人員了解過(guò)程虛擬機(jī)基本概念還是很重要的。就像開(kāi)發(fā)人員為了使用關(guān)系數(shù)據(jù)庫(kù)而需了解表、列、主鍵和SQL查詢(xún)基本概念一樣,他們需要了解過(guò)程虛擬機(jī)概念,如過(guò)程定義、執(zhí)行異常和異步延拓(continuation)。
InfoQ:Bull現(xiàn)在已經(jīng)與JBoss合作來(lái)支持PVM概念——你們?cè)诤推渌献骰锇楣彩聠幔?br id="y70y48">
InfoQ:到現(xiàn)在為止,有哪些主要挑戰(zhàn)是你們不得不克服的?
- 對(duì)實(shí)現(xiàn)的分析:這是當(dāng)今單純的(pure-play)BPM套件的目標(biāo)。從一個(gè)分析圖開(kāi)始,然后將其轉(zhuǎn)換成可執(zhí)行的軟件。許多傳統(tǒng)廠商試圖用大量魔法掩蓋分析過(guò)程圖和可執(zhí)行軟件間的重大區(qū)別。
這暗示著:圖是負(fù)責(zé)需求的非技術(shù)人員和負(fù)責(zé)自動(dòng)化的技術(shù)人員之間重要的溝通工具。但是大體上,沒(méi)有技術(shù)手段能夠從非技術(shù)人員的輸入產(chǎn)出可用于生產(chǎn)環(huán)境的軟件。
要 使分析人員和開(kāi)發(fā)人員之間能夠協(xié)作,可執(zhí)行過(guò)程語(yǔ)言就必須足夠靈活完全匹配分析圖。像可自定義活動(dòng)實(shí)現(xiàn)和事件監(jiān)聽(tīng)器這樣的特性對(duì)于確保分析人員在圖變得可 執(zhí)行之后仍能認(rèn)出它來(lái)說(shuō)至關(guān)重要。jPDL非常適合這個(gè)用途。它還提供了一個(gè)與Java技術(shù)的清晰集成,一個(gè)開(kāi)發(fā)人員喜歡的簡(jiǎn)潔、易讀的XML語(yǔ)法。 XPDL也支持這個(gè)用例。XPDL的語(yǔ)法更加復(fù)雜和缺乏可讀性,但是它的移植性更好,因?yàn)楦嗟膹S商正在采用這種標(biāo)準(zhǔn),雖然緩慢但是穩(wěn)定。 - 異步Java架構(gòu):就使用異步架構(gòu)來(lái)說(shuō),Java的確沒(méi)提供吸引眼球的解決方案。事實(shí)上,這是個(gè)大麻煩。
一 方面,企業(yè)平臺(tái)有用于異步消息的JMS和EJB定時(shí)器。但是,那些都非常的底層。你需要很多部署描述符來(lái)支持一個(gè)長(zhǎng)期運(yùn)行的過(guò)程,非常麻煩。而且接下來(lái), 關(guān)于事物如何關(guān)聯(lián)的整體視圖完全不見(jiàn)了。通過(guò)jPDL,這個(gè)整體視圖清晰可見(jiàn),而且熱部署就像做餅一樣容易。只需在一個(gè)圖形工具中重新配置圖中的變遷 (transition)并重新部署,而不是花上好幾個(gè)小時(shí)書(shū)寫(xiě)麻煩的企業(yè)部署描述符。
另一方面,標(biāo)準(zhǔn)Java平臺(tái)完全不支持異步架構(gòu)。jPDL和標(biāo)準(zhǔn)Java平臺(tái)結(jié)合得非常緊密,它利用了來(lái)自過(guò)程虛擬機(jī)的工作執(zhí)行器(job executor)來(lái)提供異步延拓(continuation)和定時(shí)器。
因此現(xiàn)在,由于有了基本的過(guò)程虛擬機(jī)基礎(chǔ)設(shè)施,一個(gè)單一jPDL過(guò)程就可捕獲人、Java代碼和其他事物的異步編制,并可使那個(gè)邏輯在標(biāo)準(zhǔn)和企業(yè)Java環(huán)境間可移植。 - 服務(wù)編制:對(duì)于服務(wù)編制來(lái)說(shuō),BPEL已經(jīng)廣泛被接受,并成為被支持的標(biāo)準(zhǔn)。它操作在企業(yè)服務(wù)總線(ESB)級(jí)別,因此它是一種集成技術(shù)。一個(gè)BPEL過(guò)程可以(過(guò)分簡(jiǎn)化的)被認(rèn)為是Web服務(wù)級(jí)別的腳本。WSDL服務(wù)可通過(guò)BPEL被描述成粗粒度的服務(wù)。
InfoQ:讀者可以在哪里找到關(guān)于PVM的更多信息?
Tom:首先,6月6號(hào)在都柏林會(huì)舉辦一個(gè)jBPM社區(qū)日的活動(dòng)。這是一次jBPM核心開(kāi)發(fā)人員、合作伙伴、客戶和其他只是想更多了解jBPM的人之間絕佳的溝通機(jī)會(huì)?;顒?dòng)是免費(fèi)的,在一個(gè)周五下午。欲知詳情,請(qǐng)查看jBPM社區(qū)日Wiki頁(yè)或發(fā)郵件至dublin@。
其次,對(duì)于那些缺乏耐心的讀者,這兒有一個(gè)已經(jīng)手把手地解釋如何使用它來(lái)構(gòu)建活動(dòng)和開(kāi)始運(yùn)行它的PVM手冊(cè)。
最后,這兒還有一篇InfoQ文章“過(guò)程組件模型:下一代工作流?”,它已于最近發(fā)布,給出了關(guān)于這一主題的更多背景資料。
查看英文原文:Tom Baeyens on the Process Virtual Machine
來(lái)自:http://www./cn/news/2008/05/processvirtualmachine