kas*_*ili 5 java eclipse drools maven
我正在尝试将drools6.0用于现有的代码库(它是eclipse下的maven项目).我以前没有必要学习流口水或者maven(尽管它们是我之前项目的一部分),足以说我迷失了我想做的事情.根据我的理解(谷歌搜索),java类文件被绑定到基于包名称(?)的规则.这会解决编译时问题.但我在运行时看到空指针异常.为了让drools适应我现有的代码库:I 1)创建了helloworld drools项目,成功运行它2)将java文件复制到我现有的包中,3)在Eclipse中使用正确的包创建规则文件:FIle-> New-> other - >规则资源; 3)通过右键单击项目并将configure-> convert转换为drools项目,将现有项目转换为drools包
这一切都处理编译问题,但我得到以下运行时错误
[main] ERROR org.drools.compiler.kie.builder.impl.KieContainerImpl - Unknown KieSession name: ksession-rules
java.lang.NullPointerException
at main.java.com.harmonia.cbm.afloat.dataaquisition.dql.DroolsTest.main(DroolsTest.java:23)
Run Code Online (Sandbox Code Playgroud)
这是因为从kcontainer返回的ksession为null,并在最后一行抛出空指针异常
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession("ksession-rules");
// above line is returning null
Message message = new Message();
message.setMessage("Hello World");
message.setStatus(Message.HELLO);
kSession.insert(message);
Run Code Online (Sandbox Code Playgroud)
已经花了一天多的时间试图找出流氓是如何工作的,以及如何解决上述问题.Pl建议
1)我采取正确的方法将现有项目转换为drools项目.我想要我的代码库的所有现有功能; 但是希望为将来的增强添加基于规则的方法.遇到以下链接,但不清楚是否有助于我的情况 http://drools.46999.n3.nabble.com/Retrofitting-a-project-with-JBoss-Rules-td48656.html
2)任何有用的drools教程,以便更好地理解3行(除了java文档)
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession("ksession-rules");
Run Code Online (Sandbox Code Playgroud)
3)解决空指针异常的任何提示(假设我采用正确的方法将现有项目转换为drools项目)
更新 @David:感谢您的详细帖子.我意识到将现有项目转换为maven项目虽然有效,但由于保留了现有的目录结构/命名(很可能与maven默认创建的不同),因此对我没有吸引力.我发布了替代解决方案,我认为这个问题与类路径问题有关http://drools.46999.n3.nabble.com/Null-pointer-exception-when-adding-drools-to-existing-project-td4027944.html #a4028011
小智 8
我遇到了类似的问题.
我认为问题的一部分是试图生活在两个世界.JBoss Drools eclipse插件世界和maven世界.
我安装了Eclipse 4.3.1(Kepler),安装了各种Jboss/Drools插件.
我采用了一个工作的eclipse示例,并确保我可以在maven中运行它.
这应该为您提供一个完全由Maven构建和运行的项目.
添加到您的pom.xml
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
</plugin>
Run Code Online (Sandbox Code Playgroud)
和
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.2</version>
<scope>runtime</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
尝试:
mvn -e exec:java -Dexec.mainClass ="com.sample.DroolsTest"
它应该产生:
...
[com.sample.DroolsTest.main()] INFO org.drools.compiler.kie.builder.impl.ClasspathKieProject - Found kmodule: file:/Users/davidbernard/Projects/action-deducing-diff/xx/target/classes/META-INF/kmodule.xml
[com.sample.DroolsTest.main()] INFO org.drools.compiler.kie.builder.impl.KieRepositoryImpl - KieModule was added:FileKieModule[ ReleaseId=x:x:1.0file=/Users/davidbernard/Projects/action-deducing-diff/xx/target/classes]
[com.sample.DroolsTest.main()] INFO org.drools.compiler.kie.builder.impl.ClasspathKieProject - Found kmodule: file:/Users/davidbernard/Projects/action-deducing-diff/xx/target/classes/META-INF/kmodule.xml
[com.sample.DroolsTest.main()] INFO org.drools.compiler.kie.builder.impl.KieRepositoryImpl - KieModule was added:FileKieModule[ ReleaseId=x:x:1.0file=/Users/davidbernard/Projects/action-deducing-diff/xx/target/classes]
Hello World
Goodbye cruel world
...
你现在也应该能够从eclipse运行DroolsTest.
您将拥有rules-> Sample.drl文件和kmodule.xml文件.
<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
<kbase name="rules" packages="rules">
<ksession name="ksession-rules"/>
</kbase>
</kmodule>
Run Code Online (Sandbox Code Playgroud)
"ksession"名称应与创建ksession的代码匹配:
KieSession kSession = kContainer.newKieSession("ksession-rules");
Run Code Online (Sandbox Code Playgroud)
"packages"应该与规则文件所在的目录匹配.
| 归档时间: |
|
| 查看次数: |
14464 次 |
| 最近记录: |