drools中自定义对象
drls文件:
package org.drools.examples
import java.util.Map;
import java.util.Date
declare Person
name : String
age : int
end
rule "Using a declared Type"
when
$p : Person( name == "Bob" )
then
Person mark = new Person();
mark.setName("Mark");
$p.setAge(12);
System.out.println("hello world");
end
调用示例:
public static void test(){
KieBase kieBase = null;
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kfs = kieServices.newKieFileSystem();
Resource resource = kieServices.getResources().newClassPathResource("rules/test.drl");
resource.setResourceType(ResourceType.DRL);
kfs.write(resource);
KieBuilder kieBuilder = kieServices.newKieBuilder(kfs).buildAll();
Results results = kieBuilder.getResults();
if (results.hasMessages(org.kie.api.builder.Message.Level.ERROR)) {
throw new IllegalStateException("getKieBase error");
}
KieContainer kieContainer = kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId());
kieBase = kieContainer.getKieBase();
KieSession ksession = null;
try {
ksession = kieBase.newKieSession();
FactType personType = kieBase.getFactType("org.drools.examples", "Person");
// handle the type as necessary: 处理类型是必要的:
Object bob = personType.newInstance();
personType.set(bob, "name", "Bob");
personType.set(bob, "age", 42);
FactHandle handler = ksession.insert(bob);
ksession.fireAllRules();
ksession.delete(handler);
String name = (String) personType.get( bob, "name" );
int age = (int) personType.get( bob, "age" );
System.out.println(name);
System.out.println(age);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ksession != null)
ksession.dispose();
}
}
浙公网安备 33010602011771号