工作流開發
工作流開發
開發功能庫函數
1. 使用maven創建jar項目,並編寫工作流執行函數 參考pom配置
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>xxx-workflow-library</artifactId>
<description>xxx</description>
<dependencies>
<!-- 使用統一的日誌框架,保證日誌正常輸出到統一的文件中,必須標記為provided -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- 按需引入,必須標記為provided -->
<dependency>
<groupId>com.zondy.mapgis.igs</groupId>
<artifactId>mapgis-igs-api</artifactId>
<version>10.X.X.X</version>
<scope>provided</scope>
</dependency>
<!-- igs-local為本地依賴,必須標記為provided -->
<dependency>
<groupId>igs-local</groupId>
<artifactId>mapgis_geoobjects</artifactId>
<version>1.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>igs-local</groupId>
<artifactId>mapgis_geomap</artifactId>
<version>1.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>igs-local</groupId>
<artifactId>mapgis_geodatabase</artifactId>
<version>1.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>igs-local</groupId>
<artifactId>mapgis_geoanalysis</artifactId>
<version>1.0.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<!--這裡不加版本號,因為註冊功能時會記住文件名,也方便覆蓋更新-->
<finalName>${project.artifactId}</finalName>
<appendAssemblyId>false</appendAssemblyId>
<attach>false</attach>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>2. 示例maven工程結構 
3. 使用命令mvn package打包為一個單獨的jar
4. 將jar放到igserver_for_java\workflow\FunctionLibrary\GIS\xxx\jar,啟動xxx為新建的目錄
5. 執行igserver_for_java\bin\start-function-library-server-host.bat,啟動功能倉庫服務,如下圖 
創建工作流
1. 打開program下IGSWorkflow.exe, 添加功能倉庫配置工具 ,注意可能沒有功能倉庫設置按鈕,這是需要手動添加按鈕,將圖中按鈕拖放到工具條上


2. 配置工作流倉庫

3. 註冊包含功能的jar包

4. 註冊好的文件會在功能倉庫裡面顯示

5. 右鍵點擊註冊好的文件,點擊註冊功能模塊
6. 右鍵點擊註冊好的功能模塊,點擊註冊功能

7. 新建流程,流程目錄的數量固定,不能添加,在系統流程目錄中任選一個,右鍵點擊並選擇新建流程,新建的流程必須填入流程名稱,其它的可以按需填寫

8. 在新建的流程中添加開始節點與結束節點,並添加功能倉庫中第六步註冊好的功能。開始節點與結束節點的添加方式為:右鍵->選擇添加節點(結束節點)->鼠標左鍵按住不放拖拽出一個矩形->創建完成,功能節點可以直接在功能倉庫中拖拽出來。將鼠標放在一個節點按住拖拽至另一個節點即可讓兩節點相連

9. 編輯流程參數,右鍵點擊第七步創建好的流程,選擇編輯流程參數,編輯輸入參數與輸出參數

10. 編輯節點屬性,雙擊第八步創建的功能節點,修改節點屬性。注意,這裡的每個參數都要修改參數來源類型
{ width=776 height=589 }
{ width=776 height=650 }
11. 執行測試,右鍵點擊第七步新建的流程,選擇執行,填入參數,點擊確定
{ width=776 height=417 }
12. 導出工作流模板,測試結果與預期一致後,右鍵流程,選擇導出,並在IGServer Manager中導入該流程
工作流的類加載器
使用了類似pf4j的插件化類隔離技術,解決多個工作流庫之間的類相互汙染,這裡使用的策略是插件的類加載器優先,類似tomcat容器的框架與web應用的關係。
${MapGIS_HOME}/igserver_for_java/workflow/FunctionLibrary/GIS文件夾下每個文件夾為一個單獨的工作流庫,系統為每個工作流庫創建一個單獨的ClassLoader,該ClassLoader的parent為workflow-host-x.x.x.x.jar進程的ClassLoader。
igserver_for_java
└── workflow
└── FunctionLibrary
└── GIS
├── Lib1 #------------ 類加載1
│ └── jar
│ └── xxx.jar
├── Lib2 #------------ 類加載2
└── Libx #------------ 類加載x框架的依賴可以通過打開
workflow-host-x.x.x.x.jar文件(Springboot FatJar),查看其依賴的jar包。一定要注意,如果框架內包括的依賴A還需要補充間接依賴B(B為可選依賴,框架中並不包含),一定要在插件中將框架依賴A和間接依賴B一起加到插件中,這是由類加載全盤負責委託機制決定的,即框架依賴的間接依賴B只能框架自己提供,因此需要補充間接依賴B的時候,必須把框架依賴A+間接依賴B一起加進來。