專利名稱:實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的系統(tǒng)及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的系統(tǒng)和方法,特別涉及一種真正分離業(yè)務(wù)系統(tǒng)和規(guī)則系統(tǒng)來實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的系統(tǒng)和方法。
背景技術(shù):
隨著企業(yè)信息化及自動(dòng)化程度的提高,企業(yè)內(nèi)信息業(yè)務(wù)對(duì)IT系統(tǒng)的依賴程度也越來越高。但企業(yè)IT部門與具體業(yè)務(wù)部門之間存在矛盾,主要表現(xiàn)為IT部門的軟件開發(fā)人員擅長(zhǎng)編寫代碼,針對(duì)具體業(yè)務(wù)部門提出的要求,使用不同的模塊,用硬代碼將業(yè)務(wù)規(guī)則固化起來實(shí)現(xiàn);但對(duì)于具體業(yè)務(wù)人員來說,很難從詳細(xì)的代碼文檔中獲知相關(guān)的信息,包括代碼創(chuàng)建日期、創(chuàng)建人、相應(yīng)代碼對(duì)應(yīng)的具體業(yè)務(wù)等等,因此,具體業(yè)務(wù)人員只能通過已經(jīng)編輯好的程序進(jìn)行執(zhí)行而無法管理;當(dāng)某些業(yè)務(wù)規(guī)則需要變化時(shí),具體業(yè)務(wù)人員也不得不借助IT部門的人員進(jìn)行修改。這種情況一方面帶來了IT部門人員工作量的增加,以及部門之間進(jìn)行反復(fù)導(dǎo)致的效率降低;另一方面,一些企業(yè)內(nèi)部規(guī)則的變化需要完全展示給IT部門的人員,增加了泄密的風(fēng)險(xiǎn)。
因此,模仿將數(shù)據(jù)從業(yè)務(wù)系統(tǒng)中剝離出來,單獨(dú)作為數(shù)據(jù)庫存在的做法,在IT系統(tǒng)中出現(xiàn)了專門把變化的業(yè)務(wù)規(guī)則從業(yè)務(wù)系統(tǒng)中提取出來作為規(guī)則庫,通過規(guī)則引擎和規(guī)則觸發(fā)接口獨(dú)立的形成規(guī)則系統(tǒng)的情況,其目的是把變化的需求從業(yè)務(wù)系統(tǒng)中分離出來。在軟件技術(shù)上,主要有兩種方法實(shí)現(xiàn)上述規(guī)則系統(tǒng)與業(yè)務(wù)系統(tǒng)的分離第一種規(guī)則系統(tǒng)作為整個(gè)業(yè)務(wù)軟件系統(tǒng)的一個(gè)子系統(tǒng)來實(shí)現(xiàn),比如網(wǎng)絡(luò)防火墻中的過濾規(guī)則,網(wǎng)管系統(tǒng)中的報(bào)警規(guī)則,郵箱收發(fā)工具(如Outlook)中郵件規(guī)則,都是作為各自業(yè)務(wù)系統(tǒng)中的子系統(tǒng)存在的;第二種規(guī)則系統(tǒng)是獨(dú)立的,它和業(yè)務(wù)系統(tǒng)之間通過規(guī)則觸發(fā)接口來連接。比如用來搭建電子商務(wù)平臺(tái)的ILog軟件組件、使用Java開發(fā)的基于Rete算法的規(guī)則引擎Drools等規(guī)則系統(tǒng)。參見圖1,為ILog中規(guī)則系統(tǒng)和業(yè)務(wù)系統(tǒng)的框圖,當(dāng)需要規(guī)則服務(wù)時(shí)規(guī)則觸發(fā)接口啟動(dòng),通過規(guī)則引擎調(diào)用規(guī)則庫的相關(guān)規(guī)則,實(shí)現(xiàn)業(yè)務(wù)處理并返回處理結(jié)果。
上述兩種規(guī)則系統(tǒng)的觸發(fā)方法,目前都是采用在業(yè)務(wù)系統(tǒng)中嵌入事件報(bào)送代碼來實(shí)現(xiàn),比如ILog以及Java規(guī)范JSR94中都是如此,具體方式為在業(yè)務(wù)系統(tǒng)插入手工編寫的事件報(bào)送代碼,來報(bào)送事件給規(guī)則系統(tǒng),如下示例
通過在類定義“CustomerDAO”的程序代碼中嵌入事件報(bào)送代碼“Rule.fire”程序段,實(shí)現(xiàn)在業(yè)務(wù)系統(tǒng)執(zhí)行過程中,報(bào)送事件“CustomerDAO”給規(guī)則系統(tǒng),從而實(shí)現(xiàn)規(guī)則系統(tǒng)的觸發(fā)。通過這種方式,IT人員只需要搭建業(yè)務(wù)框架,并嵌入事件報(bào)送代碼,而將真正的邏輯規(guī)則放在規(guī)則系統(tǒng)中,因此系統(tǒng)結(jié)構(gòu)變得簡(jiǎn)單;同時(shí),規(guī)則系統(tǒng)中相關(guān)的規(guī)則庫中存放小的程序邏輯段,該邏輯段可以通過描述性語言編寫,可以被有效地管理,如規(guī)則查詢、權(quán)限控制、實(shí)時(shí)部署、規(guī)則共享、版本管理等,因此業(yè)務(wù)人員有機(jī)會(huì)來接觸,并通過工具來查詢、修改甚至部署他的規(guī)則。
但是,上述實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的方法同時(shí)具有以下缺陷第一、在業(yè)務(wù)系統(tǒng)的代碼中到處插入這樣的事件報(bào)送代碼將消耗開發(fā)人員大量的勞動(dòng)和時(shí)間;第二、在代碼中需要固定規(guī)則集編碼(或稱為規(guī)則庫編碼),需要固定輸入?yún)?shù)對(duì)象,需要固定返回結(jié)果對(duì)象,這些使得相關(guān)修改規(guī)則庫、輸入?yún)?shù)對(duì)象、返回對(duì)象結(jié)構(gòu)的工作非常困難,難以期望在業(yè)務(wù)規(guī)則被修改時(shí)迅速實(shí)現(xiàn)業(yè)務(wù)系統(tǒng)中的相應(yīng)變化;第三、一旦業(yè)務(wù)系統(tǒng)部署之后,對(duì)應(yīng)部分插入的代碼就很難改變,當(dāng)業(yè)務(wù)規(guī)則發(fā)生變化時(shí),對(duì)應(yīng)的業(yè)務(wù)系統(tǒng)中的接口和參數(shù)等就需要發(fā)生變化,即使不考慮即時(shí)性,修改這種像蜘蛛網(wǎng)一樣布滿各個(gè)模塊的代碼也是難以想象。
同時(shí),在目前實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的方法中,除了采用上述的手工代碼進(jìn)行觸發(fā)以外,在規(guī)則系統(tǒng)中定義事件類型和具體事件所用到的參數(shù)也是手工設(shè)定的,具體方式為在規(guī)則系統(tǒng)中,使用系統(tǒng)提供的界面和配置文件信息定義事件類型和具體事件。
綜上所述,現(xiàn)有通過對(duì)業(yè)務(wù)系統(tǒng)和規(guī)則系統(tǒng)進(jìn)行分離來實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的方法主要有以下缺點(diǎn)1、需要在業(yè)務(wù)代碼中手工插入事件報(bào)送代碼,增加開發(fā)人員工作量,并使得觸發(fā)所需耦合度加大;2、業(yè)務(wù)系統(tǒng)開發(fā)人員需要在系統(tǒng)開發(fā)階段對(duì)業(yè)務(wù)規(guī)則有一定了解,包括所用規(guī)則集及參數(shù),增加了開發(fā)人員難度;3、后期規(guī)則發(fā)生變化,比如需要修改規(guī)則庫或修改輸入輸出參數(shù)時(shí),仍然需要修改業(yè)務(wù)系統(tǒng)中的相應(yīng)代碼,使得需求響應(yīng)速度降低,同時(shí)耗費(fèi)了大量的勞動(dòng);4、開發(fā)業(yè)務(wù)系統(tǒng)代碼和定義規(guī)則系統(tǒng)規(guī)則庫屬于重復(fù)勞動(dòng),容易參數(shù)錯(cuò)誤或遺漏。
發(fā)明內(nèi)容
本發(fā)明的一個(gè)目的是針對(duì)上述現(xiàn)有技術(shù)中的缺陷,提供一種實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的系統(tǒng),通過加入對(duì)業(yè)務(wù)事件進(jìn)行過濾的模塊,實(shí)現(xiàn)無需手工編寫事件報(bào)送代碼的目的。
本發(fā)明的另一目的是針對(duì)上述現(xiàn)有技術(shù)中的缺陷,提供一種實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的方法,通過在業(yè)務(wù)系統(tǒng)中對(duì)報(bào)送事件進(jìn)行過濾,避免在編寫業(yè)務(wù)系統(tǒng)代碼過程中進(jìn)行規(guī)則開發(fā)定義工作,有利于進(jìn)行規(guī)則調(diào)整,降低錯(cuò)誤率,減少重復(fù)性工作,實(shí)現(xiàn)業(yè)務(wù)系統(tǒng)和規(guī)則系統(tǒng)的分離。
為實(shí)現(xiàn)上述目的,本發(fā)明提供了一種實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的系統(tǒng),包括一業(yè)務(wù)系統(tǒng)及與所述業(yè)務(wù)系統(tǒng)連接的一規(guī)則系統(tǒng),所述業(yè)務(wù)系統(tǒng)中的至少一個(gè)業(yè)務(wù)模塊與一事件處理器連接,用于報(bào)送業(yè)務(wù)事件及參數(shù)數(shù)據(jù);所述事件處理器與一觸發(fā)事件類型列表模塊連接,用于接收所述業(yè)務(wù)模塊報(bào)送的業(yè)務(wù)事件及參數(shù)數(shù)據(jù),并根據(jù)所述觸發(fā)事件類型列表模塊中的觸發(fā)事件類型信息過濾觸發(fā)事件;所述事件處理器還與所述規(guī)則系統(tǒng)連接,用于封裝和發(fā)送所述觸發(fā)事件給所述規(guī)則系統(tǒng)。
為實(shí)現(xiàn)上述目的,本發(fā)明還提供了一種實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的方法,包括以下步驟步驟1、業(yè)務(wù)模塊加載時(shí),向所述業(yè)務(wù)模塊中自動(dòng)加入事件報(bào)送代碼;步驟2、業(yè)務(wù)模塊報(bào)送業(yè)務(wù)事件到事件管理器;步驟3、所述事件管理器根據(jù)觸發(fā)事件類型列表模塊中的觸發(fā)事件類型信息,判斷所述業(yè)務(wù)事件是否為能夠觸發(fā)規(guī)則系統(tǒng)的觸發(fā)事件,是則執(zhí)行步驟4,否則向業(yè)務(wù)模塊返回?zé)o效指令并結(jié)束;步驟4、所述事件管理器發(fā)送所述觸發(fā)事件至規(guī)則系統(tǒng);步驟5、所述規(guī)則系統(tǒng)搜索匹配所述觸發(fā)事件的規(guī)則定義,根據(jù)所述規(guī)則定義及具體參數(shù)數(shù)據(jù)處理所述觸發(fā)事件,并將所述觸發(fā)事件的處理結(jié)果返回給所述事件管理器;步驟6、所述事件管理器將所述處理結(jié)果返回給所述業(yè)務(wù)模塊,結(jié)束。
由上述技術(shù)方案可知,本發(fā)明基于現(xiàn)有的自定義類加載技術(shù)或Java語言代理類技術(shù),采用事件管理器進(jìn)行觸發(fā)事件過濾,具有以下有益效果1、對(duì)觸發(fā)事件在業(yè)務(wù)系統(tǒng)之外進(jìn)行過濾,業(yè)務(wù)系統(tǒng)開發(fā)人員無需在系統(tǒng)開發(fā)階段對(duì)業(yè)務(wù)規(guī)則進(jìn)行了解,因此無需進(jìn)行重復(fù)性的規(guī)則開發(fā)定義工作;2、業(yè)務(wù)規(guī)則在規(guī)則系統(tǒng)開發(fā)階段獨(dú)立進(jìn)行,便于修改,同時(shí)對(duì)規(guī)則參數(shù)的變化能夠?qū)崿F(xiàn)即時(shí)響應(yīng);3、自動(dòng)報(bào)送觸發(fā)事件,無需手工編寫事件報(bào)送代碼,降低了工作量和系統(tǒng)耦合度要求;4、實(shí)現(xiàn)了業(yè)務(wù)系統(tǒng)和規(guī)則系統(tǒng)的分離。
下面通過附圖和實(shí)施例,對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。
圖1為現(xiàn)有技術(shù)中規(guī)則系統(tǒng)的框圖;圖2為本發(fā)明實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的系統(tǒng)實(shí)施例1的框圖;圖3為圖2所示系統(tǒng)中觸發(fā)事件的層次示意圖;圖4為本發(fā)明實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的系統(tǒng)實(shí)施例2的框圖;圖5為本發(fā)明實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的方法實(shí)施例的流程圖;圖6為圖5所示實(shí)施例中參考注釋自動(dòng)加入事件報(bào)送代碼的方法示意圖;圖7為本發(fā)明采用Java自定義類加入事件報(bào)送代碼的方法實(shí)施例的流程圖;圖8為本發(fā)明利用XDoclet技術(shù)添加注釋信息的方法實(shí)施例的流程圖。
具體實(shí)施例方式
為了實(shí)現(xiàn)把業(yè)務(wù)系統(tǒng)中的觸發(fā)事件傳遞到規(guī)則系統(tǒng),需要在業(yè)務(wù)系統(tǒng)中加入事件報(bào)告部件,并對(duì)事件進(jìn)行統(tǒng)一處理歸口,再傳遞到規(guī)則系統(tǒng)。為了減少冗余事件的傳遞,規(guī)則系統(tǒng)要能夠把需要的事件類型告之業(yè)務(wù)系統(tǒng),不需要的事件則不捕獲不傳遞。本發(fā)明實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的系統(tǒng)的實(shí)施例1如圖2所示,由業(yè)務(wù)系統(tǒng)1和規(guī)則系統(tǒng)2組成,業(yè)務(wù)系統(tǒng)1具體包括多個(gè)業(yè)務(wù)模塊11、一事件管理器12和觸發(fā)事件類型列表模塊13,業(yè)務(wù)模塊11以及觸發(fā)事件類型列表模塊13分別與事件管理器12連接;規(guī)則系統(tǒng)2具體包括規(guī)則觸發(fā)接口21、規(guī)則引擎22和規(guī)則庫23。
其中,編號(hào)從1到N的業(yè)務(wù)模塊11分別執(zhí)行各自功能操作,比如處理outlook的業(yè)務(wù)模塊。該業(yè)務(wù)模塊11可使用計(jì)算機(jī)語言編寫,比如Java;也可以是web形式的應(yīng)用程序。該計(jì)算機(jī)語言或應(yīng)用程序搭建了功能框架,涉及到具體規(guī)則限定的內(nèi)容通過自定義類嵌入。
在本發(fā)明中,編號(hào)從1到N的業(yè)務(wù)模塊11加載時(shí),Java環(huán)境下啟動(dòng)一個(gè)加載線程,通過Java自定義類加載方法或Java語言代理類(即Java字節(jié)碼指令,Java Bytecode Instrumentation,簡(jiǎn)稱Java BCI)方法在所述業(yè)務(wù)模塊11中自動(dòng)加入事件報(bào)送代碼。
當(dāng)業(yè)務(wù)模塊11執(zhí)行至自定義類代碼或者其他跳出或中斷操作代碼等業(yè)務(wù)事件時(shí),將相關(guān)代碼或Web形式的應(yīng)用程序傳送給事件管理器12。
事件管理器12對(duì)業(yè)務(wù)事件進(jìn)行判斷過濾,具體為事件管理器12檢查觸發(fā)事件類型列表模塊13,根據(jù)模塊13中的觸發(fā)事件類型信息進(jìn)行判斷,如果該業(yè)務(wù)事件為能夠觸發(fā)規(guī)則系統(tǒng)的觸發(fā)事件,由事件管理器12將該觸發(fā)事件及參數(shù)數(shù)據(jù)通過規(guī)則觸發(fā)接口21傳送給規(guī)則系統(tǒng)2。
由于在一個(gè)完整的業(yè)務(wù)系統(tǒng)1中,具有不同層次的觸發(fā)事件存在,從網(wǎng)絡(luò)硬件底層一直到前端的用戶界面和用戶操作事件,如圖3所示。比如網(wǎng)絡(luò)防火墻中的規(guī)則系統(tǒng)關(guān)注的是網(wǎng)絡(luò)事件、計(jì)算機(jī)上的殺毒軟件系統(tǒng)可能關(guān)注的是一些操作系統(tǒng)事件、其它層次也類似。一般規(guī)則系統(tǒng)都不會(huì)關(guān)注所有的事件,而會(huì)專注于某一層。對(duì)于企業(yè)的一個(gè)業(yè)務(wù)系統(tǒng)1(如電信的BOSS系統(tǒng)),則關(guān)注的是業(yè)務(wù)系統(tǒng)框架、業(yè)務(wù)模塊及用戶界面的一些事件,則這些事件就作為觸發(fā)事件類型信息記載于規(guī)則系統(tǒng)2,并可被隨時(shí)修改限定??捎梢?guī)則系統(tǒng)2同步觸發(fā)事件類型信息至觸發(fā)事件類型列表模塊13中,也可以由系統(tǒng)管理人員添加入觸發(fā)事件類型列表模塊13。
對(duì)于觸發(fā)事件,事件管理器12中按照規(guī)則觸發(fā)接口21要求的數(shù)據(jù)格式封裝該觸發(fā)事件并發(fā)送。
規(guī)則觸發(fā)接口21將觸發(fā)事件接收至規(guī)則系統(tǒng)2中,由規(guī)則引擎22根據(jù)具體觸發(fā)事件的類型,在規(guī)則庫23中搜索與該類型相匹配的規(guī)則定義,根據(jù)匹配的規(guī)則定義和參數(shù)數(shù)據(jù)進(jìn)行處理,并返回處理結(jié)果給事件管理器12。業(yè)務(wù)模塊11根據(jù)事件管理器返回的結(jié)果執(zhí)行當(dāng)前類,并繼續(xù)向下執(zhí)行業(yè)務(wù)代碼。
該規(guī)則庫23用于保存觸發(fā)事件類型信息以及與所述觸發(fā)事件類型信息相關(guān)聯(lián)的具體規(guī)則定義。為了完成規(guī)則的定義,需要知道規(guī)則所依賴的觸發(fā)事件的具體參數(shù)數(shù)據(jù),如結(jié)構(gòu)數(shù)據(jù)等。例如在增加客戶的方法中,規(guī)則系統(tǒng)就需要事先了解“客戶”這個(gè)事件類型,“客戶”類型的相關(guān)參數(shù)數(shù)據(jù)來進(jìn)行處理。
參數(shù)數(shù)據(jù)的定義可以采用傳統(tǒng)的方法,在規(guī)則系統(tǒng)中逐個(gè)的定義這樣的參數(shù)數(shù)據(jù)開發(fā)人員首先在規(guī)則系統(tǒng)中手工的添加客戶增加事件定義和客戶類的參數(shù)數(shù)據(jù),然后給規(guī)則定義人員使用。
進(jìn)行參數(shù)數(shù)據(jù)定義的更好的方法是利用XDoclet方法或者java 5.0中新的注解方法來完成參數(shù)屬性信息數(shù)據(jù)的定義。通過使用這兩種方法,可以實(shí)現(xiàn)在編寫業(yè)務(wù)模塊代碼時(shí),通過添加注釋信息,就同時(shí)完成了規(guī)則所需參數(shù)數(shù)據(jù)的定義。示例如下
在編譯打包該業(yè)務(wù)模塊時(shí),規(guī)則系統(tǒng)2就在編譯過程中對(duì)源代碼進(jìn)行分析,提取規(guī)則所需參數(shù)數(shù)據(jù)信息,加入到規(guī)則庫23中。這樣就無需在規(guī)則系統(tǒng)2中重新進(jìn)行定義,同時(shí),對(duì)應(yīng)的客戶增加事件也作為觸發(fā)事件類型信息被存儲(chǔ)至規(guī)則系統(tǒng)2中。則規(guī)則系統(tǒng)2無須分別定義不同的繁雜參數(shù)數(shù)據(jù)以應(yīng)付各種情況,而可以直接從待處理的觸發(fā)事件代碼的注釋信息中提取需要的參數(shù)數(shù)據(jù)。
本發(fā)明的實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的系統(tǒng)的實(shí)施例2,如圖4所示,由業(yè)務(wù)系統(tǒng)1和規(guī)則系統(tǒng)2組成,業(yè)務(wù)系統(tǒng)1具體包括多個(gè)業(yè)務(wù)模塊11、一事件管理器12和觸發(fā)事件類型列表模塊13,規(guī)則系統(tǒng)2具體包括規(guī)則觸發(fā)接口21、規(guī)則引擎22和規(guī)則庫23和數(shù)據(jù)同步模塊24,規(guī)則系統(tǒng)2中規(guī)則庫23通過數(shù)據(jù)同步模塊24向業(yè)務(wù)系統(tǒng)1中的觸發(fā)事件類型列表模塊13同步觸發(fā)事件類型信息。。
該觸發(fā)事件類型列表模塊13中的觸發(fā)事件類型信息由規(guī)則系統(tǒng)2進(jìn)行同步,同步方式為通過數(shù)據(jù)同步模塊24進(jìn)行規(guī)則庫23中觸發(fā)事件類型信息與觸發(fā)事件類型列表模塊13中觸發(fā)事件類型信息的同步;可以定期更新,也可以在規(guī)則庫23中的觸發(fā)事件類型信息被管理人員修改后即時(shí)進(jìn)行更新。
基于上述系統(tǒng)的實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的方法的實(shí)施例,參見圖5,包括以下步驟步驟1、執(zhí)行功能操作的業(yè)務(wù)模塊加載;步驟2、向所述業(yè)務(wù)模塊中自動(dòng)加入事件報(bào)送代碼,比如可由Java線程來執(zhí)行自動(dòng)加入,由于無需手工編寫事件報(bào)送代碼,降低了工作量和系統(tǒng)耦合度要求;步驟3、業(yè)務(wù)模塊報(bào)送業(yè)務(wù)事件到事件管理器;步驟4、所述事件管理器根據(jù)觸發(fā)事件類型列表模塊中的觸發(fā)事件類型信息,判斷所述業(yè)務(wù)事件是否為能夠觸發(fā)規(guī)則系統(tǒng)的觸發(fā)事件,是則執(zhí)行步驟5,否則執(zhí)行步驟6;本步驟中通過將觸發(fā)事件的判斷從業(yè)務(wù)模塊中分離出來,使業(yè)務(wù)系統(tǒng)開發(fā)人員無需在系統(tǒng)開發(fā)階段對(duì)業(yè)務(wù)規(guī)則進(jìn)行了解,因此無需進(jìn)行重復(fù)性的規(guī)則開發(fā)定義工作;步驟5、所述事件管理器將所述觸發(fā)事件封裝發(fā)送至規(guī)則系統(tǒng);步驟6、所述規(guī)則系統(tǒng)搜索匹配所述觸發(fā)事件的規(guī)則定義,根據(jù)所述規(guī)則定義及參數(shù)數(shù)據(jù)處理該觸發(fā)事件,并將所述觸發(fā)事件的處理完成結(jié)果返回給事件管理器;其中,參數(shù)數(shù)據(jù)可以由開發(fā)人員手工添加,也可以通過在觸發(fā)事件中添加注釋實(shí)現(xiàn);對(duì)于通過在所述業(yè)務(wù)事件中添加注釋信息定義所述業(yè)務(wù)事件的參數(shù)數(shù)據(jù)的情況,該注釋信息為利用XDoclet方法或Java注解方<p>表1 優(yōu)選發(fā)明實(shí)例表
除了對(duì)業(yè)務(wù)代碼進(jìn)行這樣方式的攔截外,也可以對(duì)Web形式的應(yīng)用程序建立攔截,比如對(duì)所有提交的表單進(jìn)行攔截,只要繼承javax.servlet.Filter接口,實(shí)現(xiàn)自定義的Filter,然后在web.xml中注冊(cè)接口。
參見圖6,是業(yè)務(wù)模塊加載時(shí)采用Java BCI方法自動(dòng)加入事件報(bào)送代碼的示意圖,特別是根據(jù)加入的注釋自動(dòng)加入事件報(bào)送代碼,這里的類轉(zhuǎn)換器就起到了一個(gè)線程的作用。
步驟3中所述發(fā)送之前還包括所述事件管理器按照規(guī)則觸發(fā)接口要求的數(shù)據(jù)格式對(duì)所述觸發(fā)事件進(jìn)行封裝。
步驟4可具體為步驟41、所述規(guī)則系統(tǒng)接收所述觸發(fā)事件;步驟42、所述規(guī)則系統(tǒng)的規(guī)則引擎根據(jù)所述觸發(fā)事件類型信息,在規(guī)則庫中搜索與所述觸發(fā)事件類型信息相匹配的規(guī)則定義;步驟43、所述規(guī)則系統(tǒng)的規(guī)則引擎根據(jù)所述規(guī)則定義及參數(shù)數(shù)據(jù)進(jìn)行所述觸發(fā)事件的處理,該處理方法采用現(xiàn)有規(guī)則系統(tǒng)的處理方法,比如Rete算法;步驟44、所述規(guī)則系統(tǒng)的規(guī)則引擎返回所述處理結(jié)果給所述事件管理器。
在本實(shí)施例中,規(guī)則系統(tǒng)定時(shí)更新所述業(yè)務(wù)系統(tǒng)中的觸發(fā)事件類型信息,或者規(guī)則系統(tǒng)在觸發(fā)事件類型信息修改后更新所述業(yè)務(wù)系統(tǒng)中的觸發(fā)事件類型信息。更具體的,規(guī)則系統(tǒng)更新的可以是業(yè)務(wù)系統(tǒng)中觸發(fā)事件類型列表模塊中的觸發(fā)事件類型信息。
如圖7所示,為實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的方法的一采用Java自定義類加載技術(shù)的實(shí)施例,包括以下步驟步驟101、規(guī)則系統(tǒng)通過數(shù)據(jù)同步裝置更新觸發(fā)事件類型列表模塊中觸發(fā)事件類型列表;步驟102、執(zhí)行功能操作的業(yè)務(wù)模塊加載,其中包括CustomerDAO類,具有如下代碼
步驟103、Java線程采用Java自定義類加載技術(shù)向該CustomerDAO類中加入自動(dòng)報(bào)送代碼,如下
加入后和在java源代碼中加入的方法一樣,但卻無需手工編程實(shí)現(xiàn);步驟104、當(dāng)業(yè)務(wù)模塊執(zhí)行到該CustomerDAO類時(shí),將其報(bào)送到事件管理器;步驟105、事件管理器封裝并調(diào)用規(guī)則觸發(fā)接口將所述觸發(fā)事件發(fā)送至規(guī)則系統(tǒng);步驟106、所述規(guī)則系統(tǒng)通過規(guī)則觸發(fā)接口接收該觸發(fā)事件;步驟107、所述規(guī)則系統(tǒng)調(diào)用規(guī)則引擎,根據(jù)所述觸發(fā)事件類型信息在規(guī)則庫中搜索與所述觸發(fā)事件類型信息相匹配的規(guī)則定義;步驟108、所述規(guī)則系統(tǒng)根據(jù)所述規(guī)則定義及參數(shù)數(shù)據(jù)進(jìn)行觸發(fā)事件的處理,該參數(shù)數(shù)據(jù)可以為手工添加;步驟109、所述規(guī)則系統(tǒng)將處理完成結(jié)果返回給所述事件管理器;步驟110、事件管理器將所述處理完成結(jié)果返回給所述業(yè)務(wù)模塊。
其中,在步驟103之前,還可以通過Java環(huán)境向業(yè)務(wù)模塊添加注釋信息,從而定義業(yè)務(wù)事件的具體參數(shù)數(shù)據(jù),比如事件攔截可以使用java中的JVMPI和JVMTI技術(shù),使用自定義的注釋標(biāo)記語法。
如圖8所示,為本發(fā)明實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的方法的又一實(shí)施例,本實(shí)施例中利用XDoclet技術(shù)進(jìn)行業(yè)務(wù)模塊的注釋,包括以下步驟步驟201、執(zhí)行功能操作的業(yè)務(wù)模塊加載;該業(yè)務(wù)事件為使用XDoclet技術(shù)進(jìn)行注釋信息添加的類CustomerDAO,該業(yè)務(wù)事件中包括注釋信息定義的參數(shù)數(shù)據(jù);
步驟202、Java進(jìn)程向業(yè)務(wù)模塊中自動(dòng)加入事件報(bào)送代碼,可參見上一實(shí)施例的步驟103;步驟203、業(yè)務(wù)模塊報(bào)送所述業(yè)務(wù)事件到事件管理器;步驟204、事件管理器檢查觸發(fā)事件類型列表,判斷該類CustomerDAO為能夠觸發(fā)規(guī)則系統(tǒng)的觸發(fā)事件;步驟205、事件管理器將類CustomerDAO封裝并發(fā)送至規(guī)則系統(tǒng);步驟206、規(guī)則系統(tǒng)通過規(guī)則觸發(fā)接口接收該觸發(fā)事件,該觸發(fā)事件中包含了參數(shù)數(shù)據(jù);步驟207、規(guī)則系統(tǒng)調(diào)用規(guī)則引擎根據(jù)所述觸發(fā)事件類型信息,在規(guī)則庫中搜索與所述觸發(fā)事件類型信息相匹配的規(guī)則定義;步驟208、規(guī)則引擎根據(jù)所述規(guī)則定義及觸發(fā)事件中的參數(shù)數(shù)據(jù)進(jìn)行觸發(fā)事件的處理,該處理方法為現(xiàn)有規(guī)則系統(tǒng)進(jìn)行觸發(fā)事件處理的方法;步驟209、所述規(guī)則系統(tǒng)返回處理完成結(jié)果給所述事件管理器;步驟210、事件管理器將所述處理完成結(jié)果返回給所述業(yè)務(wù)模塊。
其中,步驟201中,也可以利用Java注解技術(shù)添加所述注釋信息。
在本實(shí)施中,如果系統(tǒng)工作人員對(duì)規(guī)則系統(tǒng)中的觸發(fā)事件類型列表進(jìn)行了修改,則規(guī)則系統(tǒng)即時(shí)進(jìn)行觸發(fā)事件類型列表模塊中觸發(fā)事件類型列表的更新;同時(shí),規(guī)則系統(tǒng)也定時(shí)進(jìn)行觸發(fā)事件類型列表模塊更新。
最后所應(yīng)說明的是,以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案而非限制,盡管參照較佳實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,可以對(duì)本發(fā)明的技術(shù)方案進(jìn)行修改或者等同替換,而不脫離本發(fā)明技術(shù)方案的精神和范圍。
權(quán)利要求
1.一種實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的系統(tǒng),包括一業(yè)務(wù)系統(tǒng)及與所述業(yè)務(wù)系統(tǒng)連接的一規(guī)則系統(tǒng),其特征在于所述業(yè)務(wù)系統(tǒng)中的至少一個(gè)業(yè)務(wù)模塊與一事件處理器連接,用于報(bào)送業(yè)務(wù)事件及參數(shù)數(shù)據(jù);所述事件處理器與一觸發(fā)事件類型列表模塊連接,用于接收所述業(yè)務(wù)模塊報(bào)送的業(yè)務(wù)事件及參數(shù)數(shù)據(jù),并根據(jù)所述觸發(fā)事件類型列表模塊中的觸發(fā)事件類型信息過濾觸發(fā)事件;所述事件處理器還與所述規(guī)則系統(tǒng)連接,用于封裝和發(fā)送所述觸發(fā)事件給所述規(guī)則系統(tǒng)。
2.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于所述事件管理器與所述規(guī)則系統(tǒng)的一規(guī)則觸發(fā)接口連接,該規(guī)則觸發(fā)接口用于接收所述事件管理器發(fā)送的觸發(fā)事件,并將處理結(jié)果發(fā)送給所述事件管理器;所述規(guī)則觸發(fā)接口還與一規(guī)則引擎連接,用于將所述觸發(fā)事件發(fā)送給所述規(guī)則引擎,并從規(guī)則引擎接收處理結(jié)果;所述規(guī)則引擎與一規(guī)則庫連接,用于根據(jù)所述規(guī)則庫進(jìn)行觸發(fā)事件的匹配處理;所述規(guī)則庫與一數(shù)據(jù)同步模塊連接,用于保存觸發(fā)事件類型信息以及與所述觸發(fā)事件類型信息相關(guān)聯(lián)的具體規(guī)則定義,并通過所述數(shù)據(jù)同步模塊同步出去;所述數(shù)據(jù)同步模塊與所述觸發(fā)事件類型列表模塊連接,用于向所述觸發(fā)事件類型列表模塊同步觸發(fā)事件類型信息。
3.一種實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的方法,其特征在于包括以下步驟步驟1、業(yè)務(wù)模塊加載時(shí),向所述業(yè)務(wù)模塊中自動(dòng)加入事件報(bào)送代碼;步驟2、業(yè)務(wù)模塊報(bào)送業(yè)務(wù)事件到事件管理器;步驟3、所述事件管理器根據(jù)觸發(fā)事件類型列表模塊中的觸發(fā)事件類型信息,判斷所述業(yè)務(wù)事件是否為能夠觸發(fā)規(guī)則系統(tǒng)的觸發(fā)事件,是則執(zhí)行步驟4,否則向業(yè)務(wù)模塊返回?zé)o效指令并結(jié)束;步驟4、所述事件管理器發(fā)送所述觸發(fā)事件至規(guī)則系統(tǒng);步驟5、所述規(guī)則系統(tǒng)搜索匹配所述觸發(fā)事件的規(guī)則定義,根據(jù)所述規(guī)則定義及具體參數(shù)數(shù)據(jù)處理所述觸發(fā)事件,并將所述觸發(fā)事件的處理結(jié)果返回給所述事件管理器;步驟6、所述事件管理器將所述處理結(jié)果返回給所述業(yè)務(wù)模塊,結(jié)束。
4.根據(jù)權(quán)利要求3所述的實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的方法,其特征在于所述步驟1之前,還包括通過在所述業(yè)務(wù)事件中添加注釋信息來定義所述業(yè)務(wù)事件的具體參數(shù)數(shù)據(jù)的步驟。
5.根據(jù)權(quán)利要求4所述的實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的方法,其特征在于利用XDoclet方法或Java注解方法將所述注釋信息添加到所述業(yè)務(wù)事件中。
6.根據(jù)權(quán)利要求3所述的實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的方法,其特征在于所述步驟1之前,還包括在所述規(guī)則系統(tǒng)中手工添加所述業(yè)務(wù)事件的具體參數(shù)數(shù)據(jù)的步驟。
7.根據(jù)權(quán)利要求3所述的實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的方法,其特征在于所述步驟1中所述自動(dòng)加入事件報(bào)送代碼為通過Java自定義類加載方法或Java語言代理類方法在所述業(yè)務(wù)模塊中自動(dòng)加入事件報(bào)送代碼。
8.根據(jù)權(quán)利要求3所述的實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的方法,其特征在于所述步驟3中所述發(fā)送所述觸發(fā)事件至規(guī)則系統(tǒng)之前還包括所述事件管理器按照規(guī)則觸發(fā)接口要求的數(shù)據(jù)格式對(duì)所述觸發(fā)事件進(jìn)行封裝。
9.根據(jù)權(quán)利要求3所述的實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的方法,其特征在于所述步驟4具體為步驟41、所述規(guī)則系統(tǒng)接收所述觸發(fā)事件;步驟42、所述規(guī)則系統(tǒng)的規(guī)則引擎根據(jù)所述觸發(fā)事件類型信息,在規(guī)則庫中搜索與所述觸發(fā)事件類型信息相匹配的規(guī)則定義;步驟43、所述規(guī)則系統(tǒng)的規(guī)則引擎根據(jù)所述規(guī)則定義及參數(shù)數(shù)據(jù)進(jìn)行所述觸發(fā)事件的處理;步驟44、所述規(guī)則系統(tǒng)的規(guī)則引擎返回所述處理結(jié)果給所述事件管理器。
10.根據(jù)權(quán)利要求3所述的實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的方法,其特征在于所述規(guī)則系統(tǒng)還定時(shí)更新所述業(yè)務(wù)系統(tǒng)中的觸發(fā)事件類型信息。
11.根據(jù)權(quán)利要求3所述的實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的方法,其特征在于所述規(guī)則系統(tǒng)在觸發(fā)事件類型信息修改后更新所述業(yè)務(wù)系統(tǒng)中的觸發(fā)事件類型信息。
全文摘要
本發(fā)明公開了實(shí)現(xiàn)規(guī)則系統(tǒng)觸發(fā)的系統(tǒng)及方法,該系統(tǒng)包括業(yè)務(wù)系統(tǒng)及與業(yè)務(wù)系統(tǒng)連接的規(guī)則系統(tǒng),業(yè)務(wù)系統(tǒng)中的業(yè)務(wù)模塊與一事件處理器連接;事件處理器與一觸發(fā)事件類型列表模塊連接,接收業(yè)務(wù)模塊報(bào)送的業(yè)務(wù)事件,并根據(jù)觸發(fā)事件類型信息過濾觸發(fā)事件;事件處理器還與規(guī)則系統(tǒng)連接,封裝和發(fā)送觸發(fā)事件。該方法是,業(yè)務(wù)模塊加載時(shí)自動(dòng)加入事件報(bào)送代碼,事件管理器判斷業(yè)務(wù)事件是否為觸發(fā)事件,是則發(fā)送至規(guī)則系統(tǒng)處理。本發(fā)明無需在系統(tǒng)開發(fā)階段了解業(yè)務(wù)規(guī)則及重復(fù)進(jìn)行規(guī)則開發(fā)定義工作;業(yè)務(wù)規(guī)則便于修改,對(duì)規(guī)則參數(shù)的變化實(shí)現(xiàn)即時(shí)響應(yīng);無需手工編寫事件報(bào)送代碼,降低了工作量和系統(tǒng)耦合度要求;實(shí)現(xiàn)了業(yè)務(wù)系統(tǒng)和規(guī)則系統(tǒng)的分離。
文檔編號(hào)G06Q10/00GK1866283SQ200510120818
公開日2006年11月22日 申請(qǐng)日期2005年12月13日 優(yōu)先權(quán)日2005年12月13日
發(fā)明者陶建波 申請(qǐng)人:華為技術(shù)有限公司