探討Java技術,努力學習,分享心得

          我不是技術控,拿來主義其實也挺好,但是一定要有自己的想法

          統計

          留言簿

          閱讀排行榜

          評論排行榜

          在drools引擎中如果使用規則表

          前提準備:java 虛擬機 
                           Drools核心庫
                           Junit4.0以上版本
                           規則Excel模板表(將下面的圖片的內容新建到Excel中)

          典型的用法就是根據excel創建KnowledgeBase,然后將它丟給session執行,執行的參數和結果都在params里面
            1 package com.xxx.yyyy;
            2 
            3 import java.io.File;
            4 import java.io.FileInputStream;
            5 import java.io.InputStream;
            6 import java.util.Arrays;
            7 import java.util.Collection;
            8 import java.util.HashMap;
            9 import java.util.Map;
           10 import junit.framework.Assert;
           11 import org.drools.KnowledgeBase;
           12 import org.drools.KnowledgeBaseFactory;
           13 import org.drools.builder.DecisionTableConfiguration;
           14 import org.drools.builder.DecisionTableInputType;
           15 import org.drools.builder.KnowledgeBuilder;
           16 import org.drools.builder.KnowledgeBuilderFactory;
           17 import org.drools.builder.ResourceType;
           18 import org.drools.definition.KnowledgePackage;
           19 import org.drools.io.ResourceFactory;
           20 import org.drools.runtime.StatelessKnowledgeSession;
           21 import org.junit.Test;
           22 import org.junit.runner.RunWith;
           23 import org.junit.runners.Parameterized;
           24 import org.junit.runners.Parameterized.Parameters;
           25 
           26 @RunWith(Parameterized.class)
           27 public class IsP4PTest
           28 {
           29     private IsP4P param;
           30 
           31     private String extected;
           32 
           33     public IsP4PTest(IsP4P param, String extected)
           34     {
           35         this.param = param;
           36         this.extected = extected;
           37     }
           38 public Map<String, Object> getParams()
           39         {
           40             Map<String, Object> params = new HashMap<String, Object>();
           41 
           42             params.put("productLine", productLine);
           43             params.put("productType", productType);
           44             params.put("playType", playType);
           45 
           46             return params;
           47         }
           48 public void testExcel(String fileName, Map<String, Object> params)
           49             throws Exception
           50     {
           51         System.out.println("---------------begin------------------------");
           52 
           53         DecisionTableConfiguration dtableconfiguration = KnowledgeBuilderFactory
           54                 .newDecisionTableConfiguration();
           55 dtableconfiguration.setInputType(DecisionTableInputType.XLS);
           56         final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
           57                 .newKnowledgeBuilder();
           58 File file = new File(
           59                 "F:\\juny.qu\\rule_workspace\\com.deppon.rules\\src\\main\\java\\com\\xxx\\yyyy\\"
           60                         + fileName);
           61         InputStream is = new FileInputStream(file);
           62 kbuilder.add(ResourceFactory.newInputStreamResource(is, "UTF-8"),
           63                 ResourceType.DTABLE);
           64         if (kbuilder.hasErrors())
           65         {
           66             System.out.println(kbuilder.getErrors().toString());
           67         }
           68 Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
           69         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
           70         kbase.addKnowledgePackages(pkgs);
           71 
           72 StatelessKnowledgeSession ksession = kbase
           73                 .newStatelessKnowledgeSession();
           74         ksession.execute(Arrays.asList(new Object[] { params }));
           75 
           76 System.out.println("---------------end------------------------");
           77 }
           78 
           79 
           80 @Parameters
           81     public static Collection<?> contructData()
           82     {
           83 return Arrays.asList(new Object[][] {
           84                 { new IsP4P("搜索推廣", "true", "null"), "true" },
           85                 { new IsP4P("網盟推廣", "true", "null"), "true" },
           86                 { new IsP4P("掘金推廣", "true", "非輪播"), "false" },
           87                 { new IsP4P("其他", "false", "其他"), "other" } });
           88 }
           89 
           90 @Test
           91     public void testP4P() throws Exception
           92     {
           93         Map<String, Object> params = new HashMap<String, Object>();
           94         params.putAll(param.getParams());
           95         testExcel("ka/isP4P.xls", params);
           96         Assert.assertEquals(extected, params.get("isP4P"));
           97     }
           98 }
           99 
          100 

           1 package com.xxx.yyyy;
           2 
           3 import java.io.File;
           4 import java.io.FileInputStream;
           5 import java.io.FileNotFoundException;
           6 import java.io.InputStream;
           7 
           8 import org.drools.decisiontable.InputType;
           9 import org.drools.decisiontable.SpreadsheetCompiler;
          10 import org.junit.Test;
          11 
          12 public class SpreadsheetCompilerTest {
          13 
          14 @Test
          15     public void compile() throws FileNotFoundException{
          16         //File file = new File("F:\\juny.qu\\rule_workspace\\com.deppon.rules\\src\\main\\java\\com\\xxx\\yyyy\\ka\\isP4P.xls");
          17         //File file = new File("F:\\collections_study\\規則引擎系統開發小組\\規則引擎doc\\02開發\\06-詳細設計\\增值服務折扣測試1.xls");
          18         File file = new File("F:\\rules.xlsx");
          19         
          20         InputStream is = new FileInputStream(file);
          21         
          22         SpreadsheetCompiler converter = new SpreadsheetCompiler();
          23         String drl = converter.compile(is, InputType.XLS); //--------exception here-------- 
          24         System.out.println("\n\n" + drl);
          25         
          26     }
          27 
          28 }
          • 什么時候考慮使用規則表
            如果規則可以表示成 templates+data(模板+數據),可以考慮使用 decision tables。在決策表的每一行,采集數據和模板一起生成規則。使用基于決策表的SpreadsheetAPIDrools-decisiontables模塊中。只有一個類:SpreadsheetCompiler. 這個類可以操作各種格式的Spreadsheet,并生成DRL規則(然后就可以常規的方式使用)。

          一個典型的規則表的格式




          posted on 2015-02-05 14:09 瞿祥軍 閱讀(2299) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 苗栗县| 乌鲁木齐县| 太谷县| 蒙山县| 依兰县| 镇原县| 泰州市| 罗源县| 合江县| 鄯善县| 顺平县| 阳泉市| 淄博市| 南丰县| 江阴市| 大安市| 抚顺县| 阳泉市| 高雄市| 万源市| 襄城县| 崇义县| 吉木乃县| 轮台县| 习水县| 嘉祥县| 屏东市| 栾川县| 疏勒县| 庐江县| 迭部县| 伊春市| 枣阳市| 阿合奇县| 望奎县| 靖安县| 清丰县| 开江县| 子长县| 敖汉旗| 溧阳市|