您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“如何部署工作流引擎”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
為了部署流程,需要包裝在一個(gè)業(yè)務(wù)文檔中
BPMN2.0流程
任務(wù)表單
規(guī)則
其他任意類型的文件
一個(gè)業(yè)務(wù)文檔是Activiti引擎部署的單元
一個(gè)業(yè)務(wù)文檔相當(dāng)與一個(gè)壓縮文件,它包含:
業(yè)務(wù)文檔是包含命名資源的容器
當(dāng)一個(gè)業(yè)務(wù)文檔被部署,它將會(huì)自動(dòng)掃描以**.bpmn20.xml或者.bpmn**作為擴(kuò)展名的BPMN文件.每個(gè)那樣的文件都將會(huì)被解析并且可能會(huì)包含多個(gè)流程定義
業(yè)務(wù)歸檔中的Java類將不能夠添加到類路徑下 為了能夠讓流程運(yùn)行,必須把存在于業(yè)務(wù)歸檔程中的流程定義使用的所有自定義的類(例如:Java服務(wù)任務(wù)或者實(shí)現(xiàn)事件的監(jiān)聽(tīng)器)放在 [activiti引擎的類路徑] 下
通過(guò)一個(gè)壓縮文件(支持Zip和Bar)部署業(yè)務(wù)文檔
也可以通過(guò)一個(gè)獨(dú)立資源(例如bpmn,xml等)構(gòu)建部署
String barFileName = "path/to/process-one.bar"; ZipInputStream inputStream = new ZipInputStream(new FileInputStream(barFileName)); repositoryService.createDeployment() .name("process-one.bar") .addZipInputStream(inputStream) .deploy();
Activiti web控制臺(tái)允許你通過(guò)web界面的用戶接口上傳一個(gè)bar格式的壓縮文件(或者一個(gè)bpmn20.xml格式的文件).選擇Management 標(biāo)簽和點(diǎn)擊Deployment:
流程定義保存在Activiti所支持的數(shù)據(jù)庫(kù)中
當(dāng)使用服務(wù)任務(wù),執(zhí)行監(jiān)聽(tīng)器
從Activiti配置文件中配置的Spring beans時(shí),流程定義能夠引用這些委托類.
這些類或者Spring配置文件對(duì)于所有流程引擎中可能執(zhí)行的流程定義必須是可用的
當(dāng)流程實(shí)例被啟動(dòng)的時(shí)候,在流程中被使用的所有自定義類應(yīng)該存在流程引擎的類路徑下:
JavaDelegates
事件監(jiān)聽(tīng)器
任務(wù)監(jiān)聽(tīng)器
服務(wù)任務(wù)中:
在部署業(yè)務(wù)文檔時(shí),這些類不必都存在于類路徑下.當(dāng)使用Ant部署一個(gè)新的業(yè)務(wù)文檔時(shí),意味著你的委托類不必存在類路徑下
當(dāng)使用示例設(shè)置添加自定義類:
應(yīng)該添加包含自定義類的jar包到activiti-explorer控制臺(tái)
activiti-rest的webapp lib文件夾中
不要忽略包含你自定義類的依賴關(guān)系
還可以將你自定義的依賴添加到你的Tomcat容器的安裝目錄中的${tomcat.home}/lib
當(dāng)表達(dá)式或者腳本使用Spring beans時(shí),這些beans對(duì)于引擎執(zhí)行流程定義時(shí)必須是可用的
如果要構(gòu)建自定義的web應(yīng)用并且按照Spring集成在應(yīng)用上下文配置流程引擎.要記住,如果在使用Activiti rest web應(yīng)用,那么也應(yīng)該更新Activiti rest web應(yīng)用的上下文.可以把在activiti-rest/lib/activiti-cfg.jar文件中的activiti.cfg.xml替換成的Spring上下文配置的activiti-context.xml文件
可以將Activiti rest web應(yīng)用加入到web應(yīng)用之中,只需要配置一個(gè) ProcessEngine,
從而不用確保所有的流程引擎的所有委托類在類路徑下面并且是否使用正確的spring配置
BPMN中并沒(méi)有版本的概念,而在Activiti中,流程定義的版本會(huì)在部署時(shí)創(chuàng)建,在部署的時(shí)候,流程定義被存儲(chǔ)到Activiti使用的數(shù)據(jù)庫(kù)之前,Activiti將會(huì)自動(dòng)給流程定義分配一個(gè)版本號(hào)
業(yè)務(wù)文檔中每一個(gè)的流程定義,都會(huì)通過(guò)下列部署執(zhí)行初始化屬性key,version,name和id:
XML文件中流程定義(流程模型)的id屬性被當(dāng)做是流程定義的key屬性
XML文件中的流程模型的name屬性被當(dāng)做是流程定義的name 屬性.如果該name屬性沒(méi)有指定,那么id屬性被當(dāng)作是name屬性
帶有特定key的流程定義在第一次部署的時(shí)候,將會(huì)自動(dòng)分配版本號(hào)為1,對(duì)于之后部署相同key的流程定義時(shí)候,這次部署的版本號(hào)將會(huì)設(shè)置為比當(dāng)前最大的版本號(hào)大1的值.該key屬性被用來(lái)區(qū)別不同的流程定義
流程定義中的id屬性被設(shè)置為 {processDefinitionKey}:{processDefinitionVersion}:{generated-id}, 這里的generated-id是一個(gè)唯一的數(shù)字被添加, 用于確保在集群環(huán)境中緩存的流程定義的唯一性
<definitions id="myDefinitions" > <process id="myProcess" name="My important process" > ...
當(dāng)部署了這個(gè)流程定義之后,數(shù)據(jù)庫(kù)中的流程定義如下: |id|key|name|version| |--|--|--|--| |myProcess:1:676|myProcess|My important process|1|
假設(shè)部署用一個(gè)流程的最新版本號(hào)(改變用戶任務(wù)),但是流程定義的id保持不變.流程定義表將包含以下列表信息:
id | key | name | version |
---|---|---|---|
myProcess:1:676 | myProcess | My important process | 1 |
myProcess:2:870 | myProcess | My important process | 2 |
當(dāng)runtimeService.startProcessInstanceByKey("myProcess") 方法被調(diào)用時(shí),它將會(huì)使用流程定義版本號(hào)為2的, 因?yàn)檫@是最新版本的流程定義.可以說(shuō)每次流程定義創(chuàng)建流程實(shí)例時(shí),都會(huì)默認(rèn)使用最新版本的流程定義 |
創(chuàng)建第二個(gè)流程,在Activiti中,定義并且部署它,該流程定義會(huì)添加到流程定義表中:
<definitions id="myNewDefinitions" > <process id="myNewProcess" name="My important process" > ...
表結(jié)構(gòu)如下所示:
id | key | name | version |
---|---|---|---|
myProcess:1:676 | myProcess | My important process | 1 |
myProcess:2:870 | myProcess | My important process | 2 |
myNewProcess:1:1033 | myNewProcess | My important process | 1 |
注意: 新流程的key與我們的第一個(gè)流程是不同的,盡管流程定義的名稱name是相同的(當(dāng)然,名稱name也可以是不相同的),Activiti僅僅只考慮id屬性判斷流程. 因此,新的流程定義部署的版本號(hào)為1
流程定義的流程圖可以被添加到部署中,該流程圖將會(huì)持久化到Activiti所使用的數(shù)據(jù)庫(kù)中并且可以通過(guò)Activiti的API進(jìn)行訪問(wèn).
流程圖也可以被用來(lái)在Activiti Explorer控制臺(tái)中的流程中進(jìn)行顯示
如果在我們的類路徑下面有一個(gè)流程:org/activiti/expenseProcess.bpmn20.xml, 該流程定義有一個(gè)流程key=expense. 以下遵循流程定義圖片的命名規(guī)范(按照這個(gè)特定順序):
應(yīng)該是org/activiti/expenseProcess.png.注意:這意味著在同一個(gè)BPMN2.0 XML文件夾中的每個(gè)流程定義都會(huì)有相同的流程定義圖片.因此,在每一個(gè)BPMN 2.0 XML文件夾中僅僅只有一個(gè)流程定義,這絕對(duì)是不會(huì)有問(wèn)題的
應(yīng)該是org/activiti/expenseProcess.expense.png(或者jpg/gif).如果在一個(gè)BPMN2.0 XML文件中定義多個(gè)流程定義圖片,這種方式更有意義.每個(gè)流程定義圖片的文件名中都將會(huì)有一個(gè)流程定義key
如果在部署時(shí)一個(gè)圖片資源已經(jīng)存在,是BPMN2.0的XML文件名,后面是流程定義的key并且是一個(gè)圖片的后綴.那么該圖片將被使用.
如果并沒(méi)有這樣的圖片存在,部署的時(shí)候?qū)ふ遗c匹配BPMN2.0 XML文件的名稱的圖片資源
使用編程式的部署方式:
repositoryService.createDeployment() .name("expense-process.bar") .addClasspathResource("org/activiti/expenseProcess.bpmn20.xml") .addClasspathResource("org/activiti/expenseProcess.png") .deploy();
接下來(lái),可以通過(guò)API來(lái)獲取流程定義圖片資源:
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() .processDefinitionKey("expense") .singleResult(); String diagramResourceName = processDefinition.getDiagramResourceName(); InputStream imageStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), diagramResourceName);
在部署的情況下沒(méi)有提供圖片,如果流程定義中包含必要的'圖像交換'信息時(shí),Activiti流程引擎會(huì)自動(dòng)生成一個(gè)圖像
該資源可以按照上面部署時(shí)提供流程圖片完全相同的方式獲取:
如果因?yàn)槟撤N原因,在部署的時(shí)候,并不需要或者不必要生成流程定義圖片,那么就需要在流程引擎配置的屬性中使用isCreateDiagramOnDeploy進(jìn)行配置就可以不生成流程定義圖片:
<property name="createDiagramOnDeploy" value="false" />
部署和流程定義都是用戶定義的類別
流程定義類別在BPMN文件中屬性的初始化的值:
<definitions ... targetNamespace="yourCategory" ... />
部署類別是可以直接使用API進(jìn)行指定:
repositoryService .createDeployment() .category("yourCategory") ... .deploy();
“如何部署工作流引擎”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。