【问题标题】:Using Drools with Glassfish server将 Drools 与 Glassfish 服务器一起使用
【发布时间】:2011-03-13 18:20:41
【问题描述】:

我正在尝试对我的动态网络应用程序使用简单的流口水规则。我创建了我的 servlet,现在尝试整合我的规则。但它在这一行给了我错误

 RuleBase ruleBase = RuleBaseFactory.newRuleBase();

java.lang.NoSuchMethodError: org.drools.util.ChainedProperties.<init>(Ljava/lang/String;Ljava/lang/ClassLoader;Z)V
    at org.drools.RuleBaseConfiguration.init(RuleBaseConfiguration.java:395)
    at org.drools.RuleBaseConfiguration.<init>(RuleBaseConfiguration.java:251)
    at org.drools.common.AbstractRuleBase.<init>(AbstractRuleBase.java:147)
    at org.drools.reteoo.ReteooRuleBase.<init>(ReteooRuleBase.java:160)
    at org.drools.reteoo.ReteooRuleBase.<init>(ReteooRuleBase.java:137)
    at org.drools.RuleBaseFactory.newRuleBase(RuleBaseFactory.java:87)
    at org.drools.RuleBaseFactory.newRuleBase(RuleBaseFactory.java:75)
    at org.drools.RuleBaseFactory.newRuleBase(RuleBaseFactory.java:38)
    at server.HelloServlet.runRules(HelloServlet.java:148)
    at server.HelloServlet.NewRule(HelloServlet.java:181)
    at server.HelloServlet.doGet(HelloServlet.java:82)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)

这里是我的 Helloservlet.java 类

@WebServlet("/HelloServlet") 公共类 HelloServlet 扩展 HttpServlet { private static final long serialVersionUID = 1L;

@EJB HelloBean bean;

@PersistenceUnit
EntityManagerFactory emf;




/**
 * @see HttpServlet#HttpServlet()
 */
public HelloServlet() {
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    PrintWriter out=response.getWriter();
    out.print("<html><body><title>servlet page</title>");
    out.print("<h1> " +request.getServletPath() + "</h1>");
    out.println("<h2>" + bean.sayHello("nabiyin") + "</h2>");
MyUser user=(MyUser)emf.createEntityManager().createQuery("select u from MyUser u").getResultList().get(0);

try {
NewRule();
} catch (Exception e) {
    // TODO Auto-generated catch block
    System.out.println("HATAAAAA");
    e.printStackTrace();
}




    out.print("age: " + user.getAge());

    if (user.getAge()<23) {
        out.println("hello");
    }

    out.print("</html></body>");
}

public void runRules(String[] rules, Object... facts)
throws Exception
{       
    RuleBase ruleBase = RuleBaseFactory.newRuleBase();
    PackageBuilder builder = new PackageBuilder();       

    for(String ruleFile : rules)
    {
        System.out.println("Loading file: "+ruleFile);
        builder.addPackageFromDrl(
                new InputStreamReader(
                    this.getClass().getResourceAsStream(ruleFile)));
    }

    Package pkg = builder.getPackage();       
    ruleBase.addPackage(pkg);

    WorkingMemory workingMemory
        = ruleBase.newStatefulSession();   

    for(Object fact : facts)
    {
        System.out.println("Inserting fact: "+fact);
        workingMemory.insert(fact);
    }

    workingMemory.fireAllRules();
}


public  void NewRule()
throws Exception
{
    System.out.println("New rule started");

   Number n1=3 , n2=1, n3=4 , n4=1 ,n5=5; 
   new HelloServlet().runRules(
          new String[]{"model/NewRule.drl"},
            n1,n2,n3,n4,n5);

    System.out.println("New rule finisheds");
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
}

【问题讨论】:

    标签: glassfish drools


    【解决方案1】:

    我建议在您的 Web 应用程序中使用规则引擎作为单例 EJB,以避免每个 Web 会话创建自己的规则引擎实例(对于上面的简单演示并不重要)。

    您能否尝试使用当前库并重试。 (也许 current 是错误的词,但有区别!)
    查看当前 drools 分布中的样本或这个简单的样本:http://javadude.wordpress.com/2012/03/01/drools-expert-read-rules-from-string-and-database/

    ..
    import org.drools.KnowledgeBase;
    import org.drools.KnowledgeBaseFactory;
    import org.drools.builder.KnowledgeBuilder;
    import org.drools.builder.KnowledgeBuilderFactory;
    import org.drools.builder.ResourceType;
    import org.drools.definition.KnowledgePackage;
    ..
    

    (如果我错了,专家可能会纠正)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-29
      • 2017-05-26
      • 2017-10-01
      相关资源
      最近更新 更多