zoukankan      html  css  js  c++  java
  • JBoss 系列一 O O:Maven jBPM 6 集成演示样例

    概述

    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

  • 相关阅读:
    数据结构基础(二)排序算法
    数据结构基础(一) 时间空间复杂度分析
    347. Top K Frequent Elements, O(N) solution
    409. Longest Palindrome
    556. Next Greater Element III
    CH0103 最短Hamilton路径(状压DP)
    牛客OI周赛13-提高组A-0还是1(简单DP)
    Codeforces Round #678 (Div. 2) C. Binary Search(二分查找/思维/排列组合)
    Codeforces Round #677 (Div. 3) A-E
    函数实现复合命题的计算及判断两个命题是否等值——中缀表达式转后缀表达式
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7356529.html
Copyright © 2011-2022 走看看