基于Java的規(guī)則引擎_第1頁
基于Java的規(guī)則引擎_第2頁
基于Java的規(guī)則引擎_第3頁
基于Java的規(guī)則引擎_第4頁
基于Java的規(guī)則引擎_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、基于Java的規(guī)則引擎目 錄1.簡介31.1業(yè)務(wù)規(guī)則31.2規(guī)則引擎產(chǎn)生背景32.規(guī)則引擎52.1業(yè)務(wù)規(guī)則52.2規(guī)則引擎52.3規(guī)則引擎的使用方式52.4規(guī)則引擎架構(gòu)與推理62.5規(guī)則引擎的算法73.Java規(guī)則引擎83.1Java規(guī)則引擎商業(yè)產(chǎn)品83.2規(guī)則引擎產(chǎn)品特點分析93.2.1IBM WebSphere ILOG JRules93.2.2Redhat JBoss Dools123.2.3JESS124.Java規(guī)則引擎API(JSR94)144.1簡介144.2簡介Java規(guī)則引擎API體系結(jié)構(gòu)143.2.4規(guī)則管理API143.2.5運行時API154.3Java規(guī)則引擎API安

2、全問題164.4異常與日志164.5JSR94小結(jié)175規(guī)則語言181. 簡介1.1 業(yè)務(wù)規(guī)則一個業(yè)務(wù)規(guī)則包含一組條件和在此條件下執(zhí)行的操作它們表示業(yè)務(wù)規(guī)則應(yīng)用程序的一段業(yè)務(wù)邏輯。業(yè)務(wù)規(guī)則通常應(yīng)該由業(yè)務(wù)分析人員和策略管理者開發(fā)和修改,但有些復(fù)雜的業(yè)務(wù)規(guī)則也可以由技術(shù)人員使用面向?qū)ο蟮募夹g(shù)語言或腳本來定制。業(yè)務(wù)規(guī)則的理論基礎(chǔ)是:設(shè)置一個或多個條件,當(dāng)滿足這些條件時會觸發(fā)一個或多個操作。1.2 規(guī)則引擎產(chǎn)生背景復(fù)雜企業(yè)級項目的開發(fā)以及其中隨外部條件不斷變化的業(yè)務(wù)規(guī)則(business logic),迫切需要分離商業(yè)決策者的商業(yè)決策邏輯和應(yīng)用開發(fā)者的技術(shù)決策,并把這些商業(yè)決策放在中心數(shù)據(jù)庫或其他統(tǒng)一

3、的地方,讓它們能在運行時(即商務(wù)時間)可以動態(tài)地管理和修改從而提供軟件系統(tǒng)的柔性和適應(yīng)性。規(guī)則引擎正是應(yīng)用于上述動態(tài)環(huán)境中的一種解決方法。企業(yè)管理者對企業(yè)級IT系統(tǒng)的開發(fā)有著如下的要求:1. 為提高效率,管理流程必須自動化,即使現(xiàn)代商業(yè)規(guī)則異常復(fù)雜;2. 市場要求業(yè)務(wù)規(guī)則經(jīng)常變化,IT系統(tǒng)必須依據(jù)業(yè)務(wù)規(guī)則的變化快速、低成本的更新;3. 為了快速、低成本的更新,業(yè)務(wù)人員應(yīng)能直接管理IT系統(tǒng)中的規(guī)則,不需要程序開發(fā)人員參與。而項目開發(fā)人員則碰到了以下問題:4 程序=算法+數(shù)據(jù)結(jié)構(gòu),有些復(fù)雜的商業(yè)規(guī)則很難推導(dǎo)出算法和抽象出數(shù)據(jù)模型;5 軟件工程要求從需求-設(shè)計-編碼,然而業(yè)務(wù)規(guī)則常常在需求階段可能還

4、沒有明確,在設(shè)計和編碼后還在變化,業(yè)務(wù)規(guī)則往往嵌在系統(tǒng)各處代碼中;6 對程序員來說,系統(tǒng)已經(jīng)維護、更新困難,更不可能讓業(yè)務(wù)人員來管理?;谝?guī)則的專家系統(tǒng)的出現(xiàn)給開發(fā)人員以解決問題的契機。規(guī)則引擎由基于規(guī)則的專家系統(tǒng)中的推理引擎發(fā)展而來。2. 規(guī)則引擎2.1 業(yè)務(wù)規(guī)則一個業(yè)務(wù)規(guī)則包含一組條件和在此條件下執(zhí)行的操作,它們表示業(yè)務(wù)規(guī)則應(yīng)用程序的一段業(yè)務(wù)邏輯。業(yè)務(wù)規(guī)則通常應(yīng)該由業(yè)務(wù)分析人員和策略管理者開發(fā)和修改,但有些復(fù)雜的業(yè)務(wù)規(guī)則也可以由技術(shù)人員使用面向?qū)ο蟮募夹g(shù)語言或腳本來定制。業(yè)務(wù)規(guī)則的理論基礎(chǔ)是:設(shè)置一個或多個條件,當(dāng)滿足這些條件時會觸發(fā)一個或多個操作。2.2 規(guī)則引擎什么是規(guī)則引擎?規(guī)則引擎

5、是如何執(zhí)行規(guī)則的?這可以稱之為“什么”與“如何”的問題。到底規(guī)則引擎是什么還是目前業(yè)界一個比較有爭議的問題,在JSR-94種也幾乎沒有定義??梢赃@樣認(rèn)為充分定義和解決了“如何”的問題,“什么”問題本質(zhì)上也迎刃而解。也許這又是一種“先有蛋還是先有雞”哲學(xué)爭論。今后標(biāo)準(zhǔn)規(guī)則語言的定義和推出及相關(guān)標(biāo)準(zhǔn)的制定應(yīng)該可以給這樣的問題和爭論劃上一個句號。本文中,暫且這樣述說什么是規(guī)則引擎:規(guī)則引擎由推理引擎發(fā)展而來,是一種嵌入在應(yīng)用程序中的組件,實現(xiàn)了將業(yè)務(wù)決策從應(yīng)用程序代碼中分離出來,并使用預(yù)定義的語義模塊編寫業(yè)務(wù)決策。接受數(shù)據(jù)輸入,解釋業(yè)務(wù)規(guī)則,并根據(jù)規(guī)則做出業(yè)務(wù)決策。2.3 規(guī)則引擎的使用方式由于規(guī)則

6、引擎是軟件組件,所以只有開發(fā)人員才能夠通過程序接口的方式來使用和控制它,規(guī)則引擎的程序接口至少包含以下幾種API:l 加載和卸載規(guī)則集的API;l 數(shù)據(jù)操作的API;l 引擎執(zhí)行的API。開發(fā)人員在程序中使用規(guī)則引擎基本遵循以下5個典型的步驟:l 創(chuàng)建規(guī)則引擎對象;l 向引擎中加載規(guī)則集或更換規(guī)則集;l 向引擎提交需要被規(guī)則集處理的數(shù)據(jù)對象集合;l 命令引擎執(zhí)行;l 導(dǎo)出引擎執(zhí)行結(jié)果,從引擎中撤出處理過的數(shù)據(jù)。使用了規(guī)則引擎之后,許多涉及業(yè)務(wù)邏輯的程序代碼基本被這五個典型步驟所取代。一個開放的業(yè)務(wù)規(guī)則引擎應(yīng)該可以“嵌入”在應(yīng)用程序的任何位置,不同位置的規(guī)則引擎可以使用不同的規(guī)則集,用于處理不同

7、的數(shù)據(jù)對象。此外,對使用引擎的數(shù)量沒有限制。2.4 規(guī)則引擎架構(gòu)與推理規(guī)則引擎的架構(gòu)如下圖所示:規(guī)則引擎的推理步驟如下:a.將初始數(shù)據(jù)(fact)輸入至工作內(nèi)存(Working Memory)。b.使用Pattern Matcher將規(guī)則庫(Rules repository)中的規(guī)則(rule)和數(shù)據(jù)(fact)比較。c.如果執(zhí)行規(guī)則存在沖突(conflict),即同時激活了多個規(guī)則,將沖突的規(guī)則放入沖突集合。d.解決沖突,將激活的規(guī)則按順序放入Agenda。e.執(zhí)行Agenda中的規(guī)則。重復(fù)步驟b至e,直到執(zhí)行完畢Agenda中的所有規(guī)則。任何一個規(guī)則引擎都需要很好地解決規(guī)則的推理機制和規(guī)則

8、條件匹配的效率問題。當(dāng)引擎執(zhí)行時,會根據(jù)規(guī)則執(zhí)行隊列中的優(yōu)先順序逐條執(zhí)行規(guī)則執(zhí)行實例,由于規(guī)則的執(zhí)行部分可能會改變工作區(qū)的數(shù)據(jù)對象,從而會使隊列中的某些規(guī)則執(zhí)行實例因為條件改變而失效,必須從隊列中撤銷,也可能會激活原來不滿足條件的規(guī)則,生成新的規(guī)則執(zhí)行實例進入隊列。于是就產(chǎn)生了一種“動態(tài)”的規(guī)則執(zhí)行鏈,形成規(guī)則的推理機制。這種規(guī)則的“鏈?zhǔn)健狈磻?yīng)完全是由工作區(qū)中的數(shù)據(jù)驅(qū)動的。 規(guī)則條件匹配的效率決定了引擎的性能,引擎需要迅速測試工作區(qū)中的數(shù)據(jù)對象,從加載的規(guī)則集中發(fā)現(xiàn)符合條件的規(guī)則,生成規(guī)則執(zhí)行實例。1982年美國卡耐基梅隆大學(xué)的Charles L. Forgy發(fā)明了一種叫Rete的算法,很好地

9、解決了這方面的問題。目前世界頂尖的商用業(yè)務(wù)規(guī)則引擎產(chǎn)品基本上都使用Rete算法。2.5 規(guī)則引擎的算法大部分規(guī)則引擎產(chǎn)品的算法,基本上都來自于Dr. Charles Forgy在1979年提出的RETE算法及其變體,Rete算法是目前效率最高的一個Forward-Chaining推理算法,Drools項目是Rete算法的一個面向?qū)ο蟮腏ava實現(xiàn),Rete算法其核心思想是將分離的匹配項根據(jù)內(nèi)容動態(tài)構(gòu)造匹配樹,以達到顯著降低計算量的效果。詳情請見CIS587:The RETE Algorithm,The Rete Algorithm,RETE演算法,專家系統(tǒng)原理與編程中第11章等。3. Java

10、規(guī)則引擎目前主流的規(guī)則引擎組件多是基于Java和C+程序語言環(huán)境,已經(jīng)有多種Java規(guī)則引擎商業(yè)產(chǎn)品與開源項目的實現(xiàn),其中有的已經(jīng)支持JSR94,有的正朝這個方向做出努力,列出如下:3.1 Java規(guī)則引擎商業(yè)產(chǎn)品Java規(guī)則引擎商業(yè)產(chǎn)品主要有(Jess不是開源項目,它可以免費用于學(xué)術(shù)研究,但用于商業(yè)用途則要收費):組織/廠商名稱主頁說明JSR 兼容性ILOGJRules/software/cn/websphere/ilog/products/jrules/index.html已被IBM收購JRules 4.6DroolsDroolshttp:/ww

11、/drools.html已被Redhat JBoss收購,轉(zhuǎn)向商業(yè)化,仍有社區(qū)版本基于JSR94和Rete算法Sandia LabsJESS/jess/JESS 6.1 p6JLisaJLisb/商業(yè)化/社區(qū)支持TmaxSoftProRule/jsp/main.jspFair Isaac, Blaze AdvisorBlaze Advisor/fic/cn/fic/cn/ind

12、ex.htmPegaSystems Inc.PegaRULES Process Commander/CRM行業(yè)的解決方案供應(yīng)商,轉(zhuǎn)向BPM領(lǐng)域3.2 規(guī)則引擎產(chǎn)品特點分析這里對目前市場上幾個比較重要的基于Java的商業(yè)規(guī)則引擎產(chǎn)品進行特點分析。3.2.1 IBM WebSphere ILOG JRules作為企業(yè)IT基礎(chǔ)設(shè)施的關(guān)鍵部分,業(yè)務(wù)流程管理越來越重要了。在BPM產(chǎn)品套件平臺上,可以建模、部署、執(zhí)行和監(jiān)視企業(yè)的業(yè)務(wù)流程,業(yè)務(wù)流程可以包含業(yè)務(wù)規(guī)則。例如,在銀行的賬戶驗證過程中,評估客戶資格或確定價格的業(yè)務(wù)策略很復(fù)雜,而且在快速發(fā)展的市場中常常會變動。把這

13、些策略硬編碼在過程中是不合適的,因為很難在運行時管理和維護業(yè)務(wù)規(guī)則。通過把業(yè)務(wù)規(guī)則和業(yè)務(wù)流程分隔開,單獨地執(zhí)行和管理它們,可以提高整個業(yè)務(wù)流程的敏捷性和擴展性。ILOG的JRules在融入到IBM的WebSphere套件體系后,在架構(gòu)層面和技術(shù)層面充分體現(xiàn)了這種業(yè)務(wù)流程與業(yè)務(wù)規(guī)則分離的思想,如下圖所示:ILOG JRules是先進的業(yè)務(wù)規(guī)則管理系統(tǒng)(Business Rule Management System,BRMS),提供編寫、部署和管理業(yè)務(wù)規(guī)則等業(yè)務(wù)功能,支持高效地修改策略和快速部署策略。ILOG JRules提供一種建模、實現(xiàn)和部署業(yè)務(wù)規(guī)則的系統(tǒng)化方法。它支持以有秩序的高效的方式進行

14、協(xié)作。它包含的工具針對不同用戶的技能和知識優(yōu)化過,因此策略經(jīng)理、業(yè)務(wù)分析師和開發(fā)人員都可以獲得所需的支持,可以盡可能發(fā)揮BRMS的價值。下圖是JRules的架構(gòu): 下面簡要介紹ILOG JRules架構(gòu)的每個部分:ILOG Rule Studio:用于開發(fā)規(guī)則應(yīng)用程序的基于Eclipse的開發(fā)環(huán)境。它允許合作編輯和調(diào)試Java代碼和規(guī)則。特性包括:l Eclipse集成l 編輯規(guī)則時的自動糾正l 代碼生成向?qū) 單一接口存儲庫l 源代碼控制集成l 沖突和重復(fù)探測l 簡便的部署ILOG Rule Team Server:這是一個Web環(huán)境,分布式業(yè)務(wù)團隊可以通過它協(xié)作、創(chuàng)建、管理、驗證和部署業(yè)務(wù)

15、規(guī)則。l ILOG JRules Rule Execution Server提供一個健壯的與J2SE和J2EE兼容的執(zhí)行環(huán)境,用于部署和執(zhí)行業(yè)務(wù)規(guī)則。Rule Execution Server包含對業(yè)務(wù)規(guī)則進行同步、異步和基于Web服務(wù)的調(diào)用的組件,還包含一個Web管理控制臺。它與ILOG JRules Rule Studio和Rule Team Server完全集成,支持開發(fā)人員和業(yè)務(wù)用戶部署業(yè)務(wù)規(guī)則。l ILOG JRules是IBM WebSphere系列產(chǎn)品之一,可以與Process Server和Integration Developer等其他WebSphere產(chǎn)品集成。ILOG J

16、Rules讓業(yè)務(wù)用戶可以快速地創(chuàng)建和修改規(guī)則以滿足經(jīng)常變化的業(yè)務(wù)需求,不需要IT人員協(xié)助。它還有助于在整個企業(yè)內(nèi)確保業(yè)務(wù)規(guī)則的可見性、可跟蹤性和質(zhì)量,讓業(yè)務(wù)經(jīng)理可以更快、更好地做出決策。由于這些原因,ILOG JRules很適合與IBM BPM產(chǎn)品集成,從而為客戶的業(yè)務(wù)流程場景提供策略和決策服務(wù)。下圖給出一個從Process Server中的業(yè)務(wù)流程調(diào)用JRules服務(wù)的示例。說明了JRules如何與WebSphere集成:3.2.2 Redhat JBoss DoolsDrools 也是基于Charles Forgy s 的Rete 算法,專為Java 語言所設(shè)計的規(guī)則引擎。Rete 算法應(yīng)

17、用于面向?qū)ο蟮慕涌趯⑹够谏虡I(yè)對象的商業(yè)規(guī)則的表達更為自然。Drools 是用Java 寫的, 但能同時運行在Java 和.Net 上。Drools 提供了聲明式程序設(shè)計(Declarative Programming) , 并且使用域描述語言(Domain Specific Languages,DSL ) 為問題域定義了某種模式的XML,從而可以用來描述用戶問題域。DSLs 包含的XML 元素(Element) 和屬性(Attribute)代表了問題域中各種要素。例如:規(guī)則集是符合特定模式的XML文件。規(guī)則“語言”實際就是Portal 表達軟件包的使用, 可以擴充以滿足規(guī)則引擎的額外要求。D

18、rools規(guī)則集的擴展名為.rls, 一般包括標(biāo)簽cr:rule- set、規(guī)則cr:rule、每個規(guī)則中又定義有測試條件cr:condition與動作cr:actions。例如:rule-set name=test rules com.zhang.rules x.getStatus().equals(y:borrower) vo.setMassage(z,late book) 3.2.3 JESS在JESS中,規(guī)則的表達形式沿用了CLIPS的語法結(jié)構(gòu),通過對規(guī)則前件和后件的限定,它可以支持內(nèi)容豐富的模式匹配語言。另外,Jess支持面向過程的編程方式,它提供了一些語句來控制規(guī)則后件的操作流程,

19、如使用if.then.else和while.do.語句,這樣它就能很有效地利用面向過程編程的優(yōu)勢??傊琂ESS的這些特性使系統(tǒng)擁有很強的知識表示能力。例如:( defrule library- rule- 1 ( book ( name ?X) ( status late) ( borrower ?Y) ) ( borrower ( name ?Y) ( address ?Z) )= ( send- late- notice ?X ?Y ?Z) )這套規(guī)則可以被翻譯作中文這樣理解:This rule might be庫規(guī)則#1:如果出現(xiàn)一本超期的名字為X的書,它是名字為Y的人所借,并且,Z知

20、道借者的地址, 則給Y發(fā)送一條關(guān)于X書的通知到Z處。4. Java規(guī)則引擎API(JSR94)4.1 簡介過去大部分的規(guī)則引擎開發(fā)并沒有規(guī)范化,有其自有的API,這使得其與外部程序交互集成不夠靈活。轉(zhuǎn)而使用另外一種產(chǎn)品時往往意味需要重寫應(yīng)用程序邏輯和API調(diào)用,代價較大。規(guī)則引擎工業(yè)中標(biāo)準(zhǔn)的缺乏成為令人關(guān)注的重要方面。2003年11月定稿并于2004年8月最終發(fā)布的JSR 94(Java規(guī)則引擎API)使得Java規(guī)則引擎的實現(xiàn)得以標(biāo)準(zhǔn)化。Java規(guī)則引擎API由javax.rules包定義,是訪問規(guī)則引擎的標(biāo)準(zhǔn)企業(yè)級API。Java規(guī)則引擎API允許客戶程序使用統(tǒng)一的方式和不同廠商的規(guī)則引擎

21、產(chǎn)品交互,就像使用JDBC編寫?yīng)毩⒂趶S商訪問不同的數(shù)據(jù)庫產(chǎn)品一樣。Java規(guī)則引擎API包括創(chuàng)建和管理規(guī)則集合的機制,在Working Memory中添加,刪除和修改對象的機制,以及初始化,重置和執(zhí)行規(guī)則引擎的機制。4.2 簡介Java規(guī)則引擎API體系結(jié)構(gòu)Java規(guī)則引擎API分為兩個主要部分:運行時客戶API(the Runtime client API)和規(guī)則管理API(the rules administration API)。3.2.4 規(guī)則管理API規(guī)則管理API在javax.rules.admin中定義,包括裝載規(guī)則以及與規(guī)則對應(yīng)的動作(執(zhí)行集 execution sets)以及

22、實例化規(guī)則引擎。規(guī)則可以從外部資源中裝載,比如說URI、Input streams、XML streams和readers等等。同時,管理API提供了注冊和取消注冊執(zhí)行集以及對執(zhí)行集進行維護的機制。使用admin包定義規(guī)則有助于對客戶訪問運行規(guī)則進行控制管理,它通過在執(zhí)行集上定義許可權(quán)使得未經(jīng)授權(quán)的用戶無法訪問受控規(guī)則。管理API使用類RuleServiceProvider來獲得規(guī)則管理(RuleAdministrator)接口的實例。規(guī)則管理接口提供方法注冊和取消注冊執(zhí)行集。規(guī)則管理器(RuleAdministrator)提供了本地和遠(yuǎn)程的RuleExecutionSetProvider。在

23、前面已提及,RuleExecutionSetProvider負(fù)責(zé)創(chuàng)建規(guī)則執(zhí)行集。規(guī)則執(zhí)行集可以從如XML streams、input streams等來源中創(chuàng)建。這些數(shù)據(jù)來源及其內(nèi)容經(jīng)匯集和序列化后傳送到遠(yuǎn)程的運行規(guī)則引擎的服務(wù)器上。大多數(shù)應(yīng)用程序中,遠(yuǎn)程規(guī)則引擎或遠(yuǎn)程規(guī)則數(shù)據(jù)來源的情況并不多見。為了避免這些情況中的網(wǎng)絡(luò)開銷,API規(guī)定了可以從運行在同一JVM中規(guī)則庫中讀取數(shù)據(jù)的本地RuleExecutionSetProvider。規(guī)則執(zhí)行集接口除了擁有能夠獲得有關(guān)規(guī)則執(zhí)行集的方法,還有能夠檢索在規(guī)則執(zhí)行集中定義的所有規(guī)則對象。這使得客戶能夠知道規(guī)則集中的規(guī)則對象并且按照自己需要來使用它們。3

24、.2.5 運行時API運行時API定義在javax.rules包中,為規(guī)則引擎用戶運行規(guī)則獲得結(jié)果提供了類和方法。運行時客戶只能訪問那些使用規(guī)則管理API注冊過的規(guī)則,運行時API幫助用戶獲得規(guī)則對話并且在這個對話中執(zhí)行規(guī)則。運行時API提供了對廠商規(guī)則引擎API實現(xiàn)的類似于JDBC的訪問方法。規(guī)則引擎廠商通過類RuleServiceProvider(類RuleServiceProvider提供了對具體規(guī)則引擎實現(xiàn)的運行時和管理API的訪問)將其規(guī)則引擎實現(xiàn)提供給客戶,并獲得RuleServiceProvider唯一標(biāo)識規(guī)則引擎的URL。URL推薦標(biāo)準(zhǔn)用法是使用類似“com.mycompany

25、.myrulesengine.rules.RuleServiceProvider”這樣的Internet域名空間,這將有助于訪問URL的唯一性。類RuleServiceProvider內(nèi)部實現(xiàn)了規(guī)則管理和運行時訪問所需的接口。所有的RuleServiceProvider要想被客戶所訪問都必須用RuleServiceProviderManager進行注冊。注冊方式類似于JDBC API的DriverManager和Driver。運行時接口是運行時API的關(guān)鍵部分。運行時接口提供了用于創(chuàng)建規(guī)則會話(RuleSession)的方法,規(guī)則會話如前所述是用來運行規(guī)則的。運行時API同時也提供了訪問在se

26、rvice provider注冊過的所有規(guī)則執(zhí)行集(RuleExecutionSets)。規(guī)則會話接口定義了客戶使用的會話的類型,客戶根據(jù)自己運行規(guī)則的方式可以選擇使用有狀態(tài)會話或者無狀態(tài)會話。無狀態(tài)會話的工作方式就像一個無狀態(tài)會話bean??蛻艨梢园l(fā)送單個輸入對象或一列對象來獲得輸出對象。當(dāng)客戶需要一個與規(guī)則引擎間的專用會話時,有狀態(tài)會話就很有用。輸入的對象通過addObject()方法可以加入到會話當(dāng)中。同一個會話當(dāng)中可以加入多個對象。對話中已有對象可以通過使用updateObject()方法得到更新。只要客戶與規(guī)則引擎間的會話依然存在,會話中的對象就不會丟失。RuleExecutionS

27、etMetaData接口提供給客戶讓其查找規(guī)則執(zhí)行集的元數(shù)據(jù)(metadata)。元數(shù)據(jù)通過規(guī)則會話接口(RuleSession Interface)提供給用戶。使用運行時Runtime API的代碼片斷如下所示:RuleServiceProvider ruleProvider = RuleServiceProviderManager.getRuleServiceProvider(com.mycompany.myrulesengine.rules. RuleServiceProvider);RuleRuntime ruleRuntime = ruleProvider.getRuleRuntim

28、e();StatelessRuleSession ruleSession = (StatelessRuleSession) ruleRuntime.createRuleSession(ruleURL, null, RuleRuntime.STTELESS_SESSION_TYPE);List inputRules = new ArrayList();inputRules.add(new String(Rule 1);inputRules.add(new Integer(1);List resultRules = ruleSession.executeRules(inputRules);4.3

29、Java規(guī)則引擎API安全問題規(guī)則引擎API將管理API和運行時API加以分開,從而為這些包提供了較好粒度的安全控制。規(guī)則引擎API并沒有提供明顯的安全機制,它可以和J2EE規(guī)范中定義的標(biāo)準(zhǔn)安全API聯(lián)合使用。安全可以由以下機制提供:如Java authentication and authorization service(JAAS),the Java cryptography extension(JCE),Java secure Socket Extension(JSSE),或者其它定制的安全API。JAAS能被用來定義規(guī)則執(zhí)行集的許可權(quán)限,從而只有授權(quán)用戶才能訪問。4.4 異常與日志規(guī)則引擎API定義了javax.rules.RuleException作為規(guī)則引擎異常層次的根類。所有其它異常都繼承于這個根類。規(guī)則引擎中

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論