您的位置:首页 > 编程语言 > Java开发

jess学习笔记之三:java中嵌入jess引擎

2010-06-14 12:33 459 查看
这是jess7试用版的下载地址:http://herzberg.ca.sandia.gov/jess/download.shtml
java中嵌入jess引擎的部分功能可能是要money的。

加载jess引擎的代码部分:
public class PricingEngine {
private Rete engine;
private WorkingMemoryMarker marker;
private Database database;

public PricingEngine(Database aDatabase) throws JessException {
// Create a Jess rule engine
engine = new Rete();
engine.reset();

// Load the pricing rules
engine.batch("pricing.clp");//自动查找pricing.clp,无论它在当前目录下,还是封装在一个jar文件中,或是在web-inf/classes目录下,都能找到

// Load the catalog data into working memory
database = aDatabase;
engine.addAll(database.getCatalogItems());

// Mark end of catalog data for later
marker = engine.mark();
}
处理一条jess命令,需要四个步骤:重新设置引擎为初始状态,加载命令,执行规则,提取结果。加载命令的代码如下:
private void loadOrderData(int orderNumber) throws JessException {
// Retrive the order from the database
Order order = database.getOrder(orderNumber);

if (order != null) {
// Add the order and its contents to working memory
engine.add(order);
engine.add(order.getCustomer());
engine.addAll(order.getItems());
}
}
//执行命令并返回一个结果的的iterator,这结果需重新转换为java对象:
public Iterator run(int orderNumber) throws JessException {
// Remove any previous order data, leaving only catalog data
engine.resetToMark(marker);

// Load data for this order
loadOrderData(orderNumber);

// Fire the rules that apply to this order
engine.run();

// Return the list of offers created by the rules
return engine.getObjects(new Filter.ByClass(Offer.class));
}
而clp中的规则的内容则类似
Jess> (defrule 10%-volume-discount
"Give a 10% discount to everybody who spends more than $100."
(Order {total > 100})
=>
(add (new Offer "10% volume discount" (/ ?total 10))))

例子代码详见jess/examples/pricing_engine下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: