使用JAVA程序調用規則-運行KIE-DROOLS上的規則
第一步:建立一個MAVEN的Java工程
POM.XML
<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>
<groupId>os.nut.drools</groupId>
<artifactId>drools-training</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<drools.version>6.3.0.Final</drools.version>
</properties>
<repositories>
<repository>
<id>guvnor-m2-repo</id>
<name>Guvnor M2 Repo</name>
<url>http://192.168.0.101:8080/kie-drools/maven2/</url>
</repository>
</repositories>
<dependencies>
<!-- drools -->
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-api</artifactId>
<version>${drools.version}</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
<version>${drools.version}</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>${drools.version}</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-decisiontables</artifactId>
<version>${drools.version}</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-templates</artifactId>
<version>${drools.version}</version>
</dependency>
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-ci</artifactId>
<version>${drools.version}</version>
</dependency>
<!-- test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
POM.XML解釋
第二步: 工程結構
PaymentInfo.java文件
編寫遠程調用客戶端
package org.sky.drools.approvaldecision;
import java.io.InputStream;
import org.drools.compiler.kproject.ReleaseIdImpl;
import org.drools.core.io.impl.UrlResource;
import org.kie.api.KieServices;
import org.kie.api.builder.KieModule;
import org.kie.api.builder.KieRepository;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.StatelessKieSession;
public class RemotePaymentRulz {
public static void main(String[] args) throws Exception {
String url = "http://192.168.0.101:8080/kie-drools/maven2/org/sky/drools/ApprovalDecision/1.0.0/ApprovalDecision-1.0.0.jar";
ReleaseIdImpl releaseId = new ReleaseIdImpl("org.sky。drools", "ApprovalDecision", "LATEST");
KieServices ks = KieServices.Factory.get();
KieRepository kr = ks.getRepository();
UrlResource urlResource = (UrlResource) ks.getResources().newUrlResource(url);
urlResource.setUsername("tomcat");
urlResource.setPassword("tomcat");
urlResource.setBasicAuthentication("enabled");
InputStream is = urlResource.getInputStream();
KieModule kModule = kr.addKieModule(ks.getResources().newInputStreamResource(is));
KieContainer kContainer = ks.newKieContainer(kModule.getReleaseId());
StatelessKieSession kSession = kContainer.newStatelessKieSession("defaultStatelessKieSession");
PaymentInfo m = new PaymentInfo();
m.setMoneyAmount(5001);
kSession.execute(m);
System.out.println(m.getDecisionPath());
if (m.getDecisionPath().equalsIgnoreCase("m")) {
System.out.println("數額<=5000需要經理審批");
} else {
System.out.println("數額>5000需要總經理審批");
}
}
}
遠程客戶端核心代碼解釋
String url = "http://192.168.0.101:8080/kie-drools/maven2/org/sky/drools/ApprovalDecision/1.0.0/ApprovalDecision-1.0.0.jar";
KieServices ks = KieServices.Factory.get();
KieRepository kr = ks.getRepository();
UrlResource urlResource = (UrlResource) ks.getResources().newUrlResource(url);
urlResource.setUsername("tomcat");
urlResource.setPassword("tomcat");
urlResource.setBasicAuthentication("enabled");
InputStream is = urlResource.getInputStream();
KieModule kModule = kr.addKieModule(ks.getResources().newInputStreamResource(is));
KieContainer kContainer = ks.newKieContainer(kModule.getReleaseId());
以上代碼做的事情就是相當於在IE中打開KIE-DROOLS的Web地址,然後輸入用戶名、密碼並點擊登錄
StatelessKieSession kSession = kContainer.newStatelessKieSession("defaultStatelessKieSession");
PaymentInfo m = new PaymentInfo();
m.setMoneyAmount(5001);
kSession.execute(m);
System.out.println(m.getDecisionPath());
if (m.getDecisionPath().equalsIgnoreCase("m")) {
System.out.println("數額<=5000需要經理審批");
} else {
System.out.println("數額>5000需要總經理審批");
}
這段代碼用的就是statelessSession接口去調用規則的。
由於規則中有一句話“modify (m) { setDecisionPath("GM") };”
因此規則會依據傳入的PaymentInfo.paymentAmount的值去修改PaymentInfo.decisionPath的值。
運行
因爲我們還沒有把我們位於KIE-DROOLS上的項目生成:
org/sky/drools/ApprovalDecision/1.0.0/ApprovalDecision-1.0.0.jar
如上述這樣的可用“資源”呢!!!
將規則項目生成可供遠程調用的“資源”,按照下面步驟來做: