规则引擎

drools java规则引擎简单应用
MyDroolsTest
public class MyDroolsTest {
	public static void main(String[] agrs ){
		Order order = new Order();
		order.setId("01020");
		order.setName("京东订单");
		order.setPrice(5001);
		order.setArea("beijing");
		
		User user = new User();
		user.setUserId("guohui");
		user.setUserName("guohui");
		
		StatefulKnowledgeSession ksession = null;
		try {
			// load up the knowledge base
			KnowledgeBase kbase = DroolsTools.readKnowledgeBase("OrderDrl.drl");
			ksession = kbase.newStatefulKnowledgeSession();
			KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");
			// go !
			ksession.insert(order);
			ksession.insert(user);
			ksession.fireAllRules();
//			ksession.
			logger.close();
			
		} catch (Throwable t) {
			t.printStackTrace();
		}finally{
			//释放资源
			ksession.dispose();
		}
	}
}


domain

Order:
public class Order {
	private String id;
	private String name;
	private int price;
	private String area;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	public String getArea() {
		return area;
	}
	public void setArea(String area) {
		this.area = area;
	}
	
	
}


User:
public class User {
	private String userId;
	
	private String userName;

	public String getUserId() {
		return userId;
	}

	public void setUserId(String userId) {
		this.userId = userId;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}
	
	
}


Droolstools

public class DroolsTools {
	/**
	 * 读取解析DRL文件
	 * @param DrlName
	 * @return
	 * @throws Exception
	 */
	public static KnowledgeBase readKnowledgeBase(String DrlName) throws Exception {
		KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
		kbuilder.add(ResourceFactory.newClassPathResource(DrlName), ResourceType.DRL);
		KnowledgeBuilderErrors errors = kbuilder.getErrors();
		if (errors.size() > 0) {
			for (KnowledgeBuilderError error: errors) {
				System.err.println(error);
			}
			throw new IllegalArgumentException("Could not parse knowledge.");
		}
		KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
		kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
		return kbase;
	}
}


orderDrl.drl

package com.sample
 
import com.sample.my.test.Order;
import com.sample.my.test.User;
 
rule "first"
	when
		 Order(area == "beijing",price > 5000,str : name) and User(userId == "guohui",$name : userName)
	then
		System.out.println("操作人"+$name+"属于北京的订单大于5000经理审批====================="+str); 
end

rule "second"
	when
		Order(area == "shanghai",price < 5000,str : name) and User(userId == "guohui",$name : userName)
	then
		System.out.println("操作人"+$name+"不属于北京的订单小于5000主管审批==========================="+str);
end

你可能感兴趣的:(java,UP,Go)