BRMS 用​户​指​南​


JBoss 企​业​级​ BRMS 平​台​ 5

适​用​于​ JBoss Rules 开​发​人​员​、​规​则​作​者​和​商​业​分​析​员​。​

版 5.2.0

红​帽​工​程​内​容​服​务​

摘要

使​用​ JBoss 企​业​级​ BRMS 平​台​产​品​的​指​南​。​

第 1 章 简​介​

1.1. 本​版​本​的​新​特​征​

Expand
表 1.1. 本​版​本​的​新​特​征​
功​能​ 修​改​
第 4.3.9 节 “ Guided 决​策​表​(基​于​ Web)” 关​于​添​加​ Guide Decision Table 的​其​他​细​节​。​
第 4.3.10 节 “规​则​模​板​” 关​于​添​加​规​则​模​板​的​内​容​。​
第 5 章 事​实​模​型​(对​象​模​型​) 添​加​了​关​于​ Fact Model 的​其​他​信​息​。​
第 6 章 工​作​集​(Working Set) 添​加​了​关​于​ Working Set 的​新​章​节​。​
第 8.3.1 节 “WebDav 和​特​殊​字​符​” 添​加​了​关​于​在​ WebDAV 里​使​用​多​字​节​字​符​的​说​明​。​

1.2. 什​么​是​ BRMS?

JBoss 企​业​版​ BRMS 是​一​个​商​业​规​则​管​理​系​统​(Business Rules Management System)。​
JBoss 企​业​版​ BRMS 提​供​了​在​多​用​户​环​境​里​管​理​软​件​商​业​规​则​的​工​具​。​它​是​商​业​规​则​的​ SPOT(Single point of truth),它​使​用​对​用​户​友​好​的​界​面​,允​许​修​改​以​可​控​的​方​式​发​生​。​
JBoss 企​业​版​ BRMS 平​台​是​一​个​基​于​ JBoss Rules 的​、​用​于​管​理​、​存​储​、​编​辑​和​部​署​规​则​和​其​他​ JBoss Rules 资​产​的​服​务​器​端​解​决​方​案​。​它​也​提​供​了​和​ JBoss Developer Studio 以​及​其​他​基​于​ Eclipse 集​成​开​发​环​境​集​成​的​基​于​ web 的​用​户​界​面​。​

重要

在​一​些​地​方​,JBoss 企​业​版​ BRMS 平​台​及​其​文​档​指​的​是​ Guvnor。​JBoss Guvnor 是​构​建​ JBoss 企​业​版​ BRMS 平​台​的​开​源​项​目​。​对​ Guvnor 的​引​用​保​留​在​ API、​URL 和​ JBoss Developer Studio 工​具​里​(请​参​考​『​第 10 章 JBoss Developer Studio 集​成​』​)。​
商​业​规​则​管​理​系​统​可​在​下​列​情​况​下​使​用​:
  1. 需​要​管​理​用​于​部​署​和​修​改​规​则​的​系​统​。​
  2. 具​有​不​同​技​能​级​别​的​多​个​用​户​需​要​访​问​和​编​辑​规​则​。​
  3. 现​有​的​用​于​管​理​规​则​的​基​础​结​构​。​
  4. 需​要​管​理​许​多​“​商​业​”​规​则​,它​们​不​是​作​为​应​用​程​序​的​一​部​分​的​技​术​规​则​。​

1.4. 谁​会​使​用​ BRMS?

使​用​商​业​规​则​管​理​系​统​主​要​是​担​任​这​些​职​务​的​人​:
  • 商​业​分​析​员​
  • 规​则​专​家​
  • 开​发​人​员​
  • 规​则​管​理​员​
JBoss 企​业​级​ BRMS 平​台​允​许​为​不​同​的​用​户​分​配​不​同​的​角​色​以​控​制​开​发​哪​些​资​产​和​功​能​。​

1.5. 功​能​概​述​

  • BRMS web 用​户​界​面​支​持​多​语​言​,目​前​包​括​美​式​英​语​、​日​语​和​简​体​中​文​。​
  • 不​同​类​型​的​规​则​编​辑​器​(图​形​化​和​文​本​编​辑​器​都​有​)。​
  • 本​版​控​制​(用​于​历​史​资​产​)
  • 归​类​
  • 构​建​和​部​署​
  • 将​多​个​规​则​“​资​产​”​作​为​单​个​软​件​包​存​储​。​

第 2 章 架​构​

本​章​涵​盖​ JBoss 企​业​级​ BRMS 平​台​设​计​的​技​术​方​面​的​内​容​。​我​们​不​要​求​ BRMS 应​用​程​序​的​最​终​用​户​阅​读​这​些​内​容​。​它​面​向​的​是​集​成​ JBoss 企​业​级​ BRMS 平​台​和​其​他​系​统​的​开​发​人​员​。​
图 2.1 “架​构​图​表​” 展​示​了​系​统​的​主​要​组​件​以​及​如​何​集​成​和​部​署​。​

图 2.1. 架​构​图​表​

BRMS 是​以​ WAR 形​式​部​署​的​,它​提​供​ web 用​户​界​面​并​通​过​ URL 提​供​二​进​制​软​件​包​。​对​于​数​据​存​储​它​采​用​ JSR-170。​JBoss Seam 用​于​组​件​框​架​,而​ GWT 作​为​工​具​微​件​以​用​于​构​建​基​于​ ajax 的​ web 用​户​界​面​。​

2.1. 可​重​用​的​组​件​

BRMS 使​用​一​个​服​务​接​口​来​分​离​ GUI 和​后​台​功​能​。​这​里​的​后​台​包​括​资​产​库​以​及​专​用​于​规​则​处​理​的​编​译​器​。​
主​要​的​接​口​是​ RepositoryService,它​在​ ServiceImplementation 里​实​现​。​GWT ajax 前​端​使​用​ GWT 的​异​步​回​调​机​制​和​这​个​接​口​交​互​。​Seam 的​配​置​文​件​是​ components.xml。​
这​个​服​务​接​口​可​以​被​其​他​组​件​或​前​端​重​用​。​
GWT 用​户​界​面​可​以​常​用​,就​像​ GWT 是​唯​一​的​ HTML 页​面​:Guvnor.html。​对​于​熟​悉​ GWT 的​开​发​人​员​,每​个​功​能​都​可​以​独​立​使​用​。​JBRMSFeature 类​和​实​现​它​的​类​(理​论​上​也​可​以​是​独​立​的​)包​含​了​其​他​的​信​息​。​

2.2. 版​本​和​存​储​

资​产​的​版​本​和​数​据​一​起​存​储​在​数​据​库​里​。​
当​创​建​了​快​照​后​,整​个​软​件​包​的​备​份​将​存​入​ JCR 数​据​库​中​独​立​的​位​置​。​
对​于​属​性​ JCR 和​ jackrabbit 的​开​发​人​员​,.cnd 文​件​在​节​点​类​型​定​义​的​源​码​里​。​软​件​包​是​一​个​文​件​夹​,每​个​资​产​都​是​一​个​文​件​:资​产​可​以​是​文​本​的​也​可​以​拥​有​二​进​制​附​件​。​

第 3 章 快​速​起​步​指​南​

本​节​将​提​供​ JBoss 企​业​级​ BRMS 平​台​的​快​速​教​程​。​我​们​将​假​设​ BRMS 平​台​和​库​已​经​正​确​地​安​装​并​进​行​了​配​置​。​

图 3.1. JBoss 企​业​级​ BRMS 平​台​的​ Web 用​户​界​面​

图 3.1 “JBoss 企​业​级​ BRMS 平​台​的​ Web 用​户​界​面​” 显​示​了​ JBoss 企​业​级​ BRMS 平​台​的​主​要​界​面​。​
左​侧​的​导​航​面​板​提​供​对​ BRMS Web UI 的​主​要​区​域​的​访​问​。​这​些​区​域​包​括​:
  • Info:这​是​初​始​页​面​,里​面​有​到​资​源​的​链​接​。​
  • Rules:这​是​类​别​和​商​业​用​户​视​图​。​
  • Package:这​是​配​置​和​管​理​知​识​软​件​包​的​地​方​。​
  • Deployment:这​是​管​理​部​署​快​照​的​地​方​。​
  • Admin:管​理​性​功​能​(归​类​、​状​态​、​导​入​和​导​出​)。​

3.1.  系​统​支​持​的​浏​览​器​

表 3.1 “系​统​支​持​的​浏​览​器​” 列​出​了​系​统​支​持​的​访​问​ BRMS Web 用​户​界​面​的​浏​览​器​。​
Expand
表 3.1. 系​统​支​持​的​浏​览​器​
操​作​系​统​ 浏​览​器​
RHEL 5.x 及​更​高​版​本​ FireFox 3.0+
Microsoft Windows FireFox 3.0+
Microsoft Windows Internet Explorer 7+
Mac OSX 10.x FireFox 3.0+
Mac OSX 10.x Safari 4 和​ 5

3.2. BRMS 还​是​ Guvnor?

在​以​前​的​ Drools 版​本​里​,“​BRMS”​经​常​指​的​是​ drools 管​理​功​能​的​ web 界​面​。​现​在​,我​们​使​用​ BRMS 来​表​示​“​整​个​软​件​包​”​- runtime、​web 工​具​等​等​。​但​在​某​些​情​况​下​,你​还​是​可​以​将​“​BRMS”​理​解​为​ Guvnor web 控​制​台​和​相​关​联​的​工​具​。​

3.3. 初​始​的​配​置​

有​些​步​骤​是​在​进​行​初​始​配​置​时​要​求​的​。​服​务​器​第​一​次​启​动​时​,它​将​创​建​一​个​空​的​库​,然​后​按​照​下​列​步​骤​进​行​:
  • 如​果​是​一​个​全​新​的​库​,你​需​要​进​入​“​Admin”​,然​后​选​择​“​Manage Categories”​。​
    添​加​一​些​类​别​(注​意​这​些​类​别​只​适​用​于​分​类​目​的​)。​
  • 规​则​需​要​使​用​一​个​事​实​模​型​(也​称​为​对​象​模​型​)。​从​ "Package Management" 功​能​里​,你​可​以​创​建​一​个​新​的​知​识​软​件​包​(knowledge package)。​软​件​包​称​应​该​有​一​个​有​意​义​的​名​称​,而​且​不​包​括​空​格​。​
  • 要​上​载​模​型​,你​可​以​使​用​一​个​包​含​代​码​和​规​则​里​将​使​用​的​事​实​模​型​(API)的​ .jar 文​件​。​在​ "Model Editor" 屏​幕​里​,你​可​以​上​传​一​个​ .jar 文​件​。​为​此​,请​从​你​在​前​一​步​骤​里​创​建​的​列​表​里​选​择​软​件​包​。​
  • 为​了​导​入​你​上​传​的​事​实​类​型​(add import 语​句​),现​在​需​要​对​刚​创​建​的​软​件​包​配​置​进​行​编​辑​。​请​保​存​修​改​。​
  • 此​时​,软​件​包​就​完​成​了​配​置​且​可​以​使​用​了​。​
    请​注​意​,你​也​可​以​导​入​一​个​现​有​的​ DRL(Drools Rule Language)软​件​包​,其​规​则​将​和​单​个​资​产​一​样​存​储​在​库​里​。​

3.4. 编​写​规​则​

  • 在​配​置​了​至​少​一​个​类​别​和​软​件​包​之​后​,你​就​可​以​开​始​编​写​规​则​了​。​
  • 虽​然​有​多​个​规​则​格​式​,但​ BRMS 都​将​其​视​为​“​资​产​”​。​
  • 通​过​
  • 你​也​得​选​择​一​个​类​别​。​分​类​提​供​了​独​立​于​知​识​软​件​包​查​看​规​则​的​途​径​(确​实​,你​甚​至​可​以​使​规​则​出​现​在​多​个​知​识​软​件​包​里​)。​你​会​发​现​把​它​当​作​某​种​标​签​将​有​助​于​理​解​。​
  • 选​择​ "Business Rule (Guided Editor)" 格​式​。​
  • 这​将​打​开​一​个​规​则​模​型​(Guided Editor)。​你​可​以​添​加​和​编​辑​当​前​软​件​包​里​使​用​的​模​型​的​条​件​和​行​为​。​而​且​,为​这​个​软​件​包​配​置​的​任​何​ DSL Sentence 模​板​都​是​可​用​的​。​
  • 当​你​完​成​了​规​则​的​编​辑​后​,你​可​以​检​入​所​做​的​修​改​(换​句​话​说​就​是​保​存​修​改​),或​者​你​可​以​选​择​验​证​或​“​查​看​源​”​(对​于​有​效​的​源​而​言​)。​
  • 你​也​可​以​从​规​则​编​辑​器​里​添​加​或​删​除​类​别​并​修​改​其​属​性​,如​文​档​等​。​(如​果​你​不​确​定​怎​么​去​做​,请​用​自​然​语​言​描​述​规​则​并​检​入​到​系​统​里​。​以​后​这​可​当​作​模​板​。​)

3.5. 搜​索​

为​了​浏​览​系​统​,你​可​以​使​用​规​则​功​能​(显​示​分​类​信​息​),或​者​你​可​以​使​用​软​件​包​功​能​并​根​据​软​件​包​(或​规​则​类​型​)来​查​看​。​如​果​你​知​道​资​产​的​名​称​或​是​名​称​的​一​部​分​,你​也​可​以​使​用​“​Quick Find(快​速​查​找​)”​。​输​入​规​则​名​称​后​,BRMS 将​返​回​一​个​匹​配​的​列​表​。​

3.6. 部​署​

  • 在​软​件​包​里​编​辑​了​规​则​后​,你​可​以​点​击​“​Package”​功​能​,打​开​软​件​包​并​进​行​构​建​。​
  • 如​果​构​建​过​程​成​功​完​成​,你​应​该​可​以​下​载​二​进​制​软​件​包​文​件​并​将​其​部​署​到​运​行​系​统​里​。​
  • 你​也​可​以​制​作​软​件​包​的​“​快​照​”​以​用​于​部​署​。​这​会​固​定​某​个​时​刻​的​软​件​包​的​内​容​,任​何​的​并​发​修​改​都​不​会​影​响​到​它​。​这​会​使​得​软​件​包​可​通​过​下​列​格​式​的​ URL 来​访​问​:http://<your server>/jboss-brms/org.drools.guvnor.Guvnor/packages/<packageName>/<snapshotName>。​

第 4 章 BRMS 概​念​

4.1. 规​则​是​资​产​

资​产​(Asset)是​可​以​以​某​个​版​本​存​储​在​库​里​的​任​何​东​西​。​它​包​括​规​则​、​决​策​表​、​模​型​、​测​试​和​ DSL。​

注意

术​语​“​规​则​(rule)”​用​得​很​广​泛​。​它​有​时​候​指​的​是​实​际​上​并​非​资​产​的​规​则​。​

4.2. 分​类​

图 4.1. 类​别​

类​别​允​许​规​则​(资​产​)用​你​定​义​的​任​何​数​量​的​组​别​进​行​标​记​。​这​意​味​着​你​可​以​查​看​匹​配​某​个​类​别​的​一​个​规​则​列​表​。​规​则​可​以​属​于​任​何​数​目​的​类​别​。​在​上​面​的​图​表​里​,你​可​以​看​到​的​是​类​似​于​文​件​夹​/浏​览​器​的​资​产​视​图​。​其​名​字​是​由​ BRMS 管​理​员​定​义​的​(你​也​可​以​删​除​/添​加​新​类​别​;但​你​只​能​在​它​们​没​有​在​使​用​时​删​除​它​们​),可​以​是​你​希​望​的​任​意​名​称​。​
通​常​,类​别​是​用​匹​配​规​则​应​用​的​商​业​领​域​的​有​意​义​的​名​称​来​创​建​的​。​(因​此​,如​果​规​则​应​用​在​多​个​领​域​,你​可​以​附​加​多​个​类​别​。​)类​别​也​可​以​用​来​标​记​规​则​为​生​命​周​期​的​某​个​阶​段​,例​如​标​记​为​ "Draft“​ 或​ "For Review“​。​

图 4.2. 可​以​有​多​个​类​别​的​资​产​

上​面​的​视​图​显​示​了​你​打​开​资​产​时​看​到​的​ Category Editor/Viewer。​在​这​个​例​子​里​,你​可​以​看​到​资​产​属​于​两​个​类​别​。​这​意​味​着​当​其​中​任​何​一​个​类​别​用​于​显​示​资​产​列​表​时​,你​都​将​看​到​该​资​产​。​(“​+”​ 按​钮​和​ Garbage Can 图​标​可​分​别​用​来​添​加​和​删​除​其​他​项​目​。​)
在​上​面​的​例​子​里​,第​一​个​类​别​('Home")位​于​ "top level"。​而​第​二​个​类​别​ “​Mortage/Eligibility" 仍​是​一​个​单​一​的​类​别​,但​它​是​嵌​套​的​,这​是​因​为​类​别​是​具​有​层​次​结​构​的​。​要​以​另​外​一​种​方​式​表​述​它​,就​是​名​为​ “​Mortage" 的​类​别​包​含​一​个​类​别​ “​Eligibility“​。​屏​幕​将​它​显​示​为​ ”​Mortage/Eligibility”​。​如​你​所​看​到​的​,
当​你​打​开​一​个​资​产​以​进​行​查​看​或​编​辑​时​,你​会​看​到​它​所​属​的​类​别​列​表​。​如​果​你​进​行​了​修​改​(删​除​或​添​加​类​别​),你​将​需​要​保​存​资​产​,且​这​个​行​为​将​在​版​本​历​史​里​创​建​一​个​新​的​条​目​。​修​改​规​则​的​类​别​不​会​影​响​其​执​行​。​

图 4.3. 创​建​类​别​

上​面​的​视​图​显​示​了​设​立​类​别​的​管​理​屏​幕​。​系​统​里​缺​省​是​没​有​类​别​的​。​因​为​类​别​是​具​有​层​次​结​构​的​,创​建​子​类​别​时​你​必​须​选​择​“​父​”​类​别​。​在​这​里​,你​也​可​以​删​除​类​别​(但​只​能​在​它​们​没​有​被​任​何​资​产​使​用​的​情​况​下​)。​

注意

作​为​一​个​普​通​的​规​则​,资​产​应​该​属​于​一​个​或​两​个​类​别​。​当​你​有​大​量​的​规​则​时​,类​别​是​很​重​要​的​。​其​层​次​结​构​不​需​要​太​深​。​红​帽​设​计​它​们​是​为​了​帮​助​你​将​规​则​/资​产​分​解​为​可​管​理​的​小​片​内​容​。​

4.3. 规​则​授​权​

BRMS 平​台​支​持​几​个​资​产​(规​则​)格​式​。​我​们​描​述​的​是​关​键​的​格​式​。​本​手​册​里​的​其​他​部​分​将​涵​盖​另​外​一​些​格​式​,其​细​节​则​不​会​在​此​重​复​。​

4.3.1. 资​产​编​辑​器​(Asset Editor)

资​产​编​辑​器​里​的​可​用​选​项​取​决​于​编​辑​的​资​产​类​型​。​资​产​编​辑​器​用​于​编​辑​规​则​,它​也​可​以​用​于​添​加​、​删​除​、​出​席​排​序​条​件​、​约​束​、​行​为​、​字​段​和​选​项​。​资​产​编​辑​器​也​允​许​用​户​使​用​工​作​集​、​检​验​和​验​证​规​则​以​及​查​看​规​则​源​。​
相​关​的​细​节​请​查​看​资​产​编​辑​器​里​的​工​具​提​示​。​

图 4.4. 资​产​编​辑​器​视​图​

当​编​辑​规​则​时​,资​产​编​辑​器​也​称​为​ ”​Guided Editor“​。​Guided Editor 用​于​编​辑​商​业​规​则​语​言​(BRL)格​式​的​规​则​。​Guided Editor 提​示​用​户​根​据​正​在​编​辑​的​规​则​的​对​象​模​型​进​行​输​入​。​
在​你​可​以​使​用​ BRL Guided Editor 之​前​,你​必​须​先​配​置​软​件​包​访​问​。​

注意

Eclipse 插​件​里​也​包​含​一​个​ Guided Editor。​本​节​里​大​部​分​细​节​也​适​用​于​它​。​

例 4.1. Guided Editor

4.3.3. 规​则​的​分​解​

规​则​由​多​个​部​分​组​成​:
  • When
    规​则​的​ When 部​分​是​一​个​必​须​满​足​的​条​件​。​例​如​,在​ 例 4.1 “Guided Editor” 里​,when 部​分​是​:当​申​请​者​低​于​ 21 岁​。​
  • Then
    规​则​的​ Then 部​分​是​规​则​的​条​件​部​分​已​经​满​足​后​必​须​执​行​的​行​为​。​例​如​,在​ 例 4.1 “Guided Editor” 里​,when 部​分​是​:当​申​请​者​低​于​ 21 岁​。​
使​用​ Guided Editor 也​可​以​在​ When(或​条​件​)部​分​添​加​更​多​的​条​件​并​在​ Then(或​行​为​)部​分​添​加​更​多​的​行​为​。​例​如​,如​果​一​个​ 21 岁​以​下​的​申​请​者​有​贷​款​申​请​的​担​保​人​,银​行​可​能​决​定​批​准​它​的​贷​款​申​请​。​为​了​将​这​种​情​形​在​ 例 4.1 “Guided Editor” 里​模​型​化​,修​改​何​时​包​括​担​保​人​条​件​是​有​必​要​的​。​

例 4.2. 修​改​规​则​

要​在​条​件​里​添​加​担​保​人​,你​首​先​需​要​在​ Mortgage 模​型​的​ Fact Type 里​添​加​ guarantor 字​段​。​

过程 4.1. 在​ Fact Type 里​添​加​字​段​

  1. 选​择​模​型​

    从​屏​幕​的​左​侧​导​航​面​板​里​选​择​ Knowledge Bases。​扩​展​包​含​模​型​的​软​件​包​并​选​择​ model。​
    点​击​ open 从​列​表​里​打​开​模​型​。​
  2. 添​加​字​段​

    点​击​后​面​的​加​号​以​扩​展​ Fact Type,然​后​选​择​添​加​字​段​(Add Field)。​
  3. 输​入​字​段​细​节​

    添​加​细​节​到​弹​出​对​话​框​里​。​在​ Field name 字​段​里​输​入​名​称​ guarantor,然​后​从​ Type 下​拉​菜​单​里​选​择​ True or False。​
    选​择​ File 和​ Save changes 将​修​改​保​存​到​模​型​里​。​
因​为​在​ applicant fact 类​型​里​添​加​了​ guarantor 字​段​,我​们​有​可​能​修​改​规​则​以​包​括​一​个​ guarantor。​

过程 4.2. 在​规​则​里​添​加​限​制​

  1. 删​除​当​前​的​限​制​

    当​编​辑​现​有​的​规​则​时​,你​有​必​要​删​除​当​前​的​限​制​。​这​可​以​确​保​处​理​多​个​限​制​时​选​择​正​确​的​逻​辑​操​作​符​(And 或​ Or)。​
    在​这​个​例​子​里​,点​击​ Age 条​件​后​面​的​减​号​。​
  2. 修​改​约​束​

    点​击​文​本​ There is an Applicant 打​开​ Modify Constraints Dialogue。​
    从​ Add a restriction on a field 下​列​菜​单​里​选​择​限​制​。​在​这​个​例​子​是​选​择​ Age。​
    从​ Multiple field constraints 下​列​菜​单​里​选​择​ All of (and)。​
  3. 指​定​第​一​个​约​束​

    点​击​文​本​ all of the following 以​打​开​ Add fields to this constraint 对​话​框​并​添​加​限​制​。​在​这​个​例​子​里​是​选​择​ Age。​
    从​新​的​下​拉​菜​单​里​选​择​ less than,然​后​点​击​铅​笔​图​标​以​编​辑​它​的​值​,选​择​ literal,然​后​点​击​ Value 输​入​合​适​的​值​,这​个​例​子​里​是​输​入​ 21。​
  4. 指​定​第​二​个​约​束​

    点​击​文​本​ all of the following 以​打​开​ Add fields to this constraint 对​话​框​并​添​加​限​制​。​在​这​个​例​子​里​是​选​择​ Guarantor。​
    从​新​的​下​拉​菜​单​里​选​择​ equal to,然​后​点​击​铅​笔​图​标​以​编​辑​它​的​值​,选​择​ literal,然​后​点​击​ true 输​入​合​适​的​值​,并​选​择​ False。​

4.3.4. Saliance

你​可​以​通​过​ Guided Editor 里​的​ Options 中​编​辑​ Saliance。​Salience 是​一​个​代​表​优​先​级​的​数​值​。​
请​注​意​,你​可​以​将​字​段​值​限​制​为​预​先​配​置​的​列​表​条​目​。​这​个​列​表​配​置​为​软​件​包​(用​于​填​充​值​的​数​据​枚​举​)的​一​部​分​。​这​些​值​可​以​是​固​定​列​表​,如​从​数​据​库​里​加​载​的​值​。​对​于​具​有​给​定​值​的​代​码​和​其​他​字​段​,这​尤​其​有​用​。​它​也​可​以​以​下​拉​列​表​的​方​式​显​示​在​屏​幕​上​,和​规​则​里​使​用​的​值​(或​代​码​)不​一​样​。​关​于​如​何​进​行​配​置​,请​参​考​ "Data Enumerations" 章​节​里​的​内​容​。​

4.3.6. 增​加​ DSL 语​句​

如​果​规​则​所​属​的​软​件​包​具​有​ DSL 配​置​,在​你​添​加​条​件​或​行​为​时​,它​将​提​供​一​个​ “​DSL 语​句​”​ 列​表​,你​可​以​从​中​选​择​(选​择​一​个​条​目​会​添​加​一​行​规​则​),凭​借​来​自​用​户​的​ DSL 指​定​值​,编​辑​框​(文​本​)将​会​显​示​(它​组​成​一​个​表​单​)。​请​注​意​这​是​可​选​的​,你​可​以​选​择​其​他​ DSL 编​辑​器​。​

重要

Guided Editor 目​前​不​支​持​完​整​的​ DSL 功​能​,它​只​支​持​ DSL 配​置​的​ [when] 和​ [then] 部​分​。​
下​面​的​图​表​显​示​了​ Guided Editor 里​的​ DSL 语​句​:

图 4.5. Guided Editor 里​的​ DSL

4.3.7. DSL 规​则​

DSL 规​则​是​文​本​值​,它​使​用​一​个​语​言​配​置​资​产​来​控​制​其​外​观​。​

图 4.6. DSL 规​则​

DSL 是​一​个​单​一​的​规​则​。​在​上​面​的​图​片​里​,你​可​以​看​到​文​本​编​辑​器​。​你​可​以​使​用​右​侧​的​图​表​来​提​供​条​件​和​行​为​列​表​以​供​选​择​(或​者​同​时​按​住​ Control 和​空​格​键​来​弹​出​列​表​)。​

4.3.8. 电​子​表​格​决​策​表​

多​个​规​则​可​以​存​储​在​ Microsoft Excel 的​电​子​表​格​里​(.xls 文​件​格​式​),每​一​行​都​代​表​一​个​规​则​。​本​章​不​会​涉​及​电​子​表​格​的​细​节​。​

图 4.7. 电​子​表​格​决​策​表​

要​使​用​电​子​表​格​,如​ 图 4.7 “电​子​表​格​决​策​表​” 所​展​示​的​,上​传​一​个​ .xls 文​件​。​你​也​可​以​下​载​从​相​同​的​对​话​框​下​载​当​前​版​本​的​电​子​表​格​。​为​了​创​建​一​个​新​的​决​策​表​,你​必​须​启​动​“​规​则​向​导​“​,它​包​含​一​个​这​个​过​程​的​选​项​,然​后​你​可​以​上​传​ .xls 文​件​。​

4.3.9.  Guided 决​策​表​(基​于​ Web)

Guided 决​策​表​功​能​允​许​决​策​表​在​ web 上​编​辑​。​它​通​过​内​省​哪​些​ fact 和​字​段​可​用​来​引​导​决​策​表​的​创​建​,这​和​ Guided Editor 类​似​。​规​则​属​性​、​元​数​据​、​条​件​和​行​为​都​可​以​以​治​表​格​式​定​义​,从​而​有​助​于​大​量​相​关​规​则​的​快​速​输​入​。​象​其​他​规​则​资​产​一​样​,基​于​ Web 的​决​策​表​会​被​编​译​成​ DRL。​
你​可​以​多​种​方​式​选​择​单​元​格​:
  • 你​可​以​双​击​单​个​的​单​元​格​以​弹​出​对​应​底​层​数​据​类​型​的​编​辑​器​。​相​同​列​的​单​元​格​组​可​以​通​过​点​击​第​一​个​单​元​格​并​拖​动​光​标​或​在​点​击​第​一​个​单​元​后​再​点​击​要​选​取​范​围​里​的​最​后​一​个​(同​时​按​住​ Shift 键​)来​进​行​选​择​。​
  • 或​者​,你​也​可​以​使​用​箭​头​键​在​表​格​里​移​动​。​按​住​ Enter 键​将​弹​出​对​应​的​编​辑​器​。​按​住​ Shift 同​时​用​箭​头​键​扩​展​选​择​范​围​可​以​选​择​一​个​区​域​。​
如​要​修​改​列​的​大​小​,用​鼠​标​在​表​头​的​分​界​处​悬​停​,然​后​拖​动​鼠​标​光​标​将​使​列​变​窄​或​变​宽​。​

图 4.8. 决​策​表​

4.3.9.1. 主​要​的​组​件​
Guided 决​策​表​分​成​两​个​主​要​的​部​分​:
  • 上​面​的​部​分​允​许​定​义​表​的​列​来​代​表​规​则​属​性​、​元​数​、​条​件​和​行​为​。​
  • 下​面​的​部​分​包​含​实​际​的​表​,而​每​一​行​都​定​义​单​独​的​规​则​。​

图 4.9. 主​要​的​组​件​

4.3.9.2. 列​配​置​
列​可​以​有​下​列​的​约​束​类​型​:
  • Literal
    单​元​格​里​的​值​将​用​操​作​符​和​字​段​进​行​比​较​。​
  • Formula
    单​元​格​里​的​表​达​式​将​被​评​估​,然​后​和​字​段​进​行​比​较​。​
  • Predicate
    不​需​要​字​段​,表​达​式​将​被​评​估​为​ true 或​ false。​
你​可​以​设​置​缺​省​值​,但​通​常​在​单​元​格​里​没​有​值​的​话​,约​束​不​会​被​应​用​。​

图 4.10. 列​配​置​

4.3.9.2.1. 工​具​列​
在​缺​省​情​况​下​,包​含​规​则​号​码​和​描​述​的​两​列​都​会​被​提​供​。​
4.3.9.2.2. 属​性​列​
你​可​以​添​加​代​表​任​何​ DRL 规​则​属​性​到​零​或​多​个​属​性​列​。​在​ Guided 决​策​表​编​辑​器​来​还​有​一​个​额​外​的​伪​属​性​来​ "否​定​(negate)" 规​则​。​使​用​这​个​属​性​可​以​否​定​整​个​规​则​。​例​如​,下​面​的​简​单​规​则​可​以​被​否​定​。​
when
  $c : Cheese( name == "Cheddar" )
then
  ...
end
Copy to Clipboard Toggle word wrap
when
  not Cheese( name == "Cheddar" )
then
  ...
end
Copy to Clipboard Toggle word wrap
4.3.9.2.3. 元​数​据​列​(Meta-data column)
你​可​以​定​义​零​个​或​多​个​元​数​据​,每​个​都​代​表​ DRL 规​则​上​正​常​的​元​数​据​注​解​。​
4.3.9.2.4. 条​件​列​(Condition Column)
条​件​代​表​右​手​边​定​义​的​事​实​模​式​(fact pattern)或​规​则​的​ "When" 部​分​。​要​定​义​一​个​条​件​列​,你​必​须​定​义​模​型​类​绑​定​或​者​选​择​一​个​已​经​定​义​的​绑​定​。​完​成​后​你​就​可​以​定​义​字​段​约​束​了​。​如​果​两​个​或​多​个​列​都​使​用​了​相​同​的​事​实​模​式​绑​定​,字​段​约​束​将​变​成​相​同​模​式​的​复​合​字​段​约​束​。​如​果​你​为​单​个​的​模​型​类​定​义​了​多​个​绑​定​,每​个​绑​定​都​会​变​成​规​则​右​手​边​的​单​独​的​模​型​类​。​
4.3.9.2.5. 行​为​列​(Action Column)
你​可​以​定​义​行​为​列​来​在​规​则​引​擎​的​工​作​内​存​里​执​行​绑​定​事​实​上​的​简​单​操​作​或​者​创​建​全​新​的​事​实​。​新​的​事​实​可​以​在​逻​辑​上​插​入​到​规​则​引​擎​的​工​作​内​存​,从​而​服​从​平​常​的​真​相​维​护​(truth maintenance )。​关​于​真​相​维​护​和​逻​辑​插​入​的​更​多​信​息​,请​参​考​《​JBoss Rules 参​考​指​南​》​。​
4.3.9.3. 规​则​定​义​
本​节​允​许​使​用​之​前​定​义​的​列​来​定​义​个​体​规​则​。​

图 4.11. 规​则​定​义​

4.3.9.4. 单​元​合​并​
决​策​表​左​上​角​的​图​标​切​换​单​元​格​合​并​的​开​与​关​。​当​进​行​单​元​格​合​并​时​,那​些​在​相​同​列​里​且​具​有​相​同​值​的​单​元​格​将​合​并​成​单​个​的​单​元​格​。​这​简​化​了​修​改​分​享​相​同​原​始​值​的​多​个​单​元​格​的​内​容​。​当​单​元​格​被​合​并​时​,它​们​也​在​单​元​格​的​左​上​角​显​示​一​个​图​标​以​允​许​对​跨​越​合​并​单​元​格​的​行​进​行​分​组​。​

图 4.12. 单​元​合​并​

4.3.9.5. 单​元​分​组​
已​经​被​合​并​的​单​元​格​可​以​进​一​步​收​缩​成​单​一​的​行​。​点​击​左​上​角​的​ [+\-] 图​标​将​收​缩​对​应​的​行​为​一​行​。​跨​越​收​缩​的​具​有​相​同​值​的​行​的​其​他​列​里​的​单​元​格​将​不​受​影​响​。​而​跨​越​收​缩​的​具​有​不​同​值​的​行​的​其​他​列​里​的​单​元​格​将​高​亮​显​示​且​显​示​第​一​个​值​。​

图 4.13. 单​元​分​组​

当​分​组​单​元​格​的​值​被​改​动​时​,已​经​收​缩​的​所​有​的​单​元​格​都​将​更​新​它​们​的​值​。​
4.3.9.6. Otherwise 操​作​
定​义​为​使​用​等​号​ == 或​不​等​号​ != 操​作​符​的​ literal 值​的​条​件​列​可​以​利​用​一​个​特​殊​决​策​表​的​单​元​格​值​ otherwise。​这​个​特​殊​的​值​允​许​定​义​规​则​来​匹​配​没​有​在​表​里​其​他​规​则​里​显​性​定​义​的​值​。​我​们​最​好​用​以​下​的​例​子​来​解​释​:
when
  Cheese( name not in ("Cheddar", "Edam", "Brie") )
  ...
then
  ...
end
Copy to Clipboard Toggle word wrap
when
  Cheese( name in ("Cheddar", "Edam", "Brie") )
  ...
then
  ...
end
Copy to Clipboard Toggle word wrap

4.3.10. 规​则​模​板​

规​则​模​板​允​许​用​户​定​义​一​个​带​有​占​位​符​(其​值​从​表​数​据​里​获​取​)的​规​则​结​构​。​也​你​也​可​以​继​续​使​用​ Literal 值​、​公​式​(Formula)和​表​达​式​(Expression)。​
规​则​模​板​经​常​可​用​来​替​换​决​策​表​。​

过程 4.3. 创​建​规​则​模​板​

  1. 创​建​规​则​模​板​资​产​

    从​ Knowledge Bases 菜​单​,选​择​ Create New,然​后​选​择​ New Rule Template。​
  2. 定​义​资​产​

    输​入​模​板​的​名​称​、​类​别​和​描​述​。​
  3. 定​义​模​板​

    使​用​ guided editor 来​构​造​规​则​。​模​板​关​键​字​(Template key) 是​字​段​约​束​和​行​为​部​分​里​的​占​位​符​。​你​也​可​以​在​标​准​ guided editor 继​续​使​用​ Literal 值​、​公​式​(Formula)和​表​达​式​(Expression)。​
例 4.3 “示​例​模​板​” 解​释​了​一​个​已​经​用​模​板​关​键​字​(Template Key)定​义​的​简​单​规​则​,它​用​于​申​请​者​的​最​大​年​龄​、​最​小​年​龄​和​信​用​级​别​。​模​板​关​键​字​已​经​分​别​定​义​为​ "$max_age"、​"$min_age" 和​ "$cr"。​

例 4.3. 示​例​模​板​

4.3.10.1. 定​义​模​板​数​据​
当​你​完​成​规​则​模​板​的​定​义​后​,你​需​要​输​入​用​于​插​入​“​模​板​关​键​字​”​占​位​符​的​数​据​。​BRMS 提​供​了​在​ Guided Editor 屏​幕​上​的​灵​活​的​网​格​里​输​入​数​据​的​机​制​。​在​ Guided Editor 屏​幕​上​按​ Load Template Data 按​钮​可​以​启​动​网​格​编​辑​器​。​
规​则​模​板​的​数​据​网​格​是​非​常​灵​活​的​,对​于​底​层​不​同​的​数​据​类​型​有​不​同​的​弹​出​编​辑​器​。​列​可​以​调​整​大​小​和​排​序​,而​单​元​格​可​以​合​并​和​分​组​以​助​于​快​速​的​数​据​录​入​。​
每​个​Template Key 占​位​符​可​插​入​一​行​数​据​,由​此​每​一​行​都​称​为​了​一​条​规​则​。​

注意

如​果​某​一​样​的​任​何​单​元​格​为​空​,那​么​该​行​规​则​就​不​会​生​成​。​

图 4.14. 模​板​数​据​网​格​

4.3.10.1.1. 单​元​合​并​
网​格​左​上​角​的​图​标​切​换​单​元​格​合​并​的​开​与​关​。​当​进​行​单​元​格​合​并​时​,那​些​在​相​同​列​里​且​具​有​相​同​值​的​单​元​格​将​合​并​成​单​个​的​单​元​格​。​这​简​化​了​修​改​分​享​相​同​原​始​值​的​多​个​单​元​格​的​内​容​。​当​单​元​格​被​合​并​时​,它​们​也​在​单​元​格​的​左​上​角​显​示​一​个​图​标​以​允​许​对​跨​越​合​并​单​元​格​的​行​进​行​分​组​。​

图 4.15. 单​元​合​并​

4.3.10.1.2. 单​元​分​组​
已​经​被​合​并​的​单​元​格​可​以​进​一​步​收​缩​成​单​一​的​行​。​点​击​左​上​角​的​ [+\-] 图​标​将​收​缩​对​应​的​行​为​一​行​。​跨​越​收​缩​的​具​有​相​同​值​的​行​的​其​他​列​里​的​单​元​格​将​不​受​影​响​。​而​跨​越​收​缩​的​具​有​不​同​值​的​行​的​其​他​列​里​的​单​元​格​将​高​亮​显​示​且​显​示​第​一​个​值​。​

图 4.16. 单​元​分​组​

当​分​组​单​元​格​的​值​被​改​动​时​,已​经​收​缩​的​所​有​的​单​元​格​都​将​更​新​它​们​的​值​。​
4.3.10.2. 生​成​的​ DRL
规​则​作​者​可​以​查​看​将​为​规​则​模​板​和​相​关​联​的​数​据​生​成​的​ DRL,虽​然​这​并​没​有​必​要​。​这​个​功​能​及​其​操​作​和​用​于​其​他​资​产​的​没​有​区​别​。​选​择​ Source,然​后​再​从​资​产​编​辑​器​屏​幕​选​择​ View Source 菜​单​。​这​将​显​示​所​有​规​则​的​ DRL。​

图 4.17. 生​成​的​ DRL

4.3.11. 规​则​流​

规​则​流​:规​则​流​允​许​你​用​可​视​方​式​描​述​进​行​的​步​骤​ - 所​以​不​是​所​有​的​规​则​都​会​立​即​进​行​评​估​,这​是​一​个​逻​辑​流​。​本​章​不​会​涵​盖​ BRMS 上​的​规​则​流​,但​你​可​以​使​用​ IDE 画​出​图​形​化​规​则​流​并​上​传​ .rfm 到​ BRMS。​
和​电​子​表​格​相​似​,你​可​以​上​传​/下​载​规​则​流​文​件​(Eclipse IDE 有​个​对​应​的​图​形​化​编​辑​器​)。​我​们​不​会​在​此​讨​论​规​则​流​的​细​节​。​

4.3.12. 技​术​性​规​则​(DRL)

技​术​性​规​则​(DRL)存​储​为​文​本​且​可​以​在​ BRMS 里​进​行​管​理​。​DRL 文​件​可​以​包​含​一​个​或​多​个​规​则​。​如​果​文​件​只​包​含​一​个​规​则​,那​么​软​件​包​、​导​入​和​规​则​语​句​都​是​不​必​要​的​。​你​可​以​只​使​用​ "When" 和​ "Then" 来​分​别​标​记​ "Condition“​ 和​ "Action" 部​分​。​
通​常​你​将​使​用​集​成​的​开​发​环​境​来​编​辑​ “​原​生​”​ DRL 文​件​,这​是​因​为​ IDE 拥​有​高​级​的​工​具​、​内​容​助​手​和​调​试​功​能​。​然​而​,有​时​候​规​则​得​处​理​ BRMS 里​的​软​件​包​里​的​非​常​技​术​性​的​东​西​。​在​任​何​典​型​的​规​则​软​件​包​里​,你​通​常​都​需​要​ “​技​术​性​规​则​”​。​当​然​你​也​可​以​将​所​有​的​规​则​类​型​混​合​并​进​行​匹​配​。​

图 4.18. DRL 技​术​性​规​则​

4.3.13. 功​能​

功​能​是​另​外​一​类​资​产​。​它​们​不​是​资​产​且​应​该​只​在​需​要​时​才​被​使​用​。​"Function Editor" 是​一​个​文​本​编​辑​器​。​

图 4.19. 功​能​

数​据​枚​举​(Data enumeration)是​资​产​的​一​个​可​选​类​型​,你​可​以​配​置​它​为​ Guided Editor 提​供​下​拉​列​表​。​它​们​和​其​他​资​产​一​样​可​以​存​储​和​编​辑​,且​只​应​用​于​它​们​所​属​的​软​件​包​。​
枚​举​配​置​的​内​容​是​ "Fact.field" 到​一​个​值​列​表​的​映​射​。​这​些​值​用​在​一​个​下​列​列​表​里​。​这​个​列​表​可​以​是​文​字​的​,或​者​使​用​工​具​类​(你​放​入​ classpath 里​的​)来​加​载​字​符​串​。​这​些​字​符​串​包​含​显​示​在​下​拉​列​表​里​的​值​,或​者​代​码​值​(规​则​里​使​用​的​结​尾​)的​映​射​和​显​示​值​(请​看​下​面​的​例​子​,它​使​用​ '=')。​
'Board.type' : [ 'Short', 'Long', 'M=Mini', 'Boogie']
'Person.age' : [ '20', '25', '30', '35' ]
Copy to Clipboard Toggle word wrap
在​上​面​的​枚​举​配​置​里​,"M" 表​示​用​在​规​则​里​的​值​,而​ "Mini" 则​是​显​示​在​图​形​界​面​里​的​值​。​
从​外​部​源​获​取​数​据​列​表​
BRMS 也​可​以​调​用​加​载​字​符​串​列​表​的​代​码​。​为​此​,你​需​要​一​段​返​回​ java.util.List 到​ BRMS 的​ classpath 的​代​码​。​不​是​指​定​ BRMS 的​值​列​表​,代​码​是​返​回​字​符​串​列​表​。​(通​常​,如​果​你​想​为​规​则​使​用​不​同​的​显​示​值​,你​可​以​在​字​符​串​里​使​用​ "=" 符​号​。​)例​如​,你​可​以​修​改​上​面​的​ Person.age 行​为​:
'Person.age' : (new com.yourco.DataHelper()).getListOfAges()
Copy to Clipboard Toggle word wrap
这​假​设​你​有​一​个​名​为​ DataHelper 的​类​,它​有​一​个​返​回​字​符​串​列​表​(位​于​ classpath 上​)的​方​法​ getListOfAges()。​你​当​然​可​以​将​这​些​ “​动​态​的​“​ 枚​举​和​固​定​列​表​混​合​。​例​如​,你​可​以​用​ JDBC 从​数​据​库​里​加​载​它​们​。​你​第​一​次​在​会​话​里​使​用​ Guided Editor 时​将​加​载​数​据​枚​举​。​如​果​你​有​任​何​打​开​的​ Guided Editor 会​话​,你​将​需​要​关​闭​它​并​重​新​打​开​规​则​才​能​看​到​发​生​的​变​化​。​要​检​查​枚​举​是​否​已​经​加​载​,请​进​入​软​件​包​配​置​屏​幕​。​你​可​以​使​用​"保​存​并​检​验​(save and validate)"软​件​包​,这​可​以​检​查​并​反​馈​任​何​发​生​的​错​误​。​

4.3.15. 高​级​的​枚​举​概​念​

对​于​数​据​枚​举​,你​还​可​以​执​行​一​些​其​他​的​高​级​任​务​。​
取​决​于​字​段​值​的​下​拉​列​表​
假​设​有​一​个​简​单​的​事​实​模​型​,你​有​一​个​名​为​ Vehicle 的​类​,它​有​两​个​字​段​组​成​:"engineType" 和​ "fuelType"。​对​于​ "engineType" 你​希​望​选​择​ "Petrol" 或​ "Diesel"。​现​在​,很​明​显​燃​油​的​选​择​必​须​取​决​于​引​擎​类​型​(对​于​汽​油​我​们​有​ ULP 和​ PULP,而​对​于​柴​油​我​们​有​ BIO and NORMAL)。​我​们​可​以​在​枚​举​表​达​式​里​表​达​这​种​依​赖​关​系​:
 'Vehicle.engineType' : ['Petrol', 'Diesel']
 'Vehicle.fuelType[engineType=Petrol]' : ['ULP', 'PULP' ]
 'Vehicle.fuelType[engineType=Diesel]' : ['BIO', 'NORMAL' ]
Copy to Clipboard Toggle word wrap
这​显​示​了​如​何​通​过​根​据​其​他​字​段​的​值​来​进​行​选​择​。​请​注​意​,一​旦​你​选​择​了​ engineTypefuelType 的​选​项​列​表​就​被​决​定​里​。​
在​程​序​里​加​载​枚​举​
在​某​些​情​况​下​,我​们​胡​会​希​望​从​外​部​数​据​源​(如​关​系​型​数​据​库​)加​载​自​己​的​枚​举​数​据​。​为​此​,你​可​以​实​现​一​个​返​回​ Map 类​型​的​类​。​这​个​ Map 的​键​是​一​个​字​符​串​(就​是​上​面​显​示​的​ Fact.field 名​称​)。​它​的​值​是​一​个​字​符​串​的​ java.util.List。​
public class SampleDataSource2 {

  public Map<String>, List<String>> loadData() {
    Map data = new HashMap();

    List d = new ArrayList();
    d.add("value1");
    d.add("value2");
    data.put("Fact.field", d);

    return data;
 }

}
Copy to Clipboard Toggle word wrap
在​ BRMS 的​枚​举​里​,输​入​下​列​内​容​:
=(new SampleDataSource2()).loadData()
Copy to Clipboard Toggle word wrap
"=" 符​号​表​示​通​过​执​行​你​的​代​码​加​载​数​据​。​
更​多​高​级​的​枚​举​
在​上​面​的​例​子​里​,列​表​里​的​值​会​“​先​”​被​计​算​。​对​于​相​对​静​态​或​小​型​数​据​来​说​,这​是​非​常​足​够​的​。​然​而​,假​设​我​们​有​一​个​国​家​列​表​,而​每​个​国​家​都​有​一​个​州​的​列​表​,而​每​个​州​又​有​自​己​的​地​区​列​表​,地​区​则​有​街​道​列​表​等​等​。​此​时​你​就​会​发​现​这​需​要​大​量​的​数​据​,这​么​大​的​数​据​是​无​法​被​一​次​加​载​的​。​所​以​,可​以​根​据​所​选​的​国​家​来​加​载​列​表​。​
这​种​情​况​可​以​下​列​方​式​解​决​:
'Fact.field[dependentField1, dependentField2]' : '(new com.yourco.DataHelper()).getListOfAges("@{dependentField1}", "@{dependentField2}")'
Copy to Clipboard Toggle word wrap
请​注​意​,只​有​需​要​的​字​段​才​被​指​定​。​而​且​,在​右​边​的​ ":" 符​号​中​,表​达​式​是​用​引​号​括​起​的​。​这​个​表​达​式​只​在​需​要​时​才​会​被​估​值​。​此​时​,它​将​替​代​指​定​的​字​段​的​值​。​这​意​味​着​你​可​以​使​用​图​形​化​用​户​界​面​的​字​段​值​来​驱​动​数​据​库​查​询​,然​后​再​向​下​查​询​数​据​,诸​如​此​类​。​当​加​载​了​规​则​的​下​拉​列​表​后​,列​表​将​根​据​这​些​字​段​进​行​刷​新​。​"depenentField1" 和​ "dependentField2" 是​ "Fact" 类​型​上​的​字​段​名​称​。​它​们​用​于​计​算​作​为​ ”​字​段​“​ 值​显​示​在​下​拉​列​表​里​的​值​列​表​。​

4.4. 状​态​管​理​

BRMS 里​的​每​个​资​产​和​软​件​包​都​有​一​套​状​态​标​记​(status flag)。​这​些​标​记​的​值​可​以​在​ BRMS 的​“​管​理​”​章​节​找​到​。​在​这​里​,你​可​以​添​加​自​己​的​状​态​名​称​。​和​类​别​相​似​,状​态​也​不​会​以​任​何​方​式​影​响​执​行​。​它​们​只​是​提​供​信​息​而​已​。​

注意

不​像​类​别​,资​产​在​某​个​时​刻​只​有​一​个​状​态​。​
状​态​的​使​用​完​全​是​可​选​的​。​你​可​以​采​用​它​们​或​类​别​来​管​理​资​产​的​生​命​周​期​。​

图 4.20. 资​产​状​态​

上​面​的​图​表​描​述​单​个​资​产​的​状​态​变​化​。​这​种​变​化​会​立​即​发​生​;它​不​需​要​单​独​地​保​存​。​
你​也​可​以​修​改​整​个​软​件​包​的​状​态​。​这​会​设​置​软​件​包​自​身​和​属​于​它​的​所​有​资​产​的​状​态​标​记​为​同​一​个​值​。​

4.5. 软​件​包​管​理​

在​ BRMS 里​,你​有​一​个​"知​识​库​(Knowledge Base)",它​包​含​一​个​或​多​个​"知​识​软​件​包​(Knowledge Package)"。​在​用​户​界​面​里​,知​识​软​件​包​通​常​被​简​单​地​称​为​ "软​件​包​."。​

警告

配​置​知​识​软​件​包​通​常​只​进​行​一​次​,它​应​该​由​具​有​开​发​规​则​和​模​型​经​验​的​人​员​来​完​成​。​很​少​有​人​需​要​配​置​知​识​软​件​包​,只​要​配​置​完​毕​,它​可​以​按​需​要​多​次​进​行​复​制​。​软​件​包​配​置​肯​定​是​一​个​需​要​规​则​开​发​经​验​的​技​术​性​任​务​。​
所​有​的​资​产​都​位​于​ BRMS 的​“​软​件​包​”​里​。​软​件​包​就​像​一​个​子​目​录​(它​也​可​作​为​“​命​名​空​间​”​)。​它​和​规​则​资​产​所​在​的​主​目​录​等​同​。​特​别​是​规​则​需​要​知​道​ fact model 和​命​名​空​间​的​性​质​。​

图 4.21. 软​件​包​浏​览​器​(Package Explorer)

上​面​的​图​片​展​示​了​软​件​包​浏​览​器​(Package Explorer)。​点​击​资​产​类​型​将​显​示​对​应​的​一​个​列​表​(对​于​具​有​数​千​个​规​则​的​软​件​包​,这​需​要​几​秒​钟​才​会​显​示​出​来​,因​此​使​用​类​别​来​加​速​浏​览​很​重​要​)。​
总​而​言​之​,虽​然​规​则​(资​产​)可​以​出​现​多​个​类​别​里​,它​们​只​位​于​一​个​软​件​包​内​。​如​果​你​将​ BRMS 当​作​一​个​文​件​系​统​,则​每​个​软​件​包​都​是​一​个​目​录​,而​其​中​的​资​产​就​是​文​件​列​表​。​
软​件​包​管​理​功​能​允​许​你​查​看​知​识​软​件​包​列​表​并​“​扩​展​”​为​每​个​“​类​型​”​的​小​型​列​表​(资​产​可​能​很​多​,所​以​其​中​一​些​进​行​了​分​组​):
资​产​类​型​:
  • 商​业​资​产​(Business Asset):显​示​所​有​“​商​业​规​则​”​类​型​的​列​表​,它​包​括​决​策​表​(Decision Table)、​商​业​规​则​等​。​
  • 技​术​资​产​(Technical Asset):显​示​被​当​作​技​术​性​规​则​的​资​产​列​表​(如​ DRL 规​则​、​数​据​枚​举​以​及​规​则​流​)。​
  • 功​能​(Function):在​ BRMS 里​,你​也​可​以​定​义​功​能​(这​是​可​选​的​)。​
  • DSL:Domain Specific Language 也​可​作​为​资​产​存​储​。​如​果​存​在​(通​常​只​有​一​个​),他​们​将​和​合​适​的​编​辑​器​ GUI 一​起​使​用​。​
  • 模​型​(Model):一​个​软​件​包​需​要​至​少​一​个​模​型​。​它​用​于​规​则​。​

图 4.22. 创​建​新​的​资​产​

你​可​以​使​用​软​件​包​浏​览​器​(Package Explorer)创​建​新​的​规​则​或​资​产​。​有​些​资​产​只​能​通​过​软​件​包​浏​览​器​创​建​。​图 4.22 “创​建​新​的​资​产​” 展​示​了​启​动​该​功​能​的​“​向​导​”​的​图​标​。​

图 4.23. 软​件​包​配​置​

你​需​要​做​的​最​重​要​的​事​情​是​配​置​软​件​包​。​这​个​任​务​涉​及​导​入​规​则​使​用​的​类​并​定​义​全​局​变​量​两​个​方​面​。​进​行​了​修​改​后​,你​需​要​保​存​它​。​此​时​,软​件​包​就​已​经​完​成​配​置​并​准​备​好​进​行​构​建​了​。​例​如​,你​可​以​添​加​一​个​具​有​类​ com.something.Hello 的​模​型​。​然​后​你​将​在​软​件​包​配​置​里​添​加​ import com.something.Hello 并​保​存​修​改​。​

图 4.24. 构​建​软​件​包​

在​导​入​软​件​包​的​类​并​定​义​了​全​局​变​量​后​,你​可​以​构​建​软​件​包​。​软​件​包​包​含​的​资​产​越​多​,构​建​需​要​的​时​间​越​长​。​构​建​成​功​后​,你​将​可​以​为​部​署​创​建​一​个​“​快​照​”​。​此​时​,你​也​可​以​查​看​软​件​包​构​建​时​生​成​的​“​drl”​。​

4.5.1. 导​入​ drl 软​件​包​

你​也​可​以​通​过​导​入​现​有​的​ "drl" 文​件​来​创​建​软​件​包​。​当​你​选​择​创​建​新​的​软​件​包​时​,你​可​以​选​择​上​载​一​个​ .drl 文​件​。​BRMS 将​试​图​解​析​这​个​ drl 并​自​动​创​建​一​个​软​件​包​。​它​里​面​的​规​则​将​作​为​单​个​资​产​保​存​(仍​然​是​ drl 的​文​本​内​容​)。​请​注​意​,要​实​际​上​构​建​软​件​包​,你​需​要​上​载​一​个​合​适​的​模​型​(以​ .jar 形​式​)以​供​检​验​。​这​是​一​个​单​独​的​步​骤​。​

4.6. 版​本​管​理​

在​ BRMS 里​,整​个​知​识​软​件​包​和​单​个​资​产​都​带​版​本​,单​每​个​的​机​制​都​不​太​一​样​。​单​个​资​产​在​源​码​控​制​系​统​(Subversion)里​以​文​件​版​本​的​形​式​保​存​。​然​而​,资​产​软​件​包​通​过​快​照​方​式​根​据​需​要​(“​On Demand”​)划​分​版​本​。​这​个​快​照​用​于​部​署​。​下​一​节​我​们​讨​论​部​署​管​理​和​快​照​的​更​多​细​节​。​

图 4.25. 资​产​版​本​

每​次​对​资​产​进​行​修​改​后​,它​都​在​版​本​历​史​记​录​创​建​一​个​新​的​条​目​。​这​为​你​提​供​了​无​限​制​的​“​Undo”​功​能​。​你​可​以​查​看​单​个​资​产​的​历​史​(如​上​面​的​列​表​所​示​),然​后​按​照​时​间​进​行​恢​复​。​

4.7. 部​署​管​理​

URL 是​围​绕​如​何​提​供​构​建​的​知​识​软​件​包​的​过​程​的​中​心​。​BRMS 通​过​ URL 提​供​知​识​软​件​包​以​供​知​识​代​理​(Knowledge Agent)下​载​和​使​用​。​这​些​ URL 采​用​这​种​格​式​:http://localhost:8080/jboss-brms/org.drools.guvnor.Guvnor/package/<packageName>/<packageVersion>
<packageName> 是​你​给​软​件​包​取​的​名​字​。​<packageVersion> 是​快​照​的​名​称​或​ "LATEST"(如​果​它​是​“​LATEST”​,那​么​它​将​是​从​主​软​件​包​里​构​建​的​最​新​版​本​而​非​快​照​)。​你​可​以​在​代​理​里​使​用​它​或​者​将​其​粘​贴​到​浏​览​器​地​址​栏​里​作​为​文​件​下​载​。​
关​于​如​何​在​应​用​程​序​里​使​用​这​些​ URL 和​二​进​制​下​载​、​以​及​如​何​在​运​行​时​(On the fly)更​新​规​则​的​详​情​,请​参​考​ 第 8.1 节 “知​识​代​理​(Knowledge Agent)”。​

图 4.26. 部​署​快​照​

上​面​的​映​像​展​示​了​ Deployment Snapshots 视​图​。​左​侧​有​一​个​知​识​软​件​包​列​表​。​点​击​某​个​软​件​包​,它​将​为​你​展​示​它​的​所​有​快​照​(如​果​有​的​话​)。​你​可​以​复​制​、​删​除​或​查​看​快​照​。​每​个​快​照​都​可​以​下​载​或​通​过​ URL 访​问​。​下​载​后​你​就​可​以​部​署​它​。​

4.8. 浏​览​库​和​查​找​规​则​

查​看​库​的​两​个​主​要​途​径​是​使​用​用​户​驱​动​的​类​别​(也​称​为​ tagging)和​软​件​包​浏​览​器​(Package Explorer)视​图​。​
分​类​视​图​(Category View)为​你​提​供​了​浏​览​与​你​的​机​构​相​关​的​规​则​的​途​径​。​

图 4.27. 分​类​视​图​(Category View)

上​面​的​图​表​显​示​了​分​类​功​能​。​如​果​可​能​的​话​,将​每​个​类​别​里​的​规​则​限​制​在​几​十​个​以​下​。​
其​他​的​视​图​使​用​软​件​包​浏​览​器​(Package Explorer)。​这​个​视​图​以​反​映​数​据​库​里​实​际​存​储​情​况​的​方​式​显​示​资​产​。​它​也​按​照​类​型​或​格​式​将​规​则​分​开​到​知​识​软​件​包​里​。​

图 4.28. 软​件​包​视​图​

驱​动​基​于​规​则​的​应​用​程​序​的​规​则​需​要​事​实​模​型​(Fact Model)。​事​实​模​型​通​常​和​应​用​程​序​的​域​模​型​(domain model)重​叠​,但​它​应​该​从​中​分​离​,这​从​长​远​来​说​使​得​规​则​易​于​管​理​。​
有​两​种​定​义​事​实​模​型​的​方​法​:
  • 上​传​包​含​应​用​程​序​和​规​则​使​用​的​ Java 类​的​ JAR 文​件​。​
  • 在​ BRMS 里​声​明​的​模​型​可​以​作​为​ KnowledgeBase 导​出​并​用​在​ Java 代​码​里​。​

5.1. 全​局​区​域​(Global Area)

当​创​建​事​实​模​型​时​,它​们​可​以​导​入​将​使​用​它​们​的​特​定​软​件​包​里​,或​者​导​入​到​全​局​区​域​(Global Area)里​。​请​注​意​ Global Area 里​的​资​产​并​不​是​对​全​局​可​用​的​,它​们​仍​然​必​须​导​入​到​使​用​它​们​的​软​件​包​里​。​对​于​还​未​使​用​的​资​产​,Global Area 应​该​用​作​一​个​存​储​位​置​,而​对​于​用​在​多​个​软​件​包​里​的​资​产​,它​应​该​用​作​一​个​中​心​位​置​。​

注意

当​编​辑​位​于​软​件​包​以​及​全​局​区​域​(Global Area)里​的​资​产​时​需​要​很​小​心​。​在​ Global Area 里​编​辑​的​资​产​将​需​要​再​次​导​入​到​使​用​它​们​的​软​件​包​里​,而​之​前​导​入​的​资​产​将​被​删​除​。​

5.2. JAR 模​型​

过程 5.1. 创​建​ JAR 模​型​

  1. 打​开​ New model archive (jar) 菜​单​

    从​ Knowledge Bases 菜​单​里​,选​择​ Create New,然​后​选​择​ Upload POJO Model JAR。​
  2. 创​建​ JAR 模​型​资​产​

    输​入​ JAR 模​型​的​名​字​、​类​别​和​描​述​。​选​择​模​型​所​在​的​软​件​包​或​指​定​它​应​该​添​加​到​ Global Area 里​。​输​入​完​毕​后​点​击​ OK。​
  3. 上​传​ JAR 到​资​产​里​

    上​传​包​含​定​义​为​常​规​ JAR 文​件​里​的​ Java 类​和​软​件​包​的​ JAR。​

5.3. 声​明​式​模​型​(Declarative Model)

使​用​声​明​式​模​型​(Declarative Model)有​如​下​好​处​:
  • 它​强​调​模​型​属​于​知​识​库​,标​注​应​用​程​序​。​
  • 这​个​模​型​可​以​有​独​立​于​应​用​程​序​的​生​命​周​期​。​
  • 规​则​专​有​的​注​解​可​以​丰​富​ Java 类​型​。​
  • JAR 文​件​必​须​在​规​则​和​使​用​它​的​应​用​程​序​之​间​保​持​同​步​,然​而​,声​明​式​模​型​不​需​要​保​持​同​步​。​
声​明​式​模​型​可​以​是​:
  • 你​的​规​则​里​使​用​的​整​个​事​实​模​型​的​独​立​定​义​。​
  • 支​持​ Java POJO 模​型​的​补​充​性​事​实​定​义​。​

过程 5.2. 创​建​声​明​式​模​型​

  1. 打​开​ New Declarative Model 菜​单​

    从​ Knowledge Bases 菜​单​,选​择​ Create New,然​后​选​择​ New Declarative Model。​
  2. 创​建​一​个​新​的​声​明​式​模​型​

    指​定​新​模​型​的​名​称​。​选​择​创​建​模​型​的​软​件​包​或​者​指​定​它​是​否​应​该​添​加​到​ Global Area。​输​入​完​毕​后​点​击​ OK。​
  3. 定​义​模​型​

    点​击​ Add new fact type 并​在​弹​出​菜​单​的​ name 字​段​输​入​事​实​的​名​称​。​
  4. 添​加​事​实​字​段​

    通​过​选​择​ Add field 按​钮​并​在​弹​出​菜​单​里​输​入​信​息​来​创​建​事​实​字​段​(Fact Field),
  5. 添​加​注​解​

    选​择​ Add annotation 按​钮​来​创​建​事​实​注​解​。​注​解​的​Name 和​ Value 字​段​都​是​强​制​的​,但​ Key 字​段​是​可​选​的​。​如​果​没​有​指​定​ Key 值​,它​将​被​分​配​ Value 的​一​个​缺​省​值​。​
声​明​式​类​型​是​在​知​识​库​编​译​时​生​成​的​,因​此​应​用​程​序​只​能​在​运​行​时​访​问​它​们​。​所​以​,应​用​程​序​不​能​直​接​引​用​这​些​类​。​
声​明​式​类​型​可​以​象​普​通​的​事​实​对​象​一​样​使​用​,但​你​创​建​它​们​的​方​式​会​不​一​样​(因​为​它​们​没​有​位​于​应​用​程​序​的​ classpath 上​)。​要​创​建​这​些​对​象​,它​们​可​通​过​ KnowledgeBase 实​例​来​进​行​。​

例 5.1. 通​过​ API 处​理​声​明​的​事​实​类​型​

// get a reference to a knowledge base with a declared type:
KnowledgeBase kbase = ...

// get the declared FactType
FactType personType = kbase.getFactType( "org.drools.examples",
                                         "Person" );

// handle the type as necessary:
// create instances:
Object bob = personType.newInstance();

// set attributes values
personType.set( bob,
                "name",
                "Bob" );
personType.set( bob,
                "age",
                42 );

// insert fact into a session
StatefulKnowledgeSession ksession = ...
ksession.insert( bob );
ksession.fireAllRules();

// read attributess
String name = personType.get( bob, "name" );
int age = personType.get( bob, "age" );
Copy to Clipboard Toggle word wrap

注意

声​明​的​类​型​的​命​名​空​间​是​它​所​在​的​软​件​包​的​命​名​空​间​(在​上​面​的​例​子​里​是​ org.drools.examples)。​

第 6 章  工​作​集​(Working Set)

注意

工​作​集​(Working set)是​ BRMS 5.2 里​的​一​个​实​验​性​的​功​能​。​
工​作​集​(Working set)将​事​实​(fact)进​行​分​组​并​定​义​通​用​的​约​束​。​工​作​集​也​可​以​在​对​规​则​授​权​时​限​制​ Guided Editor 里​可​见​的​规​则​。​
工​作​集​必​须​从​ Guided Editor 里​手​动​激​活​。​

过程 6.1. 创​建​一​个​新​的​工​作​集​

  1. 打​开​ New WorkingSet 对​话​框​

    从​ Knowledge Bases 菜​单​,选​择​ Create New,然​后​选​择​ New WorkingSet。​
  2. 创​建​新​的​工​作​集​

    输​入​工​作​集​的​名​称​和​描​述​。​选​择​创​建​模​型​的​软​件​包​或​者​指​定​它​是​否​应​该​添​加​到​ Global Area。​输​入​完​毕​后​点​击​ OK。​
  3. 添​加​ Fact Type 到​工​作​集​里​

    将​ fact type 从​左​边​列​表​移​至​右​边​可​以​添​加​ fact type 到​工​作​集​里​。​右​边​列​表​的​ fact type 将​对​工​作​集​可​用​。​
  4. 在​工​作​集​里​的​ Fact Type 里​添​加​约​束​

    从​下​列​菜​单​里​选​择​ Fact type,选​择​ Field 值​并​添​加​所​需​的​约​束​。​

6.1. 检​验​ Field 约​束​

你​可​以​两​种​方​式​检​验​ Field 约​束​:
  • On Demand 检​验​
  • 实​时​检​验​
On Demand 检​验​是​从​ Guided Editor 工​具​栏​里​选​择​ verify 来​执​行​的​。​检​验​结​果​包​含​一​个​检​验​报​告​。​
实​时​检​验​会​实​时​检​查​违​反​字​段​约​束​的​情​况​,并​在​发​生​时​进​行​标​记​。​
要​启​用​实​时​检​验​,选​择​ Administration,然​后​选​择​ Rules Verification 并​在​ Enable 复​选​框​上​打​勾​。​

注意

这​是​ 一​个​实​验​性​的​功​能​,在​缺​省​情​况​下​它​是​禁​用​的​。​

第 7 章 商​业​用​户​的​视​角​

对​于​商​业​用​户​,最​合​适​的​规​则​格​式​是​源​于​使​用​ Guided Editor、​决​策​表​和​ DSL 规​则​的​格​式​。​你​也​可​以​在​ Guided Editor 里​使​用​一​些​ DSL 表​达​式​(它​提​供​用​户​可​以​输​入​值​的​“​表​单​”​)。​
你​也​可​以​使​用​类​别​来​隔​离​非​技​术​型​用​户​和​规​则​/资​产​。​只​有​以​及​分​配​了​类​别​的​资​产​将​出​现​在​“​类​别​”​视​图​里​。​
BRMS 平​台​的​初​始​配​置​将​由​开​发​人​员​/技​术​人​员​来​承​担​。​这​些​人​员​将​为​所​有​的​规​则​设​置​基​础​配​置​。​它​们​也​可​以​创​建​“​模​板​”​,也​就​是​可​以​复​制​的​规​则​(通​常​驻​留​在​一​个​“​傀​儡​”​软​件​包​里​,位​于​“​template"类​别​里​)。​模​板​是​很​有​用​处​的​。​
部​署​也​不​应​该​由​非​技​术​人​员​来​实​施​。​如​本​指​南​里​前​面​所​提​到​的​,部​署​是​通​过​“​Packages"系​统​来​完​成​的​。​
到​目​前​为​止​,本​指​南​已​经​讨​论​了​规​则​的​管​理​。​现​在​,你​将​学​习​在​应​用​程​序​里​使​用​规​则​。​本​节​涵​盖​知​识​代​理​(Knowledge Agent)部​署​组​件​的​用​法​,它​可​以​自​动​化​这​个​过​程​的​一​大​部​分​。​

8.1. 知​识​代​理​(Knowledge Agent)

重要

jboss-brms-engine.zip 里​包​括​的​ README_DEPENDENCIES.txt 包​含​了​每​个​组​件​的​依​赖​关​系​的​细​节​。​
知​识​代​理​(Knowledge Agent)是​一​个​嵌​入​在​ JBoss Rules 5.0 API 里​的​组​件​。​使​用​知​识​代​理​不​许​要​其​他​额​外​的​组​件​。​如​果​你​在​是​以​ JBoss 企​业​级​ BRMS 平​台​,应​用​程​序​只​需​要​在​其​ classpath 里​包​含​ drools-core 依​赖​关​系​,也​就​是​ drools 和​ mvel JAR 文​件​。​这​里​没​有​其​他​的​规​则​专​有​的​依​赖​关​系​。​
这​里​也​有​一​个​名​为​ drools-ant 的​ ant 任​务​,你​可​以​用​ ant 脚​本​构​建​规​则​并​生​成​ .pkg 文​件​。​最​常​见​的​情​形​是​当​规​则​在​ IDE(JBoss Developer Studio)里​编​辑​而​无​需​使​用​ BRMS UI。​
在​软​件​包​里​构​建​了​ BRMS 平​台​里​的​软​件​包​后​,你​旧​可​以​在​目​标​应​用​程​序​里​使​用​代​理​了​。​
下​面​的​例​子​构​造​了​一​个​代​理​,它​将​根​据​路​径​字​符​串​里​指​定​文​件​构​建​一​个​新​的​知​识​库​。​它​每​隔​60秒​(缺​省​设​置​)将​轮​询​这​些​文​件​是​否​有​了​更​新​。​如​果​找​到​了​新​文​件​,它​将​构​造​一​个​新​的​知​识​库​。​如​果​指​定​的​资​源​是​一​个​目​录​,它​里​面​的​内​容​也​将​被​扫​描​。​
KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent( "MyAgent" );
kagent.applyChangeSet( ResourceFactory.newUrlResource( url ) );
KnowledgeBase kbase = kagent.getKnowledgeBase();
Copy to Clipboard Toggle word wrap
知​识​代​理​能​接​受​的​配​置​允​许​其​中​一​些​缺​省​值​被​修​改​。​其​中​的​一​个​例​子​是​属​性​ "drools.agent.scanDirectories",在​缺​省​情​况​下​任​何​指​定​的​目​录​都​将​被​扫​描​以​检​测​是​否​有​新​的​内​容​,你​可​以​禁​用​这​个​功​能​。​
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();

KnowledgeAgentConfiguration kaconf = KnowledgeAgentFactory.newKnowledgeAgentConfiguration();
kaconf.setProperty( "drools.agent.scanDirectories", "false" ); // we don't scan directories, only files
       
KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent( "test agent", kaconf );
// resource to the change-set xml for the resources to add
kagent.applyChangeSet( ResourceFactory.newUrlResource( url ) );
Copy to Clipboard Toggle word wrap
这​里​是​一​个​ change-set.xml 示​例​。​
<change-set xmlns='http://drools.org/drools-5.0/change-set'";
    xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'
    xs:schemaLocation='http://drools.org/drools-5.0/change-set drools-change-set-5.0.xsd' >
    <add>
        <resource source='http://localhost:9000/TEST.pkg' type='PKG' />
    </add> 
</change-set>
Copy to Clipboard Toggle word wrap
资​源​扫​描​在​缺​省​情​况​下​是​启​用​的​。​这​是​一​个​服​务​且​必​须​被​启​动​,通​知​服​务​也​是​一​样​。​这​可​以​通​过​ ResourceFactory 来​完​成​。​
ResourceFactory.getResourceChangeNotifierService().start();
ResourceFactory.getResourceChangeScannerService().start();
Copy to Clipboard Toggle word wrap
下​面​是​ BRMS UI 的​部​署​界​面​,它​提​供​了​ URL 和​软​件​包​的​下​载​地​址​。​

图 8.1. 快​照​部​署​

你​可​以​看​到​ Package URI。​这​是​一​个​你​需​要​包​含​在​ change-set.xml 文​件​里​的​ URL,以​指​定​你​需​要​这​个​软​件​包​。​它​指​定​了​一​个​额​外​的​版​本​,在​这​里​是​一​个​快​照​。​每​个​快​照​都​有​自​己​的​ URL。​如​果​你​需​要​最​新​的​版​本​,你​可​用​ LATEST 替​换​ NewSnapshot。​
你​也​可​以​从​这​里​下​载​一​个​软​件​包​文​件​(PKG)。​将​这​个​文​件​放​入​一​个​目​录​里​并​使​用​知​识​代​理​的​ file 或​ dir 功​能​。​这​将​自​动​联​系​ JBoss 企​业​版​ BRMS 平​台​服​务​器​以​获​取​在​其​他​情​形​下​可​能​不​需​要​的​更​新​。​

8.2. 手​动​部​署​

只​有​将​部​署​集​成​到​自​己​的​机​制​里​的​高​级​用​户​才​需​要​阅​读​本​节​。​通​常​来​说​你​应​该​使​用​知​识​代​理​。​
对​于​不​希​望​使​用​知​识​代​理​自​动​部​署​的​用​户​来​说​,手​动​部​署​是​相​当​简​单​的​。​JBoss 企​业​版​ BRMS 平​台​生​成​的​二​进​制​软​件​包​会​序​列​化​为​ Package 对​象​。​你​可​以​解​序​列​化​并​将​它​们​添​加​到​任​何​知​识​库​里​。​
在​ JBoss 企​业​版​ BRMS 平​台​里​,二​进​制​软​件​包​是​由​最​新​的​软​件​包​(一​旦​软​件​包​被​成​功​检​验​并​构​建​)或​部​署​快​照​提​供​的​。​JBoss 企​业​版​ BRMS 平​台​开​放​的​ URL 提​供​了​使​用​ HTTP 的​二​进​制​软​件​包​。​你​也​可​以​执​行​ "HEAD" 命​令​来​获​得​软​件​包​最​后​一​次​被​更​新​的​时​间​。​

8.3. WebDAV

"back-end" 库​也​可​以​通​过​ WebDav 访​问​。​WebDav 是​一​个​基​于​ HTTP 的​文​件​系​统​应​用​程​序​编​程​接​口​。​大​多​数​的​操​作​系​统​,包​括​ Windows、​Apple MacOS X 和​ Linux 都​提​供​访​问​ WebDAV 共​享​目​录​的​集​成​支​持​。​请​参​考​操​作​系​统​供​应​商​提​供​的​配​置​说​明​文​档​。​对​于​多​数​平​台​而​言​,也​有​许​多​第​三​方​的​ WebDAV 客​户​端​工​具​。​
用​ WebDAV 访​问​库​的​ URL 和​ web 接​口​的​
http://localhost:8080/jboss-brms/org.drools.guvnor.Guvnor/webdav/
Copy to Clipboard Toggle word wrap
象​平​常​一​样​这​也​需​要​验​证​。​WebDAV 提​供​了​一​个​软​件​包​和​快​照​目​录​。​Snapshots 是​一​个​只​读​目​录​,它​基​本​上​是​已​创​建​的​知​识​软​件​包​的​快​照​的​视​图​。​packages 目​录​包​含​作​为​目​录​的​知​识​软​件​包​列​表​,而​目​录​则​包​含​作​为​文​件​的​单​个​资​产​。​

8.3.1. WebDav 和​特​殊​字​符​

BRMS 支​持​规​则​名​称​里​含​有​ UTF-8 字​符​。​然​而​,当​规​则​通​过​ WebDav 复​制​,多​字​节​字​符​将​解​码​为​ ISO-8859-1。​
红​帽​不​推​荐​使​用​在​规​则​名​称​里​使​用​特​殊​字​符​,然​而​如​果​使​用​了​特​殊​字​符​,Web 连​接​器​必​须​进​行​修​改​以​支​持​ Unicode。​
要​添​加​对​ Unicode 的​支​持​,请​完​成​下​列​步​骤​。​

过程 8.1. 添​加​对​ Unicode 的​支​持​

  1. 停​止​应​用​服​务​器​。​
  2. 打​开​ server.xml 文​件​。​这​个​文​件​位​于​ jbossweb.sar 目​录​里​。​
  3. 在​ web 连​接​器​里​添​加​ URIEncoding="UTF-8"。​例​如​,对​于​ HTTP,这​个​代​码​应​该​是​:
    <Connector protocol="HTTP/1.1" port="8080" address="${jboss.bind.address}" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
    Copy to Clipboard Toggle word wrap
  4. 启​动​应​用​服​务​器​。​

8.4. URL

本​节​里​提​及​的​关​于​知​识​代​理​的​软​件​包​部​署​ URL 也​有​一​些​其​他​特​征​。​
要​获​得​这​个​软​件​包​而​不​是​二​进​制​软​件​包​的​ DRL,附​加​ .drl 到​ URL 的​结​尾​,如​ /package/testPDSGetPackage/LATEST.drl,附​加​ /assetName.drl,它​将​显​示​该​条​目​的​ DRL,即​使​它​不​是​一​个​ DRL 文​件​,如​ /package/testPDSGetPackage/LATEST/SomeFile.drl。​

第 9 章 收​件​箱​和​评​论​

重要

只​存​在​于​ JBoss 企​业​级​ BRMS 平​台​ 5.1.0 和​之​后​的​版​本​。​
通​过​ artifact 文​档​的​额​外​源​以​及​用​于​ artifact 变​动​的​通​知​系​统​,评​论​和​收​件​箱​功​能​帮​助​用​户​管​理​ artifact 的​变​动​。​

9.1. 评​论​(Comment)

任​何​用​户​都​可​以​在​ artifact 的​ documentation box 下​的​评​论​部​分​添​加​评​论​。​每​条​评​论​都​是​和​进​行​评​论​的​用​户​的​标​识​符​、​评​论​的​日​期​和​时​间​一​起​记​录​的​。​管​理​员​可​以​清​除​某​个​ artifact 的​评​论​,但​其​他​用​户​只​能​附​加​评​论​。​

图 9.1. 评​论​(Comment)

9.2. 收​件​箱​(Inbox)

“​Inbox“​位​于​导​航​面​板​的​ Browse 区​域​。​它​提​供​对​用​户​最​近​操​作​的​ artifact 的​快​速​访​问​以​及​对​用​户​过​去​曾​编​辑​的​ artifact 的​变​动​的​通​知​。​

图 9.2. 收​件​箱​(Inbox)

收​件​箱​包​含​三​个​“​子​收​件​箱​”​:
Incoming changes
这​里​会​列​出​对​用​户​之​前​编​辑​或​评​论​的​ artifact 的​修​改​。​
Recently opened
这​里​会​列​出​用​户​最​近​打​开​的​ 100 个​ artifact 以​供​快​速​访​问​。​
Recently edited
提​供​用​户​编​辑​的​最​近​ 100 个​ artifact 以​供​快​速​访​问​。​

第 10 章 JBoss Developer Studio 集​成​

Eclipse Guvnor 工​具​(EGT)为​开​发​人​员​提​供​了​使​用​ JBoss Developer Studio 4 读​、​写​、​添​加​和​从​ JBoss 企​业​级​ BRMS 平​台​服​务​器​删​除​资​产​的​界​面​。​EGT 也​为​开​发​人​员​提​供​了​一​个​和​传​统​的​源​码​控​制​系​统​(如​ Subversion)类​似​的​界​面​。​

重要

JBoss 只​对​ JBoss Developer Studio 4 的​这​个​功​能​提​供​支​持​。​
BRMS 平​台​库​和​ EGT 的​目​的​不​是​要​替​换​源​码​控​制​系​统​,它​为​开​发​人​员​提​供​了​一​种​方​便​的​访​问​方​法​。​

重要

Guvnor 是​构​建​ JBoss 企​业​版​ BRMS 平​台​的​开​源​项​目​。​Eclipse Guvnor Tools 就​是​基​于​此​点​而​开​发​的​。​EGT 在​任​何​地​方​提​及​的​ “​Guvnor”​ 都​是​指​的​ "BRMS 平​台​"。​为​了​避​免​混​淆​,本​章​以​后​的​部​分​我​们​将​统​称​ “​Guvnor”​。​

10.1. 功​能​概​述​

EGT 包​含​两​个​视​图​ - 库​浏​览​器​(Repository Explorer)和​版​本​历​史​(Version History)- 它​们​是​和​ Guvnor 库​交​互​的​中​心​点​。​
"Guvnor Repository Exploring" 视​角​是​我​们​建​议​的​格​式​。​它​可​以​通​过​ Open Perspective 对​话​框​(Window -> Open Perspective -> Other...)来​访​问​。​
左​侧​是​ Guvnor Repository Explorer 和​ Eclipse Properties 视​图​,Guvnor Resource History 视​图​位​于​底​部​,而​ Eclipse Resource Navigator 位​于​右​侧​。​Guvnor Repository Explorer 为​访​问​ Guvnor 库​资​源​提​供​了​可​浏​览​的​树​型​格​式​。​Guvnor Resource History 视​图​显​示​了​库​里​可​用​资​源​的​修​订​记​录​。​

图 10.1. "Guvnor Repository Exploring" 视​角​

10.2. Guvnor 连​接​向​导​

打​开​ Guvnor 视​角​后​,第​一​个​任​务​是​连​接​连​接​到​ Guvnor 库​。​这​是​由​ Guvnor 连​接​向​导​处​理​的​。​这​个​向​导​出​现​在​ EGT 里​的​多​个​地​方​(参​见​下​面​的​详​情​),但​在​本​节​我​们​只​介​绍​两​个​最​基​本​的​入​口​点​。​Guvnor 连​接​向​导​可​以​用​ Eclipse 菜​单​启​动​:File -> New -> Other -> Guvnor -> Guvnor repository location 或​通​过​ Guvnor 浏​览​器​的​下​拉​菜​单​:

图 10.2. 连​接​向​导​

或​者​使​用​菜​单​按​钮​:

图 10.3. 连​接​向​导​

选​择​其​中​一​个​都​将​启​动​ Guvnor 连​接​向​导​:

图 10.4. 连​接​向​导​

缺​省​值​会​出​现​在​ Location、​Port 和​ Repository 字​段​。​(关​于​如​何​修​改​这​些​缺​省​值​,请​参​考​下​面​的​ "Guvnor 首​选​项​" 章​节​。​)
当​然​,你​可​以​在​对​应​的​文​本​框​里​输​入​来​编​辑​这​些​字​段​。​将​典​型​的​ Guvnor 库​ URL 拖​放​或​粘​贴​到​ Location 字​段​,如​:http://localhost:8080/jboss-brms/org.drools.guvnor.Guvnor/webdav。​
URL 里​的​结​果​也​会​被​粘​贴​到​对​应​的​字​段​。​选​择​ ”​Save user name and password“​ 可​以​将​验​证​信​息​(用​户​名​和​密​码​)存​储​到​ Eclipse 工​作​台​的​ key-ring 文​件​里​。​如​果​验​证​信​息​没​有​存​储​在​ key-ring 文​件​里​,EGT 将​使​用​会​话​验​证​。​这​表​示​提​供​的​凭​证​只​能​用​于​ Eclipse 工​作​台​实​例​的​生​命​周​期​内​。​
如​果​验​证​信​息​没​有​存​储​在​ key-ring 文​件​里​或​者​它​是​无​效​的​,当​EGT 需​要​访​问​ Guvnor 库​时​它​将​提​示​你​:

图 10.5. 登​录​

如​果​验​证​失​败​,EGT 将​重​试​并​显​示​验​证​失​败​错​误​。​如​果​验​证​失​败​,你​可​以​重​试​相​同​的​操​作​并​使​用​不​同​的​凭​证​。​EGT 在​不​同​的​情​况​下​会​调​用​ Guvnor 库​,如​当​决​定​资​源​更​新​是​否​可​用​时​,所​以​,如​果​你​使​用​会​话​验​证​方​式​,根​据​你​执​行​的​行​为​,验​证​对​话​框​将​在​ Eclipse 工​作​台​会​话​期​间​多​次​出​现​。​为​了​便​于​使​用​,我​们​推​荐​你​将​验​证​信​息​保​存​在​ key-ring 里​。​Eclipse 的​ key-ring 文​件​和​其​他​平​台​如​ Mac OS X 和​许​多​ Linux 的​ key-ring 文​件​不​同​。​因​此​,有​时​候​如​果​你​在​ EGT 之​外​访​问​ Guvnor 库​,key-ring 文​件​可​能​无​法​同​步​,从​而​导​致​验​证​失​败​。​这​令​人​讨​厌​,但​在​这​种​情​况​下​你​应​该​使​用​平​时​的​凭​证​。​
Guvnor 连​接​向​导​执​行​完​毕​后​,新​的​库​连​接​将​出​现​在​ Guvnor Repository Explorer 里​。​然​后​你​就​可​以​扩​展​树​来​参​看​库​的​内​容​。​

10.3. Guvnor 库​浏​览​器​

图 10.6. 浏​览​器​

Guvnor 库​浏​览​器​视​图​显​示​ Guvnor 库​内​容​的​树​型​结​构​。​如​上​所​述​,它​具​有​创​建​ Guvnor 库​连​接​的​菜​单​和​工​具​栏​行​为​。​工​具​栏​里​的​红​色​ "X" 和​菜​单​条​里​的​ “​Delete“​ 都​可​以​删​除​ Guvnor 库​连​接​,而​ “​Refresh" 菜​单​则​为​所​选​节​点​加​载​树​型​内​容​。​最​后​,它​有​大​量​的​工​具​栏​/菜​单​项​支​持​ “​drill-into" 功​能​:工​具​栏​里​是​房​子​(“​return to top level/home”​)和​箭​头​(go into/back)。​当​用​于​深​度​嵌​套​的​树​型​结​构​且​你​希​望​专​注​于​树​的​分​支​时​,Drill-down 是​很​有​用​的​。​
对​于​ Guvnor 库​文​件​,有​大​量​的​操​作​可​以​执​行​。​在​ Guvnor 库​里​选​择​一​个​文​件​将​导​致​ Eclipse 属​性​视​图​更​新​该​文​件​的​细​节​:

图 10.7. 属​性​

双​击​树​里​到​文​件​夹​(目​录​)将​扩​展​或​收​缩​该​文​件​夹​。​双​击​文​件​夹​里​的​文​件​将​在​ Eclipse 里​打​开​一​个​只​读​编​辑​器​,显​示​该​文​件​的​内​容​:

图 10.8. 文​件​内​容​

图 10.9. 文​件​内​容​

从​ Guvnor 库​树​里​拖​动​一​个​文​件​到​ Eclipse 本​地​项​目​(如​ Eclipse 资​源​导​航​器​视​图​)里​的​文​件​夹​里​将​在​本​地​ Eclipse 工​作​区​里​创​建​该​文​件​的​拷​贝​。​(请​注​意​:在​只​读​编​辑​器​里​打​开​文​件​时​你​也​可​以​用​ “​Save As...”​ 保​存​一​个​本​地​到​可​写​版​本​,但​这​样​并​不​能​关​联​所​创​建​的​文​件​和​它​的​ Guvnor 源​。​)最​后​,你​可​以​用​ "Show History" 上​下​文​菜​单​查​看​所​选​文​件​的​修​订​历​史​记​录​。​(下​面​将​讨​论​资​源​历​史​记​录​的​细​节​。​)

10.4. Guvnor 文​件​的​本​地​拷​贝​

如​“​简​介​”​章​节​里​所​提​及​的​,EGT 的​主​要​目​的​是​允​许​使​用​ Guvnor 库​里​的​资​源​进​行​开​发​。​有​两​个​方​法​可​获​取​ Guvnor 库​资​源​的​本​地​版​本​:
1. 如​上​所​述​,从​ Guvnor 库​浏​览​器​里​拖​-放​。​
2. 如​ 第 10.6 节 “导​入​ Guvnor 库​资​源​” 所​解​释​的​,使​用​ “​import from Guvnor”​ 向​导​。​
创​建​了​ Gunvor 库​文​件​的​本​地​拷​贝​后​,EGT 将​设​置​本​地​拷​贝​和​库​里​的​主​文​件​间​的​关​联​。​(这​个​信​息​保​存​在​本​地​项​目​的​ “​.guvnorinfo”​ 文​件​夹​里​,象​所​有​的​元​数​据​,最​终​用​户​不​应​该​修​改​它​。​)这​个​关​联​使​得​一​些​操​作​(如​更​新​和​提​交​)可​与​ Guvnor 库​里​的​主​文​件​进​行​同​步​。​EGT 会​装​饰​和​主​文​件​关​联​的​本​地​资​源​。​这​种​装​饰​出​现​在​遵​循​通​用​导​航​器​框​架​的​ Eclipse 视​图​里​,如​ Eclipse 资​源​导​航​器​和​ Java 软​件​包​浏​览​器​。​下​图​显​示​了​ Eclipse 资​源​导​航​器​里​的​装​饰​:

图 10.10. 导​航​器​

注​意​文​件​图​像​右​上​角​的​ Guvnor 图​标​装​饰​以​及​附​加​在​文​件​名​后​的​ Guvnor 修​订​记​录​细​节​。​(你​可​以​修​改​这​些​东​西​的​存​在​与​否​和​位​置​。​细​节​请​参​考​下​面​的​ “​Guvnor 首​选​项​”​ )这​里​我​们​可​以​看​到​,例​如​,“​simpleRule.drl”​ 和​ Guvnor 库​资​源​关​联​而​本​地​拷​贝​基​于​版​本​ 3,并​带​有​ “​7-15-2008, 15:37:34“​ 时​间​戳​。​而​文​件​ “​deleteTest.txt”​ 没​有​和​ Guvnor 库​文​件​关​联​。​通​过​上​下​文​菜​单​到​ ”​Properties“​ 部​分​,你​可​以​在​标​准​的​ Eclihttps://translate.jboss.org/webtrans/clear.cache.gifpse 属​性​页​面​找​到​关​于​关​联​的​更​多​细​节​:

图 10.11. 属​性​

EGT 为​标​准​的​ Eclipse 属​性​对​话​框​贡​献​了​一​个​属​性​页​面​,上​面​显​示​了​它​的​内​容​。​其​中​包​括​专​门​的​ Guvnor 库​、​库​里​的​位​置​、​版​本​(日​期​/时​间​戳​)和​版​本​号​码​。​
EGT 提​供​大​量​的​行​为​(通​过​文​件​的​“​Guvnor”​上​下​文​菜​单​)以​用​于​处​理​文​件​,包​括​那​些​和​ Guvnor 库​主​拷​贝​相​关​和​不​相​关​联​的​。​这​些​行​为​是​:
  • 更​新​(Update)
  • 添​加​(Add)
  • 评​论​(Commit)
  • 显​示​历​史​(Show History)
  • 比​较​版​本​(Compare with Version)
  • 切​换​版​本​(Switch to Version)
  • 删​除​(Delete)
  • 断​开​连​接​(Disconnect)
每​种​行​为​都​将​在​下​面​进​行​描​述​。​
更​新​(Update)行​为​:
更​新​(Update)行​为​可​用​于​一​个​或​多​个​没​有​和​ Guvnor 库​主​拷​贝​同​步​的​ Guvnor 资​源​。​这​些​资​源​将​不​会​进​行​同​步​,因​为​(1)发​生​了​本​地​的​修​改​,或​(2)Guvnor 库​里​的​主​拷​贝​已​经​发​生​了​变​化​。​执​行​更​新​动​作​将​用​当​前​的​主​拷​贝​替​换​本​地​文​件​内​容​(相​当​于​“​切​换​版​本​(Switch to version)”​到​最​新​的​版​本​)。​
添​加​(Add)行​为​:
添​加​(Add)行​为​可​用​于​和​ Guvnor 库​主​拷​贝​没​有​关​联​的​一​个​或​多​个​本​地​文​件​。​选​择​ Add 行​为​将​启​动​ “​Add to Guvnor”​ 向​导​:

图 10.12. 添​加​(Add)行​为​

向​导​的​第​一​页​将​请​求​你​选​择​目​标​ Guvnor 库​以​及​创​建​一​个​新​的​ Guvnor 库​连​接​(第​二​页​和​上​面​描​述​的​ Guvnor 连​接​向​导​的​相​同​)。​选​择​了​目​标​ Guvnor 库​以​后​,向​导​将​要​求​你​选​择​添​加​所​选​文​件​的​文​件​夹​位​置​:

图 10.13. 添​加​(Add)行​为​

在​这​里​我​已​经​选​择​了​ mortages 文​件​夹​为​目​的​地​。​点​击​ “​Finish”​ 添​加​所​选​文​件​到​ Guvnor 库​并​创​建​本​地​文​件​和​ Guvnor 库​文​件​间​的​关​联​。​这​个​向​导​不​会​允​许​你​在​添​加​新​文​件​时​覆​盖​现​有​的​ Guvnor 库​文​件​。​
比​较​版​本​(Compare with Version)行​为​:
Compare with Version 行​为​对​于​和​ Guvnor 库​相​关​联​的​文​件​是​启​用​的​。​它​首​先​启​动​一​个​向​导​并​要​求​选​择​需​要​比​较​的​版​本​(和​本​地​文​件​内​容​):

图 10.14. 比​较​

选​择​了​版​本​后​,这​个​行​为​打​开​ Eclipse 比​较​编​辑​器​(只​读​):

图 10.15. 比​较​

这​个​编​辑​器​使​用​ Eclipse 标​准​的​比​较​技​术​来​显​示​两​个​版​本​的​不​同​。​如​果​没​有​不​同​,编​辑​器​将​不​会​被​打​开​而​是​弹​出​一​个​对​话​框​说​明​没​有​任​何​不​同​。​
切​换​版​本​(Switch to Version)行​为​:
Switch to Version 行​为​对​于​和​ Guvnor 库​相​关​联​的​文​件​是​启​用​的​。​它​首​先​提​示​选​择​版​本​:

图 10.16. 版​本​

选​择​了​版​本​后​,Switch to Version 行​为​将​用​所​选​版​本​替​换​本​地​文​件​的​内​容​。​
删​除​(Delete)行​为​:
删​除​(Delete)行​为​对​于​和​ Guvnor 库​相​关​联​的​文​件​是​启​用​的​。​通​过​对​话​框​进​行​确​认​后​,Delete 行​为​删​除​ Guvnor 库​里​的​文​件​并​和​它​相​关​联​的​本​地​元​数​据​。​
断​开​连​接​(Disconnect)行​为​:
断​开​连​接​(Disconnect)行​为​对​于​一​个​或​多​个​和​ Guvnor 库​相​关​联​的​文​件​是​启​用​的​它​删​除​和​ Guvnor 库​相​关​联​的​本​地​元​数​据​。​
Guvnor 资​源​历​史​视​图​:
Guvnor 资​源​历​史​视​图​应​该​提​供​所​选​文​件​的​修​订​历​史​记​录​,对​于​本​地​文​件​和​ Guvnor 库​都​是​一​样​。​这​个​视​图​的​初​始​状​态​是​:

图 10.17. 历​史​

Guvnor 资​源​历​史​视​图​是​由​本​地​的​ “​Guvnor”​ 上​下​文​菜​单​或​ Guvnor 库​浏​览​器​里​的​文​件​的​上​下​文​菜​单​里​的​ “​Show History”​ 选​项​决​定​的​。​执​行​了​这​个​动​作​后​,Guvnor 资​源​历​史​视​图​将​进​行​更​新​以​显​示​修​订​历​史​记​录​:

图 10.18. 历​史​

在​这​里​我​们​看​到​文​件​ “​simpleRule.drl”​ 有​三​个​修​订​版​本​。​双​击​某​个​版​本​(或​选​择​上​下​文​菜​单​的​『​打​开​(只​读​)』​)将​打​开​一​个​带​有​版​本​内​容​的​ Eclipse 只​读​编​辑​器​。​(请​注​意​:在​只​读​编​辑​器​里​打​开​文​件​时​你​也​可​以​用​ “​Save As...”​ 保​存​一​个​本​地​到​可​写​版​本​,但​这​样​并​不​能​关​联​所​创​建​的​文​件​和​它​的​ Guvnor 源​。​)

10.6. 导​入​ Guvnor 库​资​源​

除​了​从​ Guvnor 库​浏​览​器​视​图​里​拖​放​单​个​文​件​以​外​,EGT 也​包​括​一​个​可​复​制​多​个​文​件​到​本​地​工​作​区​的​向​导​(以​及​设​置​和​ Guvnor 库​的​关​联​)。​在​ Eclipse Import 、​Guvnor、​Resource from Guvnor 和​ Eclipse File、​New、​Other、​Guvnor、​Resource from Guvnor 菜​单​选​项​里​,这​个​向​导​都​是​可​用​的​。​(请​注​意​:在​这​两​个​位​置​这​个​向​导​是​相​同​的​,只​是​为​了​方​便​用​户​在​不​同​的​类​别​里​使​用​这​个​功​能​。​)向​导​的​第​一​页​将​要​求​选​择​源​ Guvnor 库​并​创​建​新​的​ Guvnor 库​连​接​(第​二​页​和​上​面​描​述​的​ Guvnor 连​接​向​导​相​同​)。​

图 10.19. 导​入​

选​择​了​源​ Guvnor 库​后​,向​导​会​提​示​你​选​择​资​源​:

图 10.20. 导​入​

最​后​,选​择​本​地​工​作​区​里​的​目​标​位​置​:

图 10.21. 导​入​

之​后​向​导​将​从​ Guvnor 库​复​制​所​选​的​文​件​到​本​地​工​作​区​。​如​果​目​的​地​已​经​存​在​相​同​名​字​的​文​件​,向​导​将​使​用​ Eclipse 的​标​准​ “​prompt for rename”​ 对​话​框​:

图 10.22. 复​制​

10.7. Guvnor 插​件​的​首​选​项​

EGT 在​提​供​

图 10.23. 首​选​项​

首​选​项​有​两​个​类​别​:Guvnor 库​连​接​和​本​地​ Guvnor 库​资​源​装​饰​。​
Guvnor 库​连​接​的​首​选​项​
对​于​ Guvnor 库​连​接​,你​可​以​设​置​两​个​首​选​项​,它​们​是​在​创​建​新​连​接​时​使​用​的​。​第​一​个​是​缺​省​的​ Guvnor 库​ URL 模​板​,通​过​简​单​地​修​改​部​分​字​段​(如​主​机​名​),它​使​得​创​建​多​个​类​似​的​连​接​更​为​容​易​。​第​二​个​是​是​否​在​ Eclipse 平​台​ Key-ring 里​保​存​验​证​信​息​,在​缺​省​情​况​下​你​应​该​启​用​它​。​使​用​ Guvnor 库​ URL 模​板​时​,是​否​在​ Eclipse 平​台​ Key-ring 里​保​存​特​定​的​验​证​信​息​实​例​是​可​以​在​创​建​连​接​时​决​定​的​。​也​就​是​说​,这​两​个​首​选​项​都​已​经​简​单​设​置​为​了​合​理​的​缺​省​值​。​
本​地​ Guvnor 库​资​源​装​饰​的​首​选​项​
EGT 提​供​的​首​选​项​的​第​二​个​类​别​处​理​和​ Guvnor 库​资​源​相​关​联​的​本​地​资​源​的​外​观​。​既​然​ Guvnor 库​不​是​ SCM 的​替​代​物​,且​ Eclipse 里​的​ SCM 工​具​倾​向​于​装​饰​本​地​资​源​,能​够​控​制​ EGT 装​饰​其​本​地​资​源​以​避​免​和​ SCM 软​件​包​冲​突​是​很​有​用​的​。​在​首​选​项​页​面​的​ “​File Decoration”​ 部​分​里​,你​可​以​选​择​装​饰​图​标​的​位​置​(top right, bottom right, top left, bottom left),或​者​你​可​以​选​择​不​显​示​它​。​在​ "Text" 部​分​,你​可​以​格​式​化​附​加​到​文​件​名​上​的​ Guvnor 元​数​据​:当​本​地​文​件​已​经​发​生​变​动​但​还​未​提​交​会​ Guvnor 库​时​是​否​显​示​一​个​标​记​(>)。​是​否​显​示​修​订​版​本​号​码​。​是​否​显​示​日​期​/时​间​戳​。​在​点​击​了​ “​Apply”​ 或​ “​Ok”​ 后​,对​这​些​首​选​项​的​任​何​修​改​都​是​立​即​生​效​的​。​
阅​读​本​节​以​学​习​规​则​软​件​包​签​名​和​密​钥​库​的​配​置​。​
规​则​软​件​包​签​名​(Rule Package Signing)确​保​了​规​则​软​件​包​在​从​ JBoss 企​业​版​ BRMS 平​台​服​务​器​下​载​到​客​户​端​应​用​程​序​时​不​会​损​坏​或​更​改​。​在​缺​省​情​况​下​,规​则​软​件​包​签​名​是​禁​用​的​。​

重要

红​帽​强​烈​推​荐​在​产​品​环​境​里​启​用​规​则​软​件​包​签​名​。​
规​则​软​件​包​签​名​是​用​公​共​密​钥​加​密​来​实​现​的​。​JDK 命​令​ keytool 用​于​创​建​私​有​密​钥​和​对​应​的​公​共​数​字​证​书​。​用​私​有​密​钥​签​名​的​软​件​包​只​可​以​用​匹​配​的​证​书​来​检​验​。​私​有​密​钥​存​储​在​一​个​名​为​ keystore 的​文​件​里​,服​务​器​使​用​它​来​自​动​为​每​个​软​件​包​签​名​。​密​钥​里​为​每​个​客​户​端​应​用​程​序​可​用​的​公​共​证​书​被​称​为​信​任​库​(truststore)。​信​任​库​里​的​证​书​用​于​检​验​签​名​软​件​包​的​真​实​性​。​在​下​载​过​程​中​损​坏​或​被​修​改​的​规​则​软​件​包​将​被​客​户​端​拒​绝​,因​为​其​签​名​不​再​和​证​书​匹​配​。​
下​面​的​过​程​描​述​了​如​何​为​规​则​软​件​包​签​名​配​置​客​户​端​应​用​程​序​。​这​涉​及​到​设​置​客​户​端​的​几​个​属​性​。​这​些​属​性​可​以​在​程​序​里​通​过​ System.setProperty 设​置​。​org.drools.core.util.KeyStoreHelper 类​包​含​几​个​代​表​这​些​属​性​的​常​量​。​
在​执​行​这​个​任​务​之​前​,你​需​要​:
  • 已​经​安​装​了​ JBoss 企​业​级​ Web 平​台​并​针​对​规​则​软​件​包​签​名​进​行​了​正​确​的​配​置​。​
  • JBoss 企​业​级​ Web 平​台​服​务​器​所​使​用​的​包​含​数​字​证​书​的​信​任​库​的​ URL。​
  • 信​任​库​的​密​码​(如​果​设​置​了​的​话​)。​

过程 11.1. 规​则​软​件​包​签​名​(Rule Package Signing)的​客​户​端​配​置​

  1. 启​用​签​名​

    将​ drools.serialization.sign 属​性​设​置​为​ true。​
    System.setProperty( KeyStoreHelper.PROP_SIGN, "true" );
    Copy to Clipboard Toggle word wrap
  2. 设​置​ TrustStore URL

    设​置​ drools.serialization.public.keyStoreURL 属​性​为​信​任​库​所​在​的​ URL。​如​果​信​任​库​位​于​客​户​端​的​ classpath 里​,这​可​以​通​过​ getClass().getResource() 方​法​来​完​成​。​

    例 11.1. 当​信​任​库​位​于​客​户​端​的​ classpath 里​

    URL trustStoreURL = getClass().getResource( "BRMSTrustStore.keystore" );
    System.setProperty( KeyStoreHelper.PROP_PUB_KS_URL, trustStoreURL.toExternalForm() );
    Copy to Clipboard Toggle word wrap

    例 11.2. 当​信​任​库​位​于​ web 服​务​器​上​

    URL trustStoreURL = new URL("http://brms.intranet/resources/BRMSTrustStore.keystore" );
    System.setProperty( KeyStoreHelper.PROP_PUB_KS_URL, trustStoreURL.toExternalForm() );
    Copy to Clipboard Toggle word wrap

    例 11.3. 当​信​任​库​位​于​本​地​文​件​系​统​里​

    URL trustStoreURL = new URL("file:///mnt/fileserve/rules-server/BRMSTrustStore.keystore" );
    System.setProperty( KeyStoreHelper.PROP_PUB_KS_URL, trustStoreURL.toExternalForm() );
    Copy to Clipboard Toggle word wrap
  3. 可​选​:设​置​密​钥​库​的​密​码​

    通​过​ drools.serialization.public.keyStorePwd 设​置​信​任​库​的​密​码​。​只​有​访​问​信​任​库​需​要​密​码​时​才​要​设​置​这​个​属​性​。​
    System.setProperty( KeyStoreHelper.PROP_PUB_KS_PWD, "sekretPasswordHere" );
    Copy to Clipboard Toggle word wrap

附录 A. 修​订​历​史​记​录​

修订历史
修订 5.2.0-2.4002013-10-31Rüdiger Landmann
Rebuild with publican 4.0.0
修订 5.2.0-22012-07-18Anthony Towns
Rebuild for Publican 3.0
修订 5.2.0-0August 4 2011L Carlon
针​对​ 5.2.0 进​行​更​新​
将​第​ 3 章​(用​户​指​南​)分​成​了​ 3、​4、​5 章​。​
添​加​了​关​于​ Guide Decision Table 的​其​他​信​息​(4.4.4 章​节​)。​
添​加​了​关​于​ Fact Model 的​其​他​信​息​(第​ 5 章​)。​
添​加​了​关​于​ working set 的​章​节​(第​ 6 章​)
修订 5.1.0-0Mon December 13 2010David Le Sage, Darrin Mison
针​对​ 5.1.0 进​行​更​新​
将​安​装​和​管​理​方​面​的​内​容​移​至​各​自​的​手​册​里​
添​加​新​收​件​箱​和​评​论​功​能​的​内​容​(3.9 章​节​)
添​加​针​对​规​则​软​件​包​签​名​功​能​的​客​户​端​配​置​的​内​容​(第​ 5 章​)
修订 5.0.2-0Wed May 5 2010Darrin Mison
针​对​ 5.0.2 进​行​更​新​
BRMS-262 添​加​配​置​日​志​的​内​容​(2.7 章​节​)
BRMS-233 更​新​几​个​截​屏​ (第​ 4 章​)
修订 5.0.1-0Fri Oct 3 2009David Le Sage, Darrin Mison
针​对​ 5.0.1 进​行​更​新​
BRMS-227 - 添​加​ 2.3 本​地​化​章​节​
修订 5.0.0-1Thu 16 Jul 2009Darrin Mison
BRMS-203 - 更​新​所​支​持​的​数​据​库​的​细​节​
修订 5.0.0-0Mon 18 May 2009Darrin Mison
创​建​ 5.0.0

法律通告

Copyright © 2010 Red Hat, Inc..
This manual is derived from the work Drools Guvnor by The Drools Team from the jboss.org Drools project. Further details about Drools can be found at the project's website http://www.jboss.org/drools.
The text of and illustrations in this document are licensed by Red Hat under the Apache Software License, Version 2. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, JBoss, MetaMatrix, Fedora, the Infinity Logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat