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

概述

jBPM 6 中底层架构基于 Maven,所以我们可以很容易的进行 Maven jBPM 6 集成示例,本文分三个部分:

  • 基本原理介绍
  • Maven jBPM 6 集成
  • jBPM 6 中使用 Maven 特性实时监听服务器端的更新

基本原理介绍

如下图

JBoss 系列一 O O:Maven jBPM 6 集成示例_第1张图片

如图所示,我们有两台服务器,jBPM 6 服务器和客户端服务器:

  • 首先 jBPM 6 服务器如果我们通过 Work Bench 将编辑完成的流程打包发布,它会将其发布到 jBPM 6 服务器对应的 Maven 仓库,这个仓库相比较客户端的应用它属于一个远程仓库。它对外提供的URL为:http://IP:8080/<app name>/maven2/,它需要安全认证,不是默认公开的仓库
  • 客户端服务器中运行的App它在内存中保存有一个 KieRepository,这个内存仓库通过本地参考可以与远程 jBPM 6 服务器的仓库保持实时更新
  • 本地仓库通过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 服务器运行的Maven Repo为 http://10.66.218.46:8080/business-central/maven2/
  • 远程 jBPM 6 服务器所需要的安全认证为 admin 和 password1!
  • 我们配置Maven 新版本发布会自动更新,snapshots的最新版本也会自动更新
有如上配置,如下代码可以运行获取远程 jBPM 6 服务器仓库中的流程等:

		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 特性实时监听服务器端的更新

借助于 Maven 的特性,KieScanner 可以周期性的扫描远程jBPM 6 服务器运行的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 中的流程或规则文件,客户端的程序不要任何变化会运行远端的变化。关于这一部分的深入原理参照  https://github.com/kylinsoong/jBPM-Drools-Example/blob/master/drools-6-examples/kie-mvn/kie-mvn-architecture.md

你可能感兴趣的:(maven,jboss,jboss,jbpm,BPM,BPM,6,6,suite)