我想将drools workbench 6.4.0.Final与我自己的应用程序集成。
以下是主要课程:
package com.example;
import com.idss.poc.CouponFact;
import com.idss.poc.Result;
import org.codehaus.plexus.util.FileUtils;
import org.drools.compiler.kie.builder.impl.KieServicesImpl;
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.builder.KieScanner;
import org.kie.api.builder.ReleaseId;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.StatelessKieSession;
import org.kie.scanner.KieScannerFactoryServiceImpl;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class FunctionExample {
public static void main(String[] args) {
KieServices ks = KieServices.Factory.get();
ReleaseId releaseId = ks.newReleaseId( "com.test", "poc", "LATEST" );
KieContainer kContainer = ks.newKieContainer(releaseId);
KieScanner kieScanner = ks.newKieScanner(kContainer);
kieScanner.start( 10000L );
Scanner scanner = new Scanner(System.in);
while (true) {
kieScanner.scanNow();
String line = scanner.nextLine();
runRule(kContainer);
}
}
private static void runRule(KieContainer kieKontainer) {
StatelessKieSession kSession =kieKontainer.newStatelessKieSession("ks");
Result result = new Result();
List<String> list = new ArrayList<String>();
result.setRules(list);
kSession.setGlobal("result", result);
CouponFact cf = new CouponFact();
cf.setPhoneCount(2);
cf.setUserCount(2);
cf.setDeviceCount(2);
cf.setIp10mCount(10);
cf.setIpDayCount(10);
kSession.execute(cf);
System.out.println(result.getScore() + "," + result.getRules());
}
}
以下是我自己的应用程序使用的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">
<localRepository>~/.m2/repository</localRepository>
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
<server>
<id>guvnor-m2-repo</id>
<username>workbench</username>
<password>workbench!</password>
<configuration>
<wagonProvider>httpclient</wagonProvider>
<httpConfiguration>
<all>
<usePreemptive>true</usePreemptive>
</all>
</httpConfiguration>
</configuration>
</server>
<server>
<id>mymirror</id>
<username>workbench</username>
<password>workbench!</password>
<configuration>
<wagonProvider>httpclient</wagonProvider>
<httpConfiguration>
<all>
<usePreemptive>true</usePreemptive>
</all>
</httpConfiguration>
</configuration>
</server>
</servers>
<mirrors>
<mirror>
<id>mymirror</id>
<url>http://10.10.10.57:8080/kie-wb/maven2</url>
<mirrorOf>*</mirrorOf>
<layout>default</layout>
</mirror>
</mirrors>
<profiles>
<profile>
<id>guvnor-m2-repo</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>guvnor-m2-repo</id>
<name>Guvnor M2 Repo</name>
<url>http://10.10.10.57:8080/kie-wb/maven2</url>
<releases>
<enabled>true</enabled>
</releases>
<updatePolicy>always</updatePolicy>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>guvnor-m2-repo</activeProfile>
</activeProfiles>
</settings>
当我在工作台中更新我的drools规则,并升级我的repo的版本,但我的应用程序没有自动获得我的repo的最新版本。 我得到这样的日志:
11:50:24.158 [Timer-0] DEBUG org.kie.scanner.embedder.MavenEmbedderUtils - Not in OSGi: using plexus based maven parser
11:50:24.212 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultLocalRepositoryProvider - Using manager EnhancedLocalRepositoryManager with priority 10.0 for /Users/pinter/Desktop/RiskGuard/~/.m2/repository
11:50:24.212 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultLocalRepositoryProvider - Using manager EnhancedLocalRepositoryManager with priority 10.0 for /Users/pinter/Desktop/RiskGuard/~/.m2/repository
11:50:24.213 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager - Using mirror mymirror (http://10.10.10.57:8080/kie-wb/maven2) for guvnor-m2-repo (http://10.10.10.57:8080/kie-wb/maven2).
11:50:24.215 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager - Using mirror mymirror (http://10.10.10.57:8080/kie-wb/maven2) for guvnor-m2-repo (http://10.10.10.57:8080/kie-wb/maven2).
11:50:24.215 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager - Using mirror mymirror (http://10.10.10.57:8080/kie-wb/maven2) for central (https://repo.maven.apache.org/maven2).
11:50:24.216 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultDependencyCollector - Dependency collection stats: {ConflictMarker.analyzeTime=0, ConflictMarker.markTime=0, ConflictMarker.nodeCount=1, ConflictIdSorter.graphTime=0, ConflictIdSorter.topsortTime=0, ConflictIdSorter.conflictIdCount=0, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=0, ConflictResolver.conflictItemCount=0, DefaultDependencyCollector.collectTime=0, DefaultDependencyCollector.transformTime=0}
11:50:24.217 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultLocalRepositoryProvider - Using manager EnhancedLocalRepositoryManager with priority 10.0 for ~/.m2/repository
11:50:24.217 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultUpdateCheckManager - Skipped remote request for com.idss:poc/maven-metadata.xml, locally cached metadata up-to-date.
任何人都可以帮我搞清楚吗?谢谢!
答案 0 :(得分:1)
如果您在应用程序的版本号字段中使用LATEST
,KieScanner
会尝试将本地存储库中可用jar的版本号与kie-workbench中可用的jar版本号相匹配。如果两个版本都相同,则它不会从远程存储库获取jar并使用本地存储库中的jar。每次构建和部署时,都要增加更改的版本号,以便在应用程序端反映出来。
如果每次部署时增加版本号对您来说太多了,我建议您在版本号中使用-SNAPSHOT
。即使本地存储库中有相同的版本,也始终从远程存储库获取快照版本。 <version>-SNAPSHOT
应仅用于开发目的。
答案 1 :(得分:0)
我假设你把#34; LATEST&#34;以获取KJAR的最新快照版本。
如果是这种情况,我相信您需要将快照更新策略设置为大于&#34;每天&#34;默认。此外,您的maven设置文件似乎有错误,因为items.RemoveAll(x => x.arret.Equals("value") && x.ligneSensName.Equals("ligneValue"));
标记未正确嵌套。我建议你尝试这样的事情:
updatePolicy
答案 2 :(得分:0)
感谢 @taralabs 和 @Naved Alam ,您的回答只是帮助我。 我读了drools文档,它告诉我:
如果使用SNAPSHOT,版本范围,LATEST或RELEASE设置,KieScanner将仅对已部署的jar进行拾取更改。固定版本不会在运行时自动更新。
所以,我修改了我的工作台项目,并将版本号设置为 2.0.0-SNAPSHOT ,并更改了我的代码
ReleaseId releaseId = ks.newReleaseId( "com.test", "poc", "LATEST" );
到
ReleaseId releaseId = ks.newReleaseId( "com.test", "poc", "2.0.0-SNAPSHOT" );
到目前为止,它再次无法正常工作。该程序显示如下日志:
11:50:24.158 [Timer-0] DEBUG org.kie.scanner.embedder.MavenEmbedderUtils - Not in OSGi: using plexus based maven parser
11:50:24.212 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultLocalRepositoryProvider - Using manager EnhancedLocalRepositoryManager with priority 10.0 for /Users/pinter/Desktop/RiskGuard/~/.m2/repository
11:50:24.212 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultLocalRepositoryProvider - Using manager EnhancedLocalRepositoryManager with priority 10.0 for /Users/pinter/Desktop/RiskGuard/~/.m2/repository
11:50:24.213 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager - Using mirror mymirror (http://10.10.10.57:8080/kie-wb/maven2) for guvnor-m2-repo (http://10.10.10.57:8080/kie-wb/maven2).
11:50:24.215 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager - Using mirror mymirror (http://10.10.10.57:8080/kie-wb/maven2) for guvnor-m2-repo (http://10.10.10.57:8080/kie-wb/maven2).
11:50:24.215 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager - Using mirror mymirror (http://10.10.10.57:8080/kie-wb/maven2) for central (https://repo.maven.apache.org/maven2).
11:50:24.216 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultDependencyCollector - Dependency collection stats: {ConflictMarker.analyzeTime=0, ConflictMarker.markTime=0, ConflictMarker.nodeCount=1, ConflictIdSorter.graphTime=0, ConflictIdSorter.topsortTime=0, ConflictIdSorter.conflictIdCount=0, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=0, ConflictResolver.conflictItemCount=0, DefaultDependencyCollector.collectTime=0, DefaultDependencyCollector.transformTime=0}
11:50:24.217 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultLocalRepositoryProvider - Using manager EnhancedLocalRepositoryManager with priority 10.0 for ~/.m2/repository
11:50:24.217 [Timer-0] DEBUG org.eclipse.aether.internal.impl.DefaultUpdateCheckManager - Skipped remote request for com.idss:poc/maven-metadata.xml, locally cached metadata up-to-date.
正如我们所见,中央存储库 https://repo.maven.apache.org/maven2 已被我的自定义远程存储库 http://10.10.10.57:8080/kie-wb/maven2 覆盖。
我尝试更改我的settings.xml
<mirrors>
<mirror>
<id>mymirror</id>
<url>http://10.10.10.57:8080/kie-wb/maven2</url>
<mirrorOf>*</mirrorOf>
<layout>default</layout>
</mirror>
</mirrors>
到
<mirrors>
<mirror>
<id>mymirror</id>
<url>http://10.10.10.57:8080/kie-wb/maven2</url>
<mirrorOf>guvnor-m2-repo</mirrorOf>
<layout>default</layout>
</mirror>
</mirrors>
它工作正常!!!