0

我在一个文件夹中有一个 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 子句中打印语句

4

1 回答 1

0

上述问题和解释本身就是答案。从第二天开始发现它工作得很好。我想这只是一个工作空间问题。

于 2019-07-10T20:00:31.973 回答