`
MMSCAU
  • 浏览: 115597 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

读取Guvnor中的规则...

阅读更多

 

配合Guvnor一起使用,简单的实现如下:

 

直接使用Drools 的HelloWorld例子进行改动:

 

代码清单一:

 

 

package com.sample;

import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.agent.KnowledgeAgent;
import org.drools.agent.KnowledgeAgentFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.ResourceFactory;
import org.drools.logger.KnowledgeRuntimeLogger;
import org.drools.logger.KnowledgeRuntimeLoggerFactory;
import org.drools.runtime.StatefulKnowledgeSession;

/**
 * This is a sample class to launch a rule.
 */
public class DroolsTest {

 public static final void main(String[] args) {
  try {
   // load up the knowledge base
   KnowledgeBase kbase = readKnowledgeBase();
   StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
   KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");
   // go !
   Message message = new Message();
   message.setMessage("Hello World");
   message.setStatus(Message.HELLO);
   ksession.insert(message);
   ksession.fireAllRules();
   logger.close();
  } catch (Throwable t) {
   t.printStackTrace();
  }
 }

 private static KnowledgeBase readKnowledgeBase() throws Exception {
  KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
  
  //修改此方法
  //kbuilder.add(ResourceFactory.newClassPathResource("Sample.drl"), ResourceType.DRL);
  kbuilder.add(ResourceFactory.newUrlResource("http://localhost:8080/drools-guvnor/org.drools.guvnor.Guvnor/package/com.chen.rules/LATEST"), ResourceType.PKG);
  KnowledgeBuilderErrors errors = kbuilder.getErrors();
  if (errors.size() > 0) {
   for (KnowledgeBuilderError error: errors) {
    System.err.println(error);
   }
   throw new IllegalArgumentException("Could not parse knowledge.");
  }
  KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
  kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
  //采用Agent的方式
/*  KnowledgeAgent kagent=KnowledgeAgentFactory.newKnowledgeAgent("/deploy.properties");
  
  KnowledgeBase kbase=kagent.getKnowledgeBase();*/
  return kbase;
 }

 public static class Message {
  
  public static final int HELLO = 0;
  public static final int GOODBYE = 1;

  private String message;

  private int status;

  public String getMessage() {
   return this.message;
  }

  public void setMessage(String message) {
   this.message = message;
  }

  public int getStatus() {
   return this.status;
  }

  public void setStatus(int status) {
   this.status = status;
  }
  
 }

}

 

部分截图:

Guvnor package

 

Code

 

Code2

 

图示:

Guvnor

 

测试结果:

 

 

结果输出

 

------Game Over----------------

 

 

 

  • 大小: 25.3 KB
  • 大小: 18.2 KB
  • 大小: 14.6 KB
  • 大小: 15.7 KB
  • 大小: 14 KB
分享到:
评论
2 楼 mponeno 2014-11-07  
规则有条件的话,貌似不能触发规则,比如你helloWorld的例子,如果以message作为判断,会无法触发规则,但是用测试场景就可以触发。。。
1 楼 duyangsss 2014-02-19  
你好,我看见你将KnowledgeAgent的方式注释掉了,
/* 
KnowledgeAgent kagent=KnowledgeAgentFactory.newKnowledgeAgent("/deploy.properties");
KnowledgeBase kbase=kagent.getKnowledgeBase();
*/
而是通过Guvnor的路径方式访问的PKG资源
kbuilder.add(ResourceFactory.newUrlResource("http://localhost:8080/drools-guvnor/org.drools.guvnor.Guvnor/package/com.chen.rules/LATEST"), ResourceType.PKG);
这是为什么呢?
这个规则是否会在本地有缓存呢,如果我的Gunvor在某个时候没有启动,是否还能正常执行。
还有就是如果我在Gunvor中对规则做了修改,这个时候怎么办?

相关推荐

Global site tag (gtag.js) - Google Analytics