freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

drools使用手冊第六--十章(已修改)

2024-11-24 16:38 本頁面
 

【正文】 第六章 . Java 規(guī)則引擎 API . 簡介 Drools 提供了一個(gè) Java 規(guī)則引擎 API( JSR94)的實(shí)現(xiàn),它允許在一個(gè) API 中支持多個(gè)規(guī)則引擎。 JSR94 不本身不對規(guī)則語言進(jìn)行任何處理。 WSC 工作在 Rule Interchange Format (RIF),而 OMG 則開始在 RuleML 的基礎(chǔ)上建立一個(gè)標(biāo)準(zhǔn),當(dāng)前 Haley 系統(tǒng)已經(jīng)提議一種規(guī)則語言標(biāo)準(zhǔn)稱 為 RML。 應(yīng)當(dāng)記住的是, JSR94 標(biāo)準(zhǔn)描述了不同規(guī)則引擎特性的“最小公分母”,這個(gè)意思是說 JSR94 API 中的功能要比 Drools API 提供的功能要少。因此在 JSR94 中你不能應(yīng)用 Drools 規(guī)則引擎的全部功能。 Drools 需要暴露出更多的功能,像全局變量, DRL、 DSL 支持, Xml 屬性映射等等,因?yàn)?JSR94 提供的功能集合是非?;镜奶匦?。更進(jìn)一步說, JSR94 不提供一種規(guī)則語言,你只能使用規(guī)則引擎所提供的一小部分功能,能夠獲得的好處很有限。因此當(dāng)我們?yōu)閳?jiān)持使用 JSR94的程序員提供 API 的同時(shí),我 們強(qiáng)烈建議使用 Drools API。 . 如何使用 JSR94分為兩部分工作。第一部分是管理 API用來創(chuàng)建和注冊 RuleExecutionSet。第二部分是運(yùn)行時(shí) Session,用來執(zhí)行這些 RuleExecutionSet。 . 創(chuàng)建與注冊 RuleExecutionSet RuleServiceProviderManager 對注冊進(jìn)行管理,并返回 RuleServiceProvider。Drools 的 RuleServiceProvider 實(shí)現(xiàn)在類被使用 裝載時(shí)自動(dòng)注冊通 過一個(gè)靜態(tài)模塊注冊,在大多數(shù)情況下 JDBC 驅(qū)動(dòng)也使用同樣的方式。 例 . 自動(dòng)注冊 RuleServiceProvider // RuleServiceProviderImpl 通過一個(gè)靜態(tài)初始化模塊注冊到 ()。 // 從提供者管理器中獲得規(guī)則服務(wù)提供者 RuleServiceProvider ruleServiceProvider = ()。 RuleServiceProvider提供對 RuleRuntime和 RuleAdministration 的 API訪問。RuleAdministration 提供對 RuleExecutionSet 進(jìn)行管理的 API,使用該 API 可以注冊一個(gè) RuleExecutionSet,然后可以用 RuleRuntime 來返回RuleExecutionSet。 在 RuleExecutionSet 可以被注冊前,你需要先建立它; RuleAdministrator 提供工廠方法返回一個(gè)空的 LocalRuleExecutionSetProvider 或RuleExecutionSetProvider。 LocalRuleExecutionSetProvider 用來從不可以序列化的本地源中裝載 RuleExecutionSet,如數(shù)據(jù)流中。RuleExecutionSetProvider 從可序列化的源中裝載 RuleExecutionSet,如 DOM元素或包。 ( null )。和 ( null )。都使用 null作為參數(shù),因?yàn)檫@些方法的屬性映射當(dāng)前不使用。 例 . 使用 RuleAdministration API 注冊 LocalRuleExecutionSet // 獲得 RuleAdministration RuleAdministration ruleAdministrator = ()。 LocalRuleExecutionSetProvider ruleExecutionSetProvider = ( null )。 // 建立 DRL讀取器 URL drlUrl = new URL( Reader drlReader = new InputStreamReader( () )。 // 為 DRL 建立 RuleExecutionSet RuleExecutionSet ruleExecutionSet = ( drlReader, null )。 在上例中 ( reader, null )為屬性映射提供了一個(gè)空參數(shù);無 論怎樣,它實(shí)際上可以用來為引入的源提供配置。當(dāng) Null 傳入時(shí),默認(rèn)裝載的輸入是 DRL。允許為映射提供的關(guān)鍵字是 source 和 dsl。 Source 使用 drl 或 xml作為它的值,設(shè)置 source 為 drl用來裝載 drl 文件,設(shè)置為 xml 用來裝載 xml 格式規(guī)則文件; xml 將會忽略任何dsl 鍵 /值設(shè)置。 Dsl 可以獲得一個(gè)讀取流或一個(gè)字符串(包含 dsl 內(nèi)容)作為值。 例 . 當(dāng)注冊 LocalRuleExecutionSet 時(shí)指定 DSL // 獲得 RuleAdministration RuleAdministration ruleAdministrator = ()。 LocalRuleExecutionSetProvider ruleExecutionSetProvider = ( null )。 // 獲得 DRL讀取流 URL drlUrl = new URL( Reader drlReader = new InputStreamReader( () )。 // 為 dsl 建立讀取流,并放入屬性映射中 URL dslUrl = new URL( Reader dslReader = new InputStreamReader( () )。 Map properties = new HashMap()。 ( source, drl )。 ( dsl, dslReader )。 // 為 drl 和 dsl建立 RuleExecutionSet RuleExecutionSet ruleExecutionSet = ( reader, properties )。 當(dāng)注冊 RuleExecutionSet 時(shí)必須指定名稱,用于取回它。這也是一個(gè) 輸入屬性的字段,當(dāng)前沒有使用它,因此輸入空即可。 When registering a RuleExecutionSet you must specify the name, to be used for its retrieval. There is also a field to pass properties, this is currently unused so just pass null. 例 . Register the RuleExecutionSet // 使用 RuleAdministrator 注冊 RuleExecutionSet String uri = ()。 (uri, ruleExecutionSet, null)。 . 使用有狀態(tài)和無狀態(tài) RuleSession 在運(yùn)行時(shí), RuleServiceProvider 用來建立有狀態(tài)或無狀態(tài)的規(guī)則引擎 Session。 例 . 獲得 RuleRuntime RuleRuntime ruleRuntime = ()。 為了建立規(guī)則 Session,你必須使用 RuleRuntime 的兩個(gè)公共常數(shù)之一, 和,連同 uri 一起傳入你希望初始化一個(gè)RuleSession 的 RuleExecutionSet 中。屬性映射可以是 null,或者可以用來指定全局變量,這個(gè)在下一節(jié)說明。 createRuleSession(....)方法返回一個(gè)RuleSession 實(shí)例,它必須轉(zhuǎn)義為 StatefulRuleSession 或StatelessRuleSession。 例 . 有狀態(tài)規(guī)則 (StatefulRuleSession) session = ( uri, null, )。 ( new PurchaseOrder( lots of cheese ) )。 ()。 StatelessRuleSession 有一個(gè)非常簡單的 API,你只能調(diào)用 executeRules(List list)傳入對象列表,以及一個(gè)可選的過濾器,然后結(jié)果列表被返回。 例 . 無狀態(tài)規(guī)則 (StatelessRuleSession) session = ( uri, null, )。 List list = new ArrayList()。 ( new PurchaseOrder( even more cheese ) )。 List results = new ArrayList()。 results = ( list )。 . 全局變量 通過使用屬性映射傳入 RuleSession 的工廠方法, JSR94 可以通過使用一種非輕便的方式支持全局變量。全局變量必須定義在 DRL 或 XML 文件的開始,否則會拋出異常。屬性映射的鍵為在 drl 或 xml 聲明的變量名,值是你希望在執(zhí)行中使用的值。在下例中結(jié)果被放在一個(gè)作為全局變量的 的集合中。 globalList = new ( )。 map = new ( )。 ( list, globalList )。 //打開無狀態(tài) Session StatelessRuleSession srs = (StatelessRuleSession) ( SistersRules, map, )。 ... // Person 對象加入 List // 調(diào)用 executeRules( ),將對象列表作為參數(shù) // 規(guī)則將對象放入 List // 從映射中取得 list List list = () (list)。 不要忘記在你的 DRL 中聲明 list 全局變量 : package SistersRules。 import 。 global list rule FindSisters when $person1 : Person ( $name1:name ) $person2 : Person ( $name2:name ) eval( $($person2) ) then ($() + and + $() + are sisters)。 assert( $() + and + $() + are sisters)。 end . 參考書目 如果你需要了解 JSR 94 的更多信息,請 參考以下文章索引 1. Official JCP Specification for Java Rule Engine API (JSR 94) ? 2. The Java Rule Engine API documentation ? 3. The Logic From The Bottom Line: An Introduction to The Drools Project. By N. Alex Rupp, published on in 2020 ? s 4. Getting Started With the Java Rule Engine API (JSR 94): Toward RuleBased Applications. By Dr. Qusay H. Mahmoud, published on Sun Developer Network in 2020 ? 5. Jess and the API. By Ernest FriedmanHill, published on in 2020 ? 第 7 章 . 性能調(diào)整 . 性能考慮 在任何復(fù)雜的應(yīng)用中,許多事情可能會對性能造成影響。通常的建議是不要隨意估測,準(zhǔn)確度量,剖析和計(jì)劃。在規(guī)則引擎方面,不用考慮,它當(dāng)然會盡可能的達(dá)到最好的執(zhí)行效率。大多數(shù)人不需要關(guān)注這章的細(xì)節(jié)。 注意,當(dāng)程序員第一次使用規(guī)則引擎時(shí),最應(yīng)當(dāng)注意的“花費(fèi)”應(yīng)當(dāng)是規(guī)則引擎的啟動(dòng)(它將編譯規(guī)則)。這個(gè)問題很容易解決,將 RuleBase(或已編譯好的RulePackage)實(shí)例緩存起來,并且僅僅只更新需要的規(guī)則(在應(yīng)用中有許多方法可以實(shí)現(xiàn)它,這里不再討論)。 這章主要是考慮規(guī)則在運(yùn) 行時(shí)的執(zhí)行效率的調(diào)整,而不是編譯時(shí),這是性能通常被真正監(jiān)測的地方。 . Beta Node Memory Indexing(節(jié)點(diǎn)內(nèi)存索引) 在 Rete 算法章節(jié)提到, BetaNode 是有兩個(gè)輸入的節(jié)點(diǎn):左輸入(組元)和右輸入(單個(gè)對象)。每一個(gè) BetaNode 有兩個(gè)內(nèi)存,每一個(gè)輸入有一個(gè):左輸入內(nèi)存和右輸入內(nèi)存。 因此,當(dāng)單個(gè)對象進(jìn)入節(jié)點(diǎn)的右輸入時(shí)
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1