北方站长站
客服热线:0632-5117766

Java规则引擎与其API应用详解

[2005-12-28 00:00:00] 作者:Northz.com 来源:北方站长站

Tags:应用 详解 与其 规则 引擎 API 执行 使用 对象 Java 一个

  

  由于没有关于规则如何定义的公用规范,市场上大多数流行的规则引擎都有其自己的规则语言,目前便有许多种规则语言正在应用,因此,当需要将应用移植到其他的Java规则引擎实现时,可能需要变换规则定义,如将Drools私有的DRL规则语言转换成标准的ruleML,Jess规则语言转换成ruleML等。这个工作一般由XSLT转换器来完成。qPS北方站长站
  规则语言的详情这里不作详细介绍,名称及其网址列出如下:qPS北方站长站
  Rule Markup language (RuleML)qPS北方站长站
  http://www.ruleml.org/ Simple Rule Markup Language (SRML) qPS北方站长站
  http://xml.coverpages.org/srml.html Business Rules Markup Language (BRML)qPS北方站长站
  http://xml.coverpages.org/brml.html SWRL: A Semantic Web Rule Language Combining OWL and RuleMLqPS北方站长站
  http://www.daml.org/2003/11/swrl/
  多种规则语言的使用使得不同规则引擎实现之间的兼容性成为问题.通用的规则引擎API或许可以减轻不同厂家API之间的问题,但公用规则语言的缺乏将仍然阻碍不同规则引擎实现之间的互操作性.尽管业界在提出公用规则语言上做出了一些努力, 比如说RuleML,SRML的出现,但距离获得绝大部分规则引擎厂商同意的公用标准还有很长的路要走。qPS北方站长站
  6、 Java规则引擎API使用示例 qPS北方站长站
  6.1 设置规则引擎qPS北方站长站
  Java规则引擎的管理活动阶段开始于查找一个合适的javax.rules.RuleServiceProvider对象,这个对象是应用程序访问规则引擎的入口。在J2EE环境中,你可能可以通过JNDI获得RuleServiceProvider。否则,你可以使用javax.rules.RuleServiceProviderManager类: qPS北方站长站
javax.rules.RuleServiceProviderManager class:qPS北方站长站
String implName = "org.jcp.jsr94.ri.RuleServiceProvider";qPS北方站长站
Class.forName(implName);qPS北方站长站
RuleServiceProvider serviceProvider = RuleServiceProviderManager.getRuleServiceProvider(implName);
qPS北方站长站
  拥有了RuleServiceProvider对象,你就可以获得一个javax.rules.admin.RuleAdministrator类。从RuleAdministrator类中,你可以得到一个RuleExecutionSetProvider,从类名可以知道,它用于创建javax.rules.RuleExecutionSets对象。RuleExecutionSet基本上是一个装入内存的,准备好执行的规则集合。qPS北方站长站
  包javax.rules.admin包括两个不同的RuleExecutionSetProvider类。RuleExecutionSetProvider类本身包括了从Serializable对象创建RuleExecutionSets的方法,因此在规则引擎位于远程服务器的情况下,仍然可以使用RuleExecutionSetProvider类,构造器的参数可以通过RMI来传递。另一个类是LocalRuleExecutionSetProvider,包含了其他方法,用于从非Serializable资源(如java.io.Reader-本地文件)创建RuleExectionSets。假设拥有了一个RuleServiceProvider对象,你可以从本地文件rules.xml文件创建一个RuleExectionSet对象。如以下的代码所示:qPS北方站长站
  RuleAdministrator admin = serviceProvider.getRuleAdministrator();qPS北方站长站
HashMap properties = new HashMap();qPS北方站长站
properties.put("name", "My Rules");qPS北方站长站
properties.put("description", "A trivial rulebase"); qPS北方站长站
FileReader reader = new FileReader("rules.xml");qPS北方站长站
RuleExecutionSet ruleSet = null;qPS北方站长站
try {qPS北方站长站
LocalRuleExecutionSetProvider lresp =admin.getLocalRuleExecutionSetProvider(properties); qPS北方站长站
ruleSet = lresp.createRuleExecutionSet(reader, properties);qPS北方站长站
} finally {qPS北方站长站
reader.close();qPS北方站长站
}
qPS北方站长站
  接下来,你可以使用RuleAdministrator注册获得的RuleExecutionSet,并给它分配一个名称。在运行时,你可以用同一个名称创建一个RuleSession;该RuleSession使用了这个命名的RuleExecutionSet。参见下面的用法:admin.registerRuleExecutionSet("rules", ruleSet, properties);qPS北方站长站
  6.2 执行规则引擎qPS北方站长站
  在运行时阶段,你可以参见一个RuleSession对象。RuleSession对象基本上是一个装载了特定规则集合的规则引擎实例。你从RuleServiceProvider得到一个RuleRuntime对象,接下来,从javax.rules.RuleRuntime得到RuleSession对象。qPS北方站长站
  RuleSession分为两类:stateful和stateless。它们具有不同的功能。StatefulRuleSession的Working Memory能够在多个方法调用期间保存状态。你可以在多个方法调用期间在Working Memory中加入多个对象,然后执行引擎,接下来还可以加入更多的对象并再次执行引擎。相反,StatelessRuleSession类是不保存状态的,为了执行它的executeRules方法,你必须为Working Memory提供所有的初始数据,执行规则引擎,得到一个内容列表作为返回值。qPS北方站长站
  下面的例子中,我们创建一个StatefulRuleSession实例,添加两个对象(一个Integer和一个String)到Working Memory,执行规则,然后得到Working Memory中所有的内容,作为java.util.List对象返回。最后,我们调用release方法清理RuleSession:qPS北方站长站
  RuleRuntime runtime = rsp.getRuleRuntime(); qPS北方站长站
 StatefulRuleSession session = (StatefulRuleSession)runtime.createRuleSession("rules",qPS北方站长站
properties,RuleRuntime.STATEFUL_SESSION_TYPE);qPS北方站长站
 session.addObject(new Integer(1)); qPS北方站长站
session.addObject("A string");qPS北方站长站
session.executeRules(); qPS北方站长站
List results = session.getObjects(); qPS北方站长站
session.release();
qPS北方站长站
  7、 结束语 qPS北方站长站
  Java规则引擎API(JSR-94)允许客户程序使用统一的方式和不同厂商的规则引擎产品交互,一定程度上给规则引擎厂商提供了标准化规范。但其几乎没有定义什么是规则引擎,当然也没有深入到规则是如何构建和操纵的,规则调用的效用,规则与Java语言的绑定等方面。并且JSR-94在对J2EE的支持上也不足。规则语言的标准化,JSR-94的进一步的充实深化都有待研究。qPS北方站长站

 

News

 

info

 

down

出售手机裁听器,手机跟踪定位系统    企业网站,网城,购物网,都市导购,校园网    网上书店系统    上海电信机房服务器托管,双线主机托管    美女图片馆    15G 高清晰图片资源 无水印    室内装潢材料新产品杰威尔艺术漆    收一万ip的美女图片    大量收购个人网址导航网站    出售网址站PR=4alexa=119,764    

上一页 1 2 3 4

下一篇链接:Java中的两个特殊变量this和super

上一篇链接:Struts开发指南之MVC架构

评论】 【打印】 【加入收藏】 【关闭→论坛 →博客 →数据中心

 共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面