專利名稱:業(yè)務(wù)開發(fā)方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機領(lǐng)域,尤其涉及一種業(yè)務(wù)開發(fā)方法及裝置。
背景技術(shù):
JavaScript是一種基于對象和事件驅(qū)動并且具有相對安全性的客戶端腳本語言,被廣泛用于WEB開發(fā)給HTML (Hypertext Markup Language,超文本標記語言)網(wǎng)頁添加動態(tài)功能。Mozilla Rhino是一個完全使用Java語言編寫的開源JavaScript實現(xiàn),常被用于Java程序中,為最終用戶提供腳本化能力。SOA (Service Oriented Architecture,面向服務(wù)架構(gòu))是一個組件模型,用于將應(yīng)用程序中不同的功能單元(即服務(wù))通過定義良好的接口和契約聯(lián)系起來。ESB (Enterprise Service Bus,企業(yè)服務(wù)總線)為企業(yè)及應(yīng)用中分散的服務(wù)提供定位,路由,集成,管理等功能,是SOA系統(tǒng)中核心基礎(chǔ)設(shè)施。在SOA系統(tǒng)中,組成系統(tǒng)的所有組件都被看成是服務(wù),服務(wù)層是SOA的基礎(chǔ),所有的業(yè)務(wù)邏輯都通過服務(wù)來實現(xiàn),為了快速滿足靈活多變的業(yè)務(wù)需求,維護人員需要開發(fā)不同的服務(wù)來實現(xiàn),這樣就出現(xiàn)了不斷開發(fā)新需求的問題,常見的處理方式有如下兩種1,重新定義,開發(fā)業(yè)務(wù)服務(wù)來滿足新需求。這種方式是最常用的方式,主要的缺點是一方面整個系統(tǒng)中服務(wù)的復(fù)用率不高,隨著業(yè)務(wù)需求的不斷增加,業(yè)務(wù)模塊重復(fù)開發(fā)嚴重,造成資源浪費;另一方面業(yè)務(wù)模塊界限不清,導(dǎo)致維護難度增大;2,對現(xiàn)有的接口進行改造來滿足新需求。這種方式對原服務(wù)產(chǎn)生潛在影響,增加了原服務(wù)的復(fù)雜度,需要重新進行回歸測試,同時也增加維護難度。在軟件工程中,“高內(nèi)聚低耦合”一直是軟件系統(tǒng)建設(shè)追求的技術(shù)目標,高內(nèi)聚低耦合的系統(tǒng)具有更好的重用性、維護性和擴展性。在SOA系統(tǒng)中,所有的業(yè)務(wù)邏輯都是由服務(wù)這一原子組件實現(xiàn),每個業(yè)務(wù)都是由單獨的服務(wù)來實現(xiàn),但服務(wù)與服務(wù)不能互相調(diào)用,導(dǎo)致系統(tǒng)中的服務(wù)越來越多,維護難度增大。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種業(yè)務(wù)開發(fā)方法及裝置,提高業(yè)務(wù)需求的處理速度,提高原子服務(wù)的復(fù)用率。為解決上述技術(shù)問題,本發(fā)明提出了一種業(yè)務(wù)開發(fā)方法,包括獲取與業(yè)務(wù)需求相關(guān)的原子服務(wù);將所述原子服務(wù)組裝成復(fù)合服務(wù);發(fā)布所述復(fù)合服務(wù)。進一步地,上述業(yè)務(wù)開發(fā)方法還可具有以下特點,在所述發(fā)布所述復(fù)合服務(wù)之后還包括運行所述復(fù)合服務(wù)。
進一步地,上述業(yè)務(wù)開發(fā)方法還可具有以下特點,所述將所述原子服務(wù)組裝成復(fù)合服務(wù)包括將所述原子服務(wù)組裝成多個第一復(fù)合服務(wù);將所述多個第一復(fù)合服務(wù)組裝成第二復(fù)合服務(wù),所述第二復(fù)合服務(wù)為與所述業(yè)務(wù)需求對應(yīng)的服務(wù)。進一步地,上述業(yè)務(wù)開發(fā)方法還可具有以下特點,所述將所述原子服務(wù)組裝成復(fù)合服務(wù)通過Mozilla Rhino腳本引擎將前臺頁面編寫的JavaScript代碼段進行解析并編譯成Java字節(jié)碼的方式實現(xiàn)。為解決上述技術(shù)問題,本發(fā)明還提出了一種業(yè)務(wù)開發(fā)裝置,包括獲取模塊,用于獲取與業(yè)務(wù)需求相關(guān)的原子服務(wù);組裝模塊,用于將所述獲取模塊獲取的原子服務(wù)組裝成復(fù)合服務(wù);發(fā)布模塊,用于發(fā)布所述組裝模塊組裝的復(fù)合服務(wù)。進一步地,上述業(yè)務(wù)開發(fā)裝置還可具有以下特點,還包括運行模塊,用于運行所述復(fù)合服務(wù)。進一步地,上述業(yè)務(wù)開發(fā)裝置還可具有以下特點,所述組裝模塊包括第一組裝單元,用于將所述原子服務(wù)組裝成多個第一復(fù)合服務(wù);第二組裝單元,用于將所述多個第一復(fù)合服務(wù)組裝成第二復(fù)合服務(wù),所述第二復(fù)合服務(wù)為與所述業(yè)務(wù)需求對應(yīng)的服務(wù)。進一步地,上述業(yè)務(wù)開發(fā)裝置還可具有以下特點,所述組裝模塊通過MozillaRhino腳本引擎將前臺頁面編寫的JavaScript代碼段進行解析并編譯成Java字節(jié)碼的方式實現(xiàn)將所述原子服務(wù)組裝成復(fù)合服務(wù)。本發(fā)明的業(yè)務(wù)開發(fā)方法及裝置,基于腳本引擎Mozilla Rhino通過在頁面編寫JavaScript腳本語言,將原子服務(wù)進行組裝編排形成新的復(fù)合服務(wù),這種方式降低了新業(yè)務(wù)需求的響應(yīng)時間,提高了新業(yè)務(wù)需求的處理速度,提高了原子服務(wù)的復(fù)用率,易于維護,是實現(xiàn)SOA系統(tǒng)“高內(nèi)聚低耦合”目標的有效手段。
圖1為將原子服務(wù)組裝成復(fù)合服務(wù)的示意圖。
具體實施例方式本發(fā)明的主要構(gòu)思是通過腳本引擎Mozilla Rhino將前臺頁面編寫的JavaScript代碼段進行解析并編譯成能正常運行的Java字節(jié)碼,當調(diào)用服務(wù)的時候服務(wù)器端直接運行這些Java字節(jié)碼,這種方式相當于在不更改服務(wù)器端的情況下通過JavaScript腳本動態(tài)地擴展了服務(wù)器端的功能。以下結(jié)合附圖對本發(fā)明的原理和特征進行描述,所舉實例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。本發(fā)明提出了一種業(yè)務(wù)開發(fā)方法,該業(yè)務(wù)開發(fā)方法包括如下步驟步驟一,獲取與業(yè)務(wù)需求相關(guān)的原子服務(wù);其中,原子服務(wù)是指對業(yè)務(wù)系統(tǒng)或者源業(yè)務(wù)系統(tǒng)提供的業(yè)務(wù)接口,不進行任何數(shù)據(jù)改造和轉(zhuǎn)換邏輯,直接發(fā)布成Web服務(wù),該服務(wù)的業(yè)務(wù)邏輯,請求和響應(yīng)與源業(yè)務(wù)系統(tǒng)業(yè)務(wù)接口保持一致,這種服務(wù)稱為原子服務(wù)。與業(yè)務(wù)需求相關(guān)的原子服務(wù)可以由業(yè)務(wù)專家進行業(yè)務(wù)梳理后得到。通過業(yè)務(wù)梳理,業(yè)務(wù)專家會輸出業(yè)務(wù)需求和原子服務(wù)的對應(yīng)關(guān)系,并梳理出業(yè)務(wù)需求的業(yè)務(wù)邏輯。步驟二,將步驟一獲取的原子服務(wù)組裝成復(fù)合服務(wù);復(fù)合服務(wù)是對若干個原子服務(wù)進行邏輯編排、重新組裝成的新的Web服務(wù)。例如調(diào)用一個原子服務(wù)A,當調(diào)用結(jié)果返回正確時,則調(diào)用原子服務(wù)B,否則調(diào)用原子服務(wù)C,此由原子服務(wù)A、原子服務(wù)B和原子服務(wù)C組成的服務(wù)即為復(fù)合服務(wù),此服務(wù)在源業(yè)務(wù)系統(tǒng)中并不存在。對于簡單的業(yè)務(wù)需求,可以由原子服務(wù)直接組裝成與業(yè)務(wù)需求對應(yīng)的復(fù)合服務(wù)。對于復(fù)雜的業(yè)務(wù)需求,則需要由原子服務(wù)組裝成多個第一級的復(fù)合服務(wù),再由該多個第一 級的復(fù)合服務(wù)組裝成多個第二級的復(fù)合服務(wù)……,最終組裝成與業(yè)務(wù)需求對應(yīng)的服務(wù)。下面以圖1為例,說明在復(fù)雜的業(yè)務(wù)需求下,由原子服務(wù)組裝成與業(yè)務(wù)需求對應(yīng)的服務(wù)的過程。圖1為將原子服務(wù)組裝成復(fù)合服務(wù)的示意圖。如圖1所示,首先,將原子服務(wù)1、原子服務(wù)2和原子服務(wù)3組裝成復(fù)合服務(wù)1,將原子服務(wù)3、原子服務(wù)4和原子服務(wù)5組裝成復(fù)合服務(wù)2 ;然后,將復(fù)合服務(wù)I和復(fù)合服務(wù)2再組裝成復(fù)合服務(wù)3。復(fù)合服務(wù)3就是與業(yè)務(wù)需求對應(yīng)的服務(wù)。下面給出圖1中復(fù)合服務(wù)3的組裝過程(I)業(yè)務(wù)人員梳理出需求和原子服務(wù)1-5的業(yè)務(wù)邏輯關(guān)系;(2)發(fā)布原子服務(wù)1-5這5個原子服務(wù);(3)根據(jù)業(yè)務(wù)邏輯,調(diào)用原子服務(wù)1-3這3個原子服務(wù),組裝服務(wù)復(fù)合服務(wù)I ;//獲取輸入?yún)?shù),對輸入?yún)?shù)進行重新組裝以調(diào)用原子服務(wù)I vai ruot=pin. getRootElementO;
var masterServIdNode = root. selectSingleNode("MASTER_SERV_ID");var serviceNoNode = root. selectSingleNode("PHONE-NO");var pinl = "< xral version=/1 0 encoding=' GBK' standalone=' no' ><R00TXBIND-PH0NE_N0 type=' string' >" + serviceNoNode. getText () +"〈/BIND—PHONE—NOXID—TYPE type='string' >1</ID—TYPEXREGION—IDtype='string'>11</REGI0N_ID></R00T>";
//獲取原子服務(wù)I返回結(jié)果,并可對返回結(jié)果進行解析 vai outl = ESB. epCall ("原子服務(wù) 1", pinl); var outlRoot = outl. getRootElementO ;
VarIdNoNode= outlRoot. selectSingleNode ("OUT-DATA/DATA/ID-NO");
//同理,調(diào)用原子服務(wù)2獲取返回結(jié)果,并對返回結(jié)果進行解析
var pin2 =組裝輸入?yún)?shù);
var out2 = ESB. epCall ("原子服務(wù) 2", pin2);
vdi out2Root = out2. getRootElement ();
var IdNoNode= out2Root. selectSingleNode ("OUT_DATA/DATA/ID_NO");
//調(diào)用服務(wù)3,并返回復(fù)合服務(wù)I的結(jié)果 If (idNoNode == idNoNode) { var pin2 =組裝輸入?yún)?shù);
return ESB. epCalI (”原子服務(wù) 3", pin3);
}(4)同理,根據(jù)業(yè)務(wù)邏輯,調(diào)用原子服務(wù)3-5,組裝服務(wù)復(fù)合服務(wù)2 ;(5)同理,再把復(fù)合服務(wù)1、服務(wù)服務(wù)2組裝為復(fù)合服務(wù)3。具體地,步驟二可以通過Mozilla Rhino腳本引擎將前臺頁面編寫的JavaScript代碼段進行解析并編譯成Java字節(jié)碼的方式實現(xiàn)。通過本發(fā)明,可以通過運用順序、條件判斷、循環(huán)、入?yún)⒊鰠⒏袷睫D(zhuǎn)換、調(diào)用原子服務(wù)等手段將系統(tǒng)中眾多的原子服務(wù)任意組裝、編排,定制靈活的業(yè)務(wù)邏輯,快速實現(xiàn)業(yè)務(wù)需求。在系統(tǒng)原子服務(wù)業(yè)務(wù)邏輯劃分清晰,粒度合適的情況下,這種方式的好處更加顯而易見,所有的業(yè)務(wù)需求都能通過組裝原子服務(wù)來實現(xiàn),真正實現(xiàn)積木式開發(fā),系統(tǒng)上線后業(yè)務(wù)人員在熟悉JavaScript腳本的情況也能自行組裝新服務(wù)快速滿足新業(yè)務(wù)需求。本發(fā)明使用JavaScript腳本語言,JavaScript腳本語言已經(jīng)標準化,應(yīng)用廣泛、簡單靈活,且學(xué)習(xí)成本低,適合業(yè)務(wù)人員學(xué)習(xí)。步驟三,發(fā)布步驟二組裝好的復(fù)合服務(wù);通過ESB提供的發(fā)布復(fù)合服務(wù)頁面,將JavaScript腳本傳輸?shù)椒?wù)器端,在輸入過程中,可以對用戶輸入的腳本進行提示和自動補全,如在輸入腳本Example,call ( “service”)時,當用戶輸入完Example后,在輸入”時,系統(tǒng)會將Example類中所有的public方法簽名提示給用戶供用戶選擇。在頁面輸入完腳本后,點擊提交將腳本提交到服務(wù)器端,服務(wù)器端會對這段腳本進行編譯,如果腳本有誤頁面會提示用戶修改腳本重新提交,服務(wù)器端通過Rhino將正確的腳本編譯為Java Class字節(jié)碼并存儲起來,新發(fā)布的服務(wù)是停止狀態(tài)的,需要通過頁面進行啟動后才能被調(diào)用。步驟四,運行步驟三發(fā)布的復(fù)合服務(wù)。服務(wù)成功發(fā)布并啟動后,能對新復(fù)合服務(wù)進行調(diào)用,通過調(diào)用對服務(wù)進行業(yè)務(wù)功能測試。本發(fā)明的業(yè)務(wù)開發(fā)方法,對于熟悉業(yè)務(wù)和了解JavaScript腳本的人來說非常簡單易行,整個開發(fā)過程耗時很短,開發(fā)一個新業(yè)務(wù)需求平均不到2個小時,在客戶業(yè)務(wù)需求復(fù)雜多變且需要及時響應(yīng)的情況這種方式尤其有效。下面通過一個應(yīng)用實例來說明本發(fā)明業(yè)務(wù)開發(fā)方法的具體執(zhí)行過程1、在 http://www.mozilla.org/rhino/ 上下載 js. jar,將 js. jar 加入到classpath中,Rhino需要1.1及以上的Java版本;2、編寫用于腳本引用的類,如下所示
權(quán)利要求
1.一種業(yè)務(wù)開發(fā)方法,其特征在于,包括獲取與業(yè)務(wù)需求相關(guān)的原子服務(wù);將所述原子服務(wù)組裝成復(fù)合服務(wù);發(fā)布所述復(fù)合服務(wù)。
2.根據(jù)權(quán)利要求1所述的業(yè)務(wù)開發(fā)方法,其特征在于,在所述發(fā)布所述復(fù)合服務(wù)之后還包括運行所述復(fù)合服務(wù)。
3.根據(jù)權(quán)利要求1所述的業(yè)務(wù)開發(fā)方法,其特征在于,所述將所述原子服務(wù)組裝成復(fù)合服務(wù)包括將所述原子服務(wù)組裝成多個第一復(fù)合服務(wù);將所述多個第一復(fù)合服務(wù)組裝成第二復(fù)合服務(wù),所述第二復(fù)合服務(wù)為與所述業(yè)務(wù)需求對應(yīng)的服務(wù)。
4.根據(jù)權(quán)利要求1所述的業(yè)務(wù)開發(fā)方法,其特征在于,所述將所述原子服務(wù)組裝成復(fù)合服務(wù)通過Mozilla Rhino腳本引擎將前臺頁面編寫的JavaScript代碼段進行解析并編譯成Java字節(jié)碼的方式實現(xiàn)。
5.一種業(yè)務(wù)開發(fā)裝置,其特征在于,包括獲取模塊,用于獲取與業(yè)務(wù)需求相關(guān)的原子服務(wù);組裝模塊,用于將所述獲取模塊獲取的原子服務(wù)組裝成復(fù)合服務(wù);發(fā)布模塊,用于發(fā)布所述組裝模塊組裝的復(fù)合服務(wù)。
6.根據(jù)權(quán)利要求5所述的業(yè)務(wù)開發(fā)裝置,其特征在于,還包括運行模塊,用于運行所述復(fù)合服務(wù)。
7.根據(jù)權(quán)利要求5所述的業(yè)務(wù)開發(fā)裝置,其特征在于,所述組裝模塊包括第一組裝單元,用于將所述原子服務(wù)組裝成多個第一復(fù)合服務(wù);第二組裝單元,用于將所述多個第一復(fù)合服務(wù)組裝成第二復(fù)合服務(wù),所述第二復(fù)合服務(wù)為與所述業(yè)務(wù)需求對應(yīng)的服務(wù)。
8.根據(jù)權(quán)利要求5所述的業(yè)務(wù)開發(fā)裝置,其特征在于,所述組裝模塊通過Mozilla Rhino腳本引擎將前臺頁面編寫的JavaScript代碼段進行解析并編譯成Java字節(jié)碼的方式實現(xiàn)將所述原子服務(wù)組裝成復(fù)合服務(wù)。
全文摘要
本發(fā)明涉及一種業(yè)務(wù)開發(fā)方法及裝置。業(yè)務(wù)開發(fā)方法包括獲取與業(yè)務(wù)需求相關(guān)的原子服務(wù);將所述原子服務(wù)組裝成復(fù)合服務(wù);發(fā)布所述復(fù)合服務(wù)。業(yè)務(wù)開發(fā)裝置包括獲取模塊,用于獲取與業(yè)務(wù)需求相關(guān)的原子服務(wù);組裝模塊,用于將所述獲取模塊獲取的原子服務(wù)組裝成復(fù)合服務(wù);發(fā)布模塊,用于發(fā)布所述組裝模塊組裝的復(fù)合服務(wù)。本發(fā)明的業(yè)務(wù)開發(fā)方法及裝置,基于腳本引擎Mozilla Rhino通過在頁面編寫JavaScript腳本語言,將原子服務(wù)進行組裝編排形成新的復(fù)合服務(wù),這種方式降低了新業(yè)務(wù)需求的響應(yīng)時間,提高了新業(yè)務(wù)需求的處理速度,提高了原子服務(wù)的復(fù)用率,易于維護,是實現(xiàn)SOA系統(tǒng)“高內(nèi)聚低耦合”目標的有效手段。
文檔編號G06F9/44GK102999338SQ20121047338
公開日2013年3月27日 申請日期2012年11月20日 優(yōu)先權(quán)日2012年11月20日
發(fā)明者鄭亞群 申請人:北京思特奇信息技術(shù)股份有限公司