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();
		}
	}

  

posted on 2017-09-20 14:22  hi_rain  阅读(2085)  评论(0)    收藏  举报