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