如何从外部加载流口水规则

时间:2019-07-06 03:12:20

标签: drools rule-engine kie java-client

我在文件夹中有一个drl文件和一个.class文件。 drl包含建立在类属性上的规则。现在,通过Java程序,我想在某些输入上调用此规则。我在这里一无所知。请看下面的代码

课程文件

import java.io.Serializable;

public class Txn754909164
  implements Serializable
{
  String sequenceNo;
  String accountNumber;
  String customerNumber;

  // setter and getters

 }

drl文件

import Txn754909164;
import java.util.*;
dialect  "mvel"

rule "rule6"
    when
        txn:Txn754909164(sequence == 10)
    then
        System.out.println( "invoking rule ***********************" );
end

客户代码

 public KieContainer kieContainer(String packageName) {
        KieServices kieServices = KieServices.Factory.get();
        KieFileSystem kieFileSystem = kieServices.newKieFileSystem();

        kieFileSystem.write(ResourceFactory.newUrlResource("drl resource url..."));
        KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem,MyInputClass.getClassLoader());
        KieModule kieModule = null;
        try {
            kieBuilder.buildAll();
            kieModule = kieBuilder.getKieModule();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId(),cls.getClassLoader());

    }

最后

StatelessKieSession kieSession = container.getKieBase().newStatelessKieSession();
        kieSession.execute(obj);

日志

11:47:34.795 [http-nio-8282-exec-4] INFO  o.d.c.k.b.impl.KieRepositoryImpl - KieModule was added: MemoryKieModule[releaseId=org.default:artifact:1.0.0-SNAPSHOT]
11:47:34.803 [http-nio-8282-exec-4] TRACE org.drools.core.phreak.AddRemoveRule - Adding Rule rule6
11:47:45.994 [AsyncResolver-bootstrap-executor-0] INFO  c.n.d.s.r.aws.ConfigClusterResolver - Resolving eureka endpoints via configuration
11:47:49.899 [http-nio-8282-exec-4] TRACE o.drools.core.reteoo.EntryPointNode - Insert [fact 0:1:1764329060:1764329060:1:DEFAULT:NON_TRAIT:Txn754909164:Txn754909164@69298664]
11:47:52.953 [http-nio-8282-exec-4] INFO  o.k.a.e.r.DebugRuleRuntimeEventListener - ==>[ObjectInsertedEventImpl: getFactHandle()=[fact 0:1:1764329060:1764329060:1:DEFAULT:NON_TRAIT:Txn754909164:Txn754909164@69298664], getObject()=Txn754909164@69298664, getKnowledgeRuntime()=KieSession[0], getPropagationContext()=PhreakPropagationContext [entryPoint=EntryPoint::DEFAULT, factHandle=[fact 0:1:1764329060:1764329060:1:DEFAULT:NON_TRAIT:Txn754909164:Txn754909164@69298664], leftTuple=null, originOffset=-1, propagationNumber=2, rule=null, type=INSERTION]]
11:48:41.571 [http-nio-8282-exec-4] DEBUG org.drools.core.common.DefaultAgenda - State was INACTIVE is now FIRING_ALL_RULES
11:48:41.572 [http-nio-8282-exec-4] TRACE org.drools.core.common.DefaultAgenda - Starting Fire All Rules
11:48:41.573 [http-nio-8282-exec-4] DEBUG org.drools.core.common.DefaultAgenda - State was FIRING_ALL_RULES is now HALTING
11:48:41.573 [http-nio-8282-exec-4] DEBUG org.drools.core.common.DefaultAgenda - State was HALTING is now INACTIVE
11:48:41.574 [http-nio-8282-exec-4] TRACE org.drools.core.common.DefaultAgenda - Ending Fire All Rules
11:48:41.575 [http-nio-8282-exec-4] DEBUG org.drools.core.common.DefaultAgenda - State was INACTIVE is now DISPOSED

应在drl规则的then子句中打印语句

1 个答案:

答案 0 :(得分:0)

上面提到的问题和解释本身就是答案。发现它从第二天起就运行良好。我想这只是一个工作区问题。