<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      漫話規(guī)則引擎(4): Java規(guī)則引擎規(guī)范:JSR94

      本文最新版已更新至:http://thinkinside.tk/2012/12/07/jsr94.html

      漫話規(guī)則引擎(4): Java規(guī)則引擎規(guī)范:JSR94

      Java World似乎總會(huì)出現(xiàn)一些接口規(guī)范,這樣做的好處是可以面向接口編程,可以在實(shí)現(xiàn)了該接口的產(chǎn)品/組件之間自由切換,避免被廠商綁架。 本文要介紹的JSR94:Java Rule Engine API,Java規(guī)則引擎API規(guī)范。

      1 概述

      JSR-94是JCP(Java Community Process)制定的關(guān)于Java規(guī)則引擎API的規(guī)范,包括接口定義和示例代碼。于2004年8月發(fā)布。 JSR-94定義了javax.rules和javax.rules.admin,前者包含了Java規(guī)則引擎運(yùn)行時(shí)(Rumtime)API及異常(Exception)定義,后者包含了規(guī)則管理相關(guān)的API和異常定義。

      2 規(guī)則管理API

      規(guī)則管理API在javax.rules.admin中定義,主要包括以下類/接口:

       
      類/接口說明
      Rule 規(guī)則實(shí)體
      RuleExecutionSet 執(zhí)行集,某個(gè)規(guī)則對應(yīng)的動(dòng)作
      LocalRuleExecutionSetProvider 用于從本地創(chuàng)建執(zhí)行集,如InputStream,Reader等
      RuleExectuionSetProvider 用于從本地或遠(yuǎn)程創(chuàng)建執(zhí)行集,如xml Element,Serializable等
      RuleAdministrator 用于獲取ExecutionSetProvider,并管理執(zhí)行集的注冊/注銷

      規(guī)則管理API實(shí)現(xiàn)的功能包括:

      1. 裝載規(guī)則(Rule)和執(zhí)行集(RuleExecutionSet)
      2. 執(zhí)行集的注冊/注銷,只有注冊的執(zhí)行集對應(yīng)的規(guī)則才能被客戶訪問

      3 運(yùn)行時(shí)API

      運(yùn)行時(shí)API在javax.rules中定義,主要包括以下類/接口:

       
      類/接口說明
      RuleServiceProviderManager 通過URL注冊/注銷RuleServiceProvider
      RuleServiceProvider 提供對RuleRuntime和RuleAdministrator的訪問
      RuleRuntime 規(guī)則引擎運(yùn)行時(shí),可以創(chuàng)建規(guī)則會(huì)話
      RuleSession 規(guī)則會(huì)話,用于執(zhí)行規(guī)則
      RuleExecutionSetMetaData 執(zhí)行集元數(shù)據(jù),包括name,url,description等。執(zhí)行集元數(shù)據(jù)會(huì)被RuleSession使用
      StatelessRuleSession 無狀態(tài)規(guī)則會(huì)話
      StatefulRuleSession 有狀態(tài)規(guī)則會(huì)話
      Handle和ObjectFilter 有狀態(tài)會(huì)話維護(hù)會(huì)話狀態(tài)的幫助類

      規(guī)則引擎運(yùn)行時(shí)API實(shí)現(xiàn)的功能包括:

      1. 注冊/注銷規(guī)則引擎實(shí)例,只有注冊的規(guī)則引擎實(shí)例才能被使用
      2. 從注冊的規(guī)則引擎實(shí)例創(chuàng)建Runtime
      3. 從Runtime創(chuàng)建會(huì)話,包括有狀態(tài)和無狀態(tài)兩種會(huì)話
      4. 通過會(huì)話執(zhí)行規(guī)則

      4 異常定義

      除了前面提到的主要類/接口外,JSR94還規(guī)定了規(guī)則引擎運(yùn)行時(shí)及管理的一些異常,如下:

      5 代碼示例

      下面是使用Drools作為規(guī)則引擎實(shí)例的一個(gè)例子,規(guī)則文件使用了Drools的drl格式:

      JSR94Sample.java

      package com.sample;
      
      import java.io.FileReader;
      import java.util.ArrayList;
      import java.util.HashMap;
      import java.util.List;
      
      import javax.rules.ConfigurationException;
      import javax.rules.RuleRuntime;
      import javax.rules.RuleServiceProvider;
      import javax.rules.RuleServiceProviderManager;
      import javax.rules.StatelessRuleSession;
      import javax.rules.admin.LocalRuleExecutionSetProvider;
      import javax.rules.admin.RuleAdministrator;
      import javax.rules.admin.RuleExecutionSet;
      
      import org.drools.jsr94.rules.RuleServiceProviderImpl;
      
      public class JSR94Sample {
          private static RuleServiceProvider ruleProvider;
          
          private static void initProvider(){
              String uri = RuleServiceProviderImpl.RULE_SERVICE_PROVIDER;
              Class providerClass = RuleServiceProviderImpl.class;
              
              try{
                  //注冊ruleProvider
                  RuleServiceProviderManager.registerRuleServiceProvider(uri, providerClass);
                  
                  //從RuleServiceProviderManager獲取ruleProvider
                  ruleProvider = RuleServiceProviderManager.getRuleServiceProvider(uri);
              }catch(ConfigurationException e){
                  e.printStackTrace();
              }
          }
          
          private static void adminSample(){
              
      
              try{
                  //獲取RuleAdministrator實(shí)例
                  RuleAdministrator admin = ruleProvider.getRuleAdministrator();
                  
                  //獲取RuleExectuionSetProvider
                  HashMap properties = new HashMap();   
                  properties.put("name", "My Rules");   
                  properties.put("description", "A trivial rulebase");
                  
                  LocalRuleExecutionSetProvider ruleExecutionSetProvider = admin.getLocalRuleExecutionSetProvider(properties);
                  
                  //創(chuàng)建RuleExecutionSet
                  FileReader reader = new FileReader("bin/sample.drl");
                  RuleExecutionSet reSet = ruleExecutionSetProvider.createRuleExecutionSet(reader, properties);
                  
                  //注冊RuleExecutionSet
                  admin.registerRuleExecutionSet("mysample",reSet,properties);
              }catch(Exception e){
                  e.printStackTrace();
              }
              
          }
          
          
          private static void runtimeSampe(){
              try{
                  //獲取RuleRuntime, 創(chuàng)建會(huì)話
                  RuleRuntime runtime = ruleProvider.getRuleRuntime();
                  StatelessRuleSession ruleSession = (StatelessRuleSession)runtime.createRuleSession("mysample",null,RuleRuntime.STATELESS_SESSION_TYPE);
                  
                  //初始化輸入數(shù)據(jù)
                  Message message1 = new Message();
                  message1.setMessage("Hello World");
                  message1.setStatus(Message.HELLO);
                  
                  Message message2 = new Message();
                  message2.setMessage("Goodbye World");
                  message2.setStatus(Message.GOODBYE);
                  
                  
                  List inputs = new ArrayList();
                  inputs.add(message1);
                  inputs.add(message2);
                  
                  //執(zhí)行規(guī)則
                  List<Message> results = ruleSession.executeRules(inputs);
                  for(int i=0;i<results.size();i++){
                      Message msg = results.get(i);
                      System.out.println(msg.message);
                  }
                  
                  
                  //釋放會(huì)話資源
                  ruleSession.release();
                  
              }catch(Exception e){
                  e.printStackTrace();
              }
          }
          
          
          public static void main(String[] args) {
              // TODO Auto-generated method stub
              initProvider();
              adminSample();
              runtimeSampe();
          }
          
          
          public static class Message {
      
              public static final int HELLO = 0;
              public static final int GOODBYE = 1;
      
              private String message;
      
              private int status;
      
              public String getMessage() {
                  return this.message;
              }
      
              public void setMessage(String message) {
                  this.message = message;
              }
      
              public int getStatus() {
                  return this.status;
              }
      
              public void setStatus(int status) {
                  this.status = status;
              }
      
          }
      
      }

       

      規(guī)則文件使用的就是在這里使用的例子。

      6 實(shí)現(xiàn)JSR94的產(chǎn)品

      主要的一些實(shí)現(xiàn)了JSR94的規(guī)則引擎產(chǎn)品如下:

       
      產(chǎn)品商業(yè)/開源規(guī)則描述語言算法規(guī)則開發(fā)工具規(guī)則保存部署方式
      Drools 開源 DRL,xDRL,DSL,Decision Table ReteOO Eclipse,excel 文件系統(tǒng) jar
      Mandarax 開源 RuleML        
      OpenRules 開源 Decision Table Rete excel   war
      JLisa 開源          
      Blaze 商業(yè) SRL        
      WebSphere ILOG JRules 商業(yè)          
      JESS 商業(yè)          

      7 小結(jié)

      JSR94為規(guī)則引擎提供了公用標(biāo)準(zhǔn)API,為實(shí)現(xiàn)規(guī)則管理API和運(yùn)行時(shí)API提供了指導(dǎo)規(guī)范, 目前已經(jīng)獲得很多開源/商業(yè)規(guī)則引擎產(chǎn)品的支持。 但是JSR94沒有對規(guī)則的描述語言進(jìn)行規(guī)范,導(dǎo)致各規(guī)則引擎產(chǎn)品大多采用自己私有的描述語言。

      Author: Holbrook Wong <wanghaikuo@tsinghua.org.cn>

      Date: 2012-12-07 12:49:16 CST

      HTML generated by org-mode 6.33x in emacs 23

      posted @ 2012-12-07 12:54  心內(nèi)求法  閱讀(13284)  評論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 欧洲码亚洲码的区别入口| 成人啪啪高潮不断观看| 国产一区二区高潮视频| 精品人妻中文字幕av| 日本久久一区二区免高清| 午夜免费视频国产在线| 激情六月丁香婷婷四房播| 偷拍激情视频一区二区三区| 国内精品自国内精品自久久| 精品国产高清中文字幕| 亚洲乱色熟女一区二区蜜臀| 羞羞影院午夜男女爽爽免费视频| 国产一区二区三区不卡视频| 国产小嫩模无套中出视频| 高清中文字幕一区二区| 久久精品丝袜高跟鞋| 亚洲大成色www永久网站动图| 伊伊人成亚洲综合人网7777| 亚洲一区二区三区18禁| 亚洲精品色国语对白在线| 国内精品免费久久久久电影院97| 国产丰满乱子伦无码专区| 色综合热无码热国产| 无码国模国产在线观看免费| 一面膜上边一面膜下边视频| 国产一区二区三区怡红院| 免费看成人欧美片爱潮app| 国产成人精彩在线视频| 亚洲熟女一区二区av| 色综合 图片区 小说区| 秋霞鲁丝片av无码少妇| 日韩精品卡1卡2日韩在线| 国产一区二区高清不卡| 久久久久国产精品人妻| 少妇人妻精品无码专区视频| 河源市| 国产麻豆一区二区精彩视频| 玩弄丰满少妇人妻视频| 第一精品福利导福航| 久青草国产综合视频在线| 国产精品久久久久aaaa|