Textview
KieSession创建代码
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="56dp"
android:background="@android:color/darker_gray" >
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="Settings"
android:gravity="center_vertical"
android:layout_alignParentLeft="true"
android:textColor="@android:color/holo_orange_dark"
android:textSize="16.0sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="hiiiiiiiiiiiii StackOverflower!!!!!!!!!!!"
android:padding="4dp"
android:gravity="center"
android:layout_toLeftOf="@+id/txtBack"
android:textColor="@android:color/white"
android:textSize="19sp" />
</RelativeLayout>
答案 0 :(得分:2)
在另一个答案中阅读了与@laune的聊天后,我想现在已经确定了问题:你的KieBase并不包含你认为它的工件(规则,全局等)。
不知道您的代码可能出现什么问题,但我认为一个简单的解决方法可以帮助您避免使用那些样板(并且容易出错)的代码。
这里的想法是使用KieHelper
类,而不是使用KieRepository
,KieFileSystem
和KieBuilder
。实际上,创建KieHelper
类是为了避免在创建KieBase时涉及的复杂步骤(与Drools 5.x相比)。
使用KieHelper
类,您可以重构代码,使其看起来与此类似:
KieHelper kieHelper = new KieHelper();
for (String ruleId : drls.keySet()) {
kieHelper.addContent(drls.get(ruleId), ResourceType.DRL);
}
Results results = kieHelper.verify();
for (Message message : results.getMessages()) {
log.error(">> Message ({}): {}", message.getLevel(), message.getText());
}
if (results.hasMessages(Message.Level.ERROR)) {
throw new IllegalStateException("There are errors in the KB.");
}
KieSession ksession = kieHelper.build().newKieSession();
希望它有所帮助,
答案 1 :(得分:1)
在您的Java代码中,您有一些调用,如
kieSession.setGlobal( "log", ... );
应该在.drl文件中有对应项,例如
global ... log;
但它没有。 (点分别标记对象引用的位置和相应的类型。)
查看您的代码......
kFileSystem.write(resource);
我强烈建议您使用具有此相对路径的表单:
kFileSystem.write( "src/main/resources/" + ruleId + ".drl,
resource );
或修改资源目标路径:
resource.setTargetPath("src/main/resources/hello.drl");
(您的代码不工作:
resource.setTargetPath("./out/hello.drl");
稍后,在编译期间,这会导致警告&#34;找不到KieBase defaultKieBase&#34;的文件。 Drools手册包含这句话&#34;这些工件必须添加到相应的常规Maven项目的相同位置。&#34;但并不能简单地解释这意味着什么,这会更有帮助。)
没有&#34;全球&#34;当然,在您的DRL代码中,相当于无法编译知识库,即您的会话在空知识库上运行。