我们尝试使用全新的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) 这就是我想做的事情.
我想把"规则"放在数据库表中.这有点像drools xls决策表格式,除了所有规则都是表格中的行.这样我就可以轻松修改规则.我需要把它放在一个表而不是xls中,因为我的规则可能经常变化.这可能与流口水有关吗?我是否可以使用从DB(而不是DRL或xls文件)检索的规则构建知识库,并且每次规则更改都可以从头开始重建知识库(或者可能只是知识库的一部分,实际上只更新那些已更改的规则..)
我刚安装了Drools plug-in
Eclipse(版本3.5.2),我正在尝试运行插件附带的"Hello World"示例.
当我运行代码时,我得到runtime error
以下堆栈跟踪:
org.drools.RuntimeDroolsException: Unable to load dialect 'org.drools.rule.builder.dialect.java.JavaDialectConfiguration:java:org.drools.rule.builder.dialect.java.JavaDialectConfiguration'
at org.drools.compiler.PackageBuilderConfiguration.addDialect(PackageBuilderConfiguration.java:274)
at org.drools.compiler.PackageBuilderConfiguration.buildDialectConfigurationMap(PackageBuilderConfiguration.java:259)
at org.drools.compiler.PackageBuilderConfiguration.init(PackageBuilderConfiguration.java:176)
at org.drools.compiler.PackageBuilderConfiguration.<init>(PackageBuilderConfiguration.java:153)
at org.drools.compiler.PackageBuilder.<init>(PackageBuilder.java:242)
at org.drools.compiler.PackageBuilder.<init>(PackageBuilder.java:142)
at org.drools.builder.impl.KnowledgeBuilderProviderImpl.newKnowledgeBuilder(KnowledgeBuilderProviderImpl.java:29)
at org.drools.builder.KnowledgeBuilderFactory.newKnowledgeBuilder(KnowledgeBuilderFactory.java:29)
at com.sample.DroolsTest.readKnowledgeBase(DroolsTest.java:39)
at com.sample.DroolsTest.main(DroolsTest.java:23)
Caused by: java.lang.RuntimeException: **The Eclipse JDT Core jar is not in the classpath**
at org.drools.rule.builder.dialect.java.JavaDialectConfiguration.setCompiler(JavaDialectConfiguration.java:94)
at org.drools.rule.builder.dialect.java.JavaDialectConfiguration.init(JavaDialectConfiguration.java:55)
at org.drools.compiler.PackageBuilderConfiguration.addDialect(PackageBuilderConfiguration.java:270)
... 9 more
Run Code Online (Sandbox Code Playgroud)
以下是一些相关的Java代码:
public static final void main(String[] args) {
try {
// load up the knowledge base
KnowledgeBase kbase = readKnowledgeBase();
}
}
private …
Run Code Online (Sandbox Code Playgroud) 我(尝试)使用drools来处理我的定价规则.但是当我尝试执行规则时,抛出以下异常:
java.lang.RuntimeException: KnowledgeAgent exception while trying to deserialize KnowledgeDefinitionsPackage
at org.drools.agent.impl.KnowledgeAgentImpl.rebuildResources(KnowledgeAgentImpl.java:418)
at org.drools.agent.impl.KnowledgeAgentImpl.applyChangeSet(KnowledgeAgentImpl.java:120)
at org.drools.agent.impl.KnowledgeAgentImpl.applyChangeSet(KnowledgeAgentImpl.java:109)
at com.sapienter.jbilling.server.pluggableTask.PluggableTask.readKnowledgeBase(PluggableTask.java:115)
at com.sapienter.jbilling.server.rule.RulesBaseTask.executeRules(RulesBaseTask.java:57)
at com.sapienter.jbilling.server.item.tasks.RulesPricingTask2.getPrice(RulesPricingTask2.java:81)
at com.sapienter.jbilling.server.item.ItemBL.getPrice(ItemBL.java:357)
[...many not so interesting lines...]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.io.StreamCorruptedException: invalid stream header: 3C3F786D
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:783)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280)
at org.drools.common.DroolsObjectInputStream.<init>(DroolsObjectInputStream.java:55)
at org.drools.common.DroolsObjectInputStream.<init>(DroolsObjectInputStream.java:49)
at org.drools.util.DroolsStreamUtils.streamIn(DroolsStreamUtils.java:189)
at org.drools.util.DroolsStreamUtils.streamIn(DroolsStreamUtils.java:158)
at org.drools.agent.impl.KnowledgeAgentImpl.rebuildResources(KnowledgeAgentImpl.java:408)
... 88 more
Run Code Online (Sandbox Code Playgroud)
由于所有代码都来自库,我猜问题不在代码中,而是在我的项目设置/使用jar /使用规则/等等.这种例外的典型原因是什么?我应该寻找什么来找到异常的原因?有人有策略来查明问题吗?
更新: 有趣...我的应用程序似乎仍然有效.看起来它从错误中恢复过来.那么,也许是我项目库中的错误?不好看到每次启动时记录的错误,但似乎并不重要.嗯......
最近我正在使用drools,我想对某些对象进行一些特殊检查.我需要when
在规则部分使用函数,但是我收到了错误.例:
function boolean newFunction(int a){
if(a>0)
return true;
else
return false;
}
rule "new rule"
salience 100
dialect "mvel"
when
eval(newFunction(1))
then
System.out.println("OK");
end
Run Code Online (Sandbox Code Playgroud)
我得到的错误总是:
unable to resolve method using strict-mode: java.lang.Object.newFunction(java.lang.Integer)
Run Code Online (Sandbox Code Playgroud)
drools是否没有支持when
部分中的功能?
谢谢!
我是Drools的新手.我正在创建一个规则,但我得到一个编译时错误
"字段不可见".
我试图用Jboss示例检查,他们使用方言"mvel".它汇编了.我不懂方言.那是什么dialect=mvel
?
我对流氓和所有人的工作经验较少.所以我已经通过了KIE workbench 6.0它工作正常,但我需要6.2版本中的服务器,进程管理菜单.安装后我无法看到它们,即使安装没有显示任何错误.请建议我如何在KIE工作台版本6.2中获取这些内容.提前致谢.
有谁知道如何解决这个问题?
无法完成安装,因为找不到一个或多个必需的项目.
正在安装的软件:JBoss Runtime Drools Detector 6.3.0.Final(org.jboss.tools.runtime.drools.detector.feature.feature.group 6.3.0.Final)缺少要求:JBoss Runtime Drools Detector 6.3.0.Final( org.jboss.tools.runtime.drools.detector.feature.feature.group 6.3.0.Final)要求"org.jboss.tools.runtime.core.feature.feature.group 0.0.0",但未能找到
我们正在使用Drools v6.3.4 - 但测试了同样的问题也发生在v7.3.0中.当我们编写规则长度为27000个字符或更长的规则时,我们会收到"无法分析表达式"错误
rule "StoreRule"
when
(s: Store.StoreItems(storeitemname in ("STORE0000001","STORE0000002"....really long list)))
then
System.out.println("Discount!");
end
Run Code Online (Sandbox Code Playgroud)
我们有一个解决方法,就是将规则拆分为这样 -
rule "StoreRule"
when
(s: Store.StoreItems(storeitemname in (<List 1>))) ||
(s: Store.StoreItems(storeitemname in (<List 2>))) ||....and so on
then
System.out.println("Discount!");
end
Run Code Online (Sandbox Code Playgroud)
我们用一个长列表得到错误的根本原因是什么?除了上面指定的解决方法之外,还有更好的方法来处理这些规则吗?
当我们有大规则时,我们得到以下错误.
这是我的JSON文档
{
"location": {
"details": [
{
"country": "India",
"state": "haryana"
},
{
"country": "America",
"state": "LA"
},
{
"country": "India",
"state": "Maharashtra"
}
]
},
"organisation": {
"details": [
{
"name": "AON",
"country": "india"
},
{
"name": "AON",
"country": "America"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
我必须以下面的格式应用规则
If(
(location.details.country=='India' OR
location.details.state=='haryana')
AND
organisation.details.name=='AON'
)
Run Code Online (Sandbox Code Playgroud)
直到现在我已经研究并知道同一类字段的规则可以用嵌套格式应用,如下所示.在这个链接:如何在drools中写入嵌套条件
// Use this instead
Person( ( age > 50 && weight > 80 ) || height > 2 )
Run Code Online (Sandbox Code Playgroud)
但我想在相同的嵌套条件下应用不同pojo类的规则,如下所示
If( …
Run Code Online (Sandbox Code Playgroud)