我计划引入Java规则,目前正在评估Drools以从应用程序外部化(物理地和逻辑地)业务规则.
由于这些业务规则经常由业务部门提供,我希望业务部门通过GUI对规则进行必要的更改.
我已经谷歌搜索集成java Web应用程序+ Drools + Guvnor,我没有得到任何地方.
我的问题:
关于通常简单实现集成Java Application + Drools + Guvnor的任何其他建议都会很棒.
任何指向教程的指针也会为我做.
简而言之,我想在运行时从规则库创建,编辑和删除规则.我很难弄清楚如何在流氓6+中做到这一点.
我知道在先前版本的drools(<= 5.6)中,有一个.drl文件的XML表示和一个用于它的API:https://docs.jboss.org/drools/release/5.6.0 .Final/drools-expert-docs/html/ch04.html#d0e8052.
从5.6开始的drools文档表明这个已弃用,它似乎在6处被完全删除.我不想使用已知没有直接升级路径的API.
由于工作流程要求以及Web用户界面的复杂性,将Guvnor或Workbench UI公开给用户进行规则编辑也不太合适.我想从Java代码创建和管理规则.
我想要一个比.drl文件的字符串模板更好的方法来创建新规则和修改规则.从Java以编程方式创建新规则的用途是什么?我做了很多搜索,但似乎无法为此找到一组Java API调用.
我知道如何使用所有方法在KIE工作台中创建DRL文件.但是我的问题是没有使用KIE工作台,我们可以使用我们所需的值创建.drl文件.如果有任何可能性,请建议我.同样的方式建议我任何API都与此有关.提前致谢.
我们尝试使用全新的KIE工作台(以前称为Guvnor)和新的基于maven的工件切换到Drools 6.
现在我想在第二张图片("部署")中使用本博文中描述的系统:通过HTTP从工作台存储库加载规则(虚线箭头,从左边的HTTP直接进入应用程序) .
问题是,我不知道如何将工件加载到我的KieServices/KieModule对象中.我基本上不想使用maven,我也无法提供maven settings.xml
作为Java参数的全局路径,所以这个选项已经出来了.
我认为,类似的问题是这一个.正如那里提到的,我也试图加载一个URL资源,但问题似乎是系统无法确定ResourceType
给定的URL(http://localhost:8080/kie-drools/maven2/.../-1.0.0.jar
)是什么类型.是的,我可以直接从浏览器访问存储库中的.jar,无需身份验证.
任何想法或教程如何做到这一点?
我的测试代码:
public static void main(String[] args) {
KieServices ks = KieServices.Factory.get();
KieRepository repo = ks.getRepository();
String url = "http://localhost:8080/kie-drools/maven2/de/test/test/1.0.0/test-1.0.0.jar";
Resource urlResource = ks.getResources().newUrlResource(url);
KieModule kModule = repo.addKieModule(urlResource); // this already fails
}
Run Code Online (Sandbox Code Playgroud)
错误:
Exception in thread "main" java.lang.RuntimeException: Unable to fetch module from resource :[UrlResource path='http://localhost:8080/kie-drools/maven2/de/itm/Herma400/1.0.1/Herma400-1.0.1.jar']
at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.getKieModule(KieRepositoryImpl.java:205)
at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.addKieModule(KieRepositoryImpl.java:161)
at kieTest.MainKieTest.main(MainKieTest.java:24)
Caused by: java.lang.NullPointerException
at org.drools.compiler.kie.builder.impl.ClasspathKieProject.getPomProperties(ClasspathKieProject.java:197)
at org.drools.compiler.kie.builder.impl.ClasspathKieProject.fetchKModule(ClasspathKieProject.java:148)
at org.drools.compiler.kie.builder.impl.ClasspathKieProject.fetchKModule(ClasspathKieProject.java:109)
at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.getKieModule(KieRepositoryImpl.java:190) …
Run Code Online (Sandbox Code Playgroud) 我对流氓和所有人的工作经验较少.所以我已经通过了KIE workbench 6.0它工作正常,但我需要6.2版本中的服务器,进程管理菜单.安装后我无法看到它们,即使安装没有显示任何错误.请建议我如何在KIE工作台版本6.2中获取这些内容.提前致谢.
如何在Tomcat 7.0.30服务器中部署guvnor.war(版本5.4.0.Final)?它给我以下错误:
类型:异常报告
信息
说明:服务器遇到内部错误,导致无法完成此请求.
例外
Run Code Online (Sandbox Code Playgroud)java.lang.NullPointerException org.jboss.seam.transaction.TransactionServletListener.requestInitialized(TransactionServletListener.java:106) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002) org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) java.lang.Thread.run(Thread.java:722)
注意Apache Tomcat/7.0.30日志中提供了根本原因的完整堆栈跟踪.
作为开发人员,我想创建一个 Maven 项目并构建一个可执行的独立 JAR 应用程序。(无弹簧靴)
在开发和构建过程中,我想添加一个 Drools Kie 工件作为依赖项
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>mydrools</artifactId>
<version>[1.0.0,)</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
将我的应用程序构建为可执行 Jar 并运行它。我的应用程序具有调用 Drools 引擎的代码:
KieSession kSession = kContainer.newKieSession();
kSession.insert(myBean);
kSession.fireAllRules();
Run Code Online (Sandbox Code Playgroud)
最重要的是,当我在生产环境中部署我的应用程序时:
我试过
String fileName = System.getenv("HOME") + "/libs/mydrools-1.0.0.jar";
File file = new File(fileName);
KieRepository kieRepository = ks.getRepository();
KieContainer kContainer = ks.newKieContainer(ks.newReleaseId("com.mycompany", "mydrools", "1.0.0"));
kieRepository.addKieModule(ks.getResources().newFileSystemResource(file));
KieScanner kScanner = ks.newKieScanner( kContainer );
kScanner.start( 10000L );
Run Code Online (Sandbox Code Playgroud)
加载 JAR 工作正常,但似乎我也被迫至少配置一个最小的 Maven 存储库(~/.m2 文件夹和一个 …
我一直在研究如何简化我用DRL手动编写的一些规则,这些规则变得难以维护.
通过谷歌搜索导致"决策表是最好的方式去forawad".
但遗憾的是我们的事实非常复杂,所以当下drools电子书转换器,无法处理如此复杂的事实,
所以第一个问题是开发人员通常如何处理drools知识库中非常复杂的事实?
例如,我们有类似的事实
Person->List<Cars>->List<Insurances>->Each insurance Has List<History>
Run Code Online (Sandbox Code Playgroud)
现在我必须写一条规则,说人有他的保险索赔的糟糕历史.然后我发现将它放在speadsheet中非常困难,因为它更容易在drl文件上手动编写此规则.
谢谢您的帮助.对上述示例的任何帮助也都非常好.
我正在使用JBoss AS 7.1.1.Final和KIE Workbench/Drools 6.0.1.,Java和Eclipse(Kepler).
我需要KIE Workbench(以前称为Drools Guvnor)让人们用Facts和Rules以图形方式创建/编辑jar,然后将其作为jar存储在本地maven存储库中.这些罐子(以前称为pkg)然后我想以编程方式访问并将它们加载到我的Drools应用程序中.应用程序甚至可以(虽然不是优选地)在同一工作站上运行,因此可以访问存储库
a)通过URL:
http://localhost:8080/drools-wb-as7.0/maven2/com/myprojects/myProject/LATEST/myProject-LATEST.jar
b)通过filepath/classpath:
/my/folder/jboss-as-7.1.1.Final/bin/repositories/kie/com/myprojects/myProject/LATEST/myProject-LATEST.jar
我不希望创建/编译动态规则等在我的代码,无论是动态加载一个.drl文件-准备好的罐子是我需要加载,如与com.myprojects:myProject的:最新作标识.
我试试这个(根据文件)
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.newKieContainer(
ks.newReleaseId("com.myprojects", "myProject", "LATEST"));
KieScanner kScanner = ks.newKieScanner( kContainer );
kScanner.start( 10000L );
KieSession kSession = kContainer.newKieSession("defaultKieSession");
kSession.insert( fact );
Run Code Online (Sandbox Code Playgroud)
[...]
但是,这会因Runtime Exception而失败,
Exception in thread "main" java.lang.RuntimeException: Cannot find KieModule: com.myprojects:myProject:LATEST
at org.drools.compiler.kie.builder.impl.KieServicesImpl.newKieContainer(KieServicesImpl.java:86)
at com.myprojects.myproject.KieDroolsWBOnlinePuller.code(KieDroolsWBOnlinePuller.java:118)
at com.myprojects.myproject.KieDroolsWBOnlinePuller.main(KieDroolsWBOnlinePuller.java:40)
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么没有找到回购罐?当我在KIE WB中创建它时,KieModule不是回购中jar和jar的表示吗?或者我必须更改打印出的Maven Repo的默认ReleaseID
KieRepository repo = ks.getRepository();
repo.getDefaultReleaseId()
Run Code Online (Sandbox Code Playgroud)
解决了
org.default:artifact:1.0.0-SNAPSHOT ?
Run Code Online (Sandbox Code Playgroud)
这是Maven的问题吗?我错了什么?
这里是jar的内容pom.xml
<?xml version="1.0" encoding="UTF-8"?> …
Run Code Online (Sandbox Code Playgroud) 我使用KIE Workbench(6.1.0.Beta3)来编辑我的规则.由于Workbench还没有支持某些功能(例如将规则移到其他包中),我想在KIE-WB之外做这些事情.
为此,我克隆了我的存储库
git clone git://localhost:9418/my-kie-repository
Run Code Online (Sandbox Code Playgroud)
哪个工作正常.我编辑一些文件,在本地提交,然后尝试git push
.但是我得到了错误
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.
Run Code Online (Sandbox Code Playgroud)
因为我几乎可以肯定它是第一个问题,关于凭证,我在.git/config
文件中添加了行
[credential "git://localhost:9418"]
username = admin
password = admin
Run Code Online (Sandbox Code Playgroud)
不过,我得到了前面提到的错误.是的,KIE Workbench仍在运行,我也可以从那里获取/拉取没有问题.
有没有办法如何推回到KIE Workbench存储库?根据这条消息,一个"可能需要重新配置原点",但我不确定如何更改它.
有人知道如何正确设置吗?
我是Drools的新手,我正在尝试安装drools server和workbench 7.12.0.我碰巧看到在以前的版本中看到了工作台的tomcat版本的war,但是没有看到7.12.0.有人能指出我用于Tomcat的正确战争吗?
我检查了文档,它说战争的定制版本可用,但我找不到.
最诚挚的问候,Hanmanth.
我是业务规则世界的新手,但我认为我已经理解了Drools Expert和Drools Guvnor的概念,但是我仍然有点混淆了如何/何时/为什么使用Guvnor与Expert相比.而且,他们是否相互排斥或者是否有能力甚至更愿意并肩工作.下面是一些突出的主题,这些主题可以解释我的问题背后的一些解释,主要集中在应用程序的可维护性上.
Guvnor是否具有Expert中可用的所有功能以及更多功能?
我知道Guvnor是业务规则管理系统(BRMS),它控制存储(包括版本控制)规则和公开服务以使用其他应用程序.Guvnor包含用于生成规则的UI(文本和图形)以及用于运行它们的引擎,因此从这个意义上讲,我猜它包含Expert系统的所有功能.根据我的要求,我很确定Guvnor是我需要的,但是之后我还需要Drools Expert吗?
或者换句话说,Drools Expert是否提供了Guvnor中没有的东西?
Guvnor中的测试规则
我见过的关于Drools的许多教程都是从TDD示例开始的,其中规则是使用简单的jUnit测试进行测试的.一旦将规则导入Guvnor(或者只是在那里生成),有没有办法为它使用/编写单元测试?
是否应该仅通过公开接口(REST)进行测试?
如果系统的用户要开发自己的规则,我不希望他们编写任何测试.主要关注"核心"规则及其可维护性.
如果是"核心"规则,它们是否应存储在版本控制系统中,并在整个系统的预定更新中导入Guvnor?在这种情况下,可以为这些规则编写单元测试,并在构建周期中自动执行.
提前致谢.
我在jboss-as-7.1.1.Final上成功部署了kie-drools-wb-distribution-wars-6.0.1.Final-jboss-as7.0.war,使用jdk1.7.0_10运行.
但是这个配置......
..无法使用此错误进行部署:
14:58:06,531 WARN [org.jboss.weld.deployer] (MSC service thread 1-5) JBAS016011: Warning while parsing vfs:/C:/java/too
ls/wildfly-8.1.0.Final-guvnor/bin/content/kie-drools-wb-distribution-wars-6.0.1.Final-jboss-as7.0.war/WEB-INF/beans.xml:
1 cvc-elt.1 : DÚclaration de l'ÚlÚment 'beans' introuvable.
14:58:07,500 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-6) MSC000001: Failed to start service jboss.module
.service."deployment.kie-drools-wb-distribution-wars-6.0.1.Final-jboss-as7.0.war".main: org.jboss.msc.service.StartExcep
tion in service jboss.module.service."deployment.kie-drools-wb-distribution-wars-6.0.1.Final-jboss-as7.0.war".main: JBAS
018759: Failed to load module: deployment.kie-drools-wb-distribution-wars-6.0.1.Final-jboss-as7.0.war:main
at org.jboss.as.server.moduleservice.ModuleLoadService.start(ModuleLoadService.java:91) [wildfly-server-8.1.0.Fi
nal.jar:8.1.0.Final]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) [jboss-ms
c-1.2.2.Final.jar:1.2.2.Final]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) [jboss-msc-1.2.2.F
inal.jar:1.2.2.Final]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_10]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_10]
at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_10]
Caused by: org.jboss.modules.ModuleNotFoundException: org.jboss.netty:main …
Run Code Online (Sandbox Code Playgroud)