1. 程式人生 > >JBoss 系列一 O O:Maven jBPM 6 集成演示樣例

JBoss 系列一 O O:Maven jBPM 6 集成演示樣例

保存 三種方式 trac avi 周期 osi lob kylin 版本

概述

jBPM 6 中底層架構基於 Maven,所以我們能夠非常easy的進行 Maven jBPM 6 集成演示樣例,本文分三個部分:

  • 基本原理介紹
  • Maven jBPM 6 集成
  • jBPM 6 中使用 Maven 特性實時監聽server端的更新

基本原理介紹

例如以下圖

技術分享

如圖所看到的,我們有兩臺server,jBPM 6 server和clientserver:

  • 首先 jBPM 6 server假設我們通過 Work Bench 將編輯完畢的流程打包公布,它會將其公布到 jBPM 6 server相應的 Maven 倉庫。這個倉庫相比較client的應用它屬於一個遠程倉庫。它對外提供的URL為:http://IP:8080/<app name>/maven2/。它須要安全認證,不是默認公開的倉庫
  • clientserver中執行的App它在內存中保存有一個 KieRepository,這個內存倉庫通過本地參考能夠與遠程 jBPM 6 server的倉庫保持實時更新
  • 本地倉庫通過Maven與遠程倉庫同步,我們須要在settings.xml中配置遠程倉庫的信息

Maven jBPM 6集成

Maven jBPM 6集成實際上就簡化為 Maven settings.xml的配置問題。

例如以下配置

<?

xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <servers> <server> <id>guvnor-m2-repo</id> <username>admin</username> <password>password1!</password> <configuration> <wagonProvider>httpclient</wagonProvider> <httpConfiguration> <all> <usePreemptive>true</usePreemptive> </all> </httpConfiguration> </configuration> </server> </servers> <profiles> <profile> <id>guvnor-m2-repo</id> <repositories> <repository> <id>guvnor-m2-repo</id> <name>BRMS Repository</name> <url>http://10.66.218.46:8080/business-central/maven2/</url> <layout>default</layout> <releases> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots> </repository> </repositories> </profile> </profiles> <activeProfiles> <activeProfile>guvnor-m2-repo</activeProfile> </activeProfiles> </settings>


如上為一配置演示樣例,我們能夠看出

  • 遠程 jBPM 6 server執行的Maven Repo為 http://10.66.218.46:8080/business-central/maven2/
  • 遠程 jBPM 6 server所須要的安全認證為 admin 和 password1!
  • 我們配置Maven 新版本號公布會自己主動更新。snapshots的最新版本號也會自己主動更新
有如上配置,例如以下代碼能夠執行獲取遠程 jBPM 6 server倉庫中的流程等:

		KieServices kServices = KieServices.Factory.get();
		ReleaseId releaseId = kServices.newReleaseId( "com.redhat.gss", "01081954", "1.1-SNAPSHOT" );
		KieContainer kContainer = kServices.newKieContainer( releaseId );
                KieBase kbase = kContainer.getKieBase();
		KieSession ksession = kbase.newKieSession();
		    

如上代碼執行能夠須要三種方式指定 settings.xml:

  • 通過JVM properties kie.maven.settings.custom 指定 Maven 配置文件 settings.xml
  • 到當前用戶下找 .m2/settings.xml
  • 到 M2_HOME 下找 /conf/settings.xml

jBPM 6 中使用 Maven 特性實時監聽server端的更新

借助於 Maven 的特性,KieScanner 能夠周期性的掃描遠程jBPM 6 server執行的Maven Repo。當有遠程公布有變更時。KieScanner 會自己主動更新 KieRepository,使其為最新的公布,例如以下代碼

		KieServices kServices = KieServices.Factory.get();
		ReleaseId releaseId = kServices.newReleaseId( "org.kie.example", "project1", "1.0.0-SNAPSHOT" );
		KieContainer kContainer = kServices.newKieContainer( releaseId );
		KieScanner kScanner = kServices.newKieScanner( kContainer );
		kScanner.start( 1000 * 10);
		
		
		while(true) {
			KieSession ksession = kContainer.newKieSession();
            ksession.fireAllRules();

            Thread.sleep(10000);
		}

假設我們更新遠程 project1 中的流程或規則文件。client的程序不要不論什麽變化會執行遠端的變化。

關於這一部分的深入原理參照 https://github.com/kylinsoong/jBPM-Drools-Example/blob/master/drools-6-examples/kie-mvn/kie-mvn-architecture.md

JBoss 系列一 O O:Maven jBPM 6 集成演示樣例