隨筆-10  評論-36  文章-6  trackbacks-0
          所謂報(bào)文驅(qū)動,就是模塊間的相互調(diào)用通過定義了格式的報(bào)文傳遞輸入?yún)?shù),返回值通過應(yīng)答報(bào)文傳遞的模塊調(diào)用方式。模塊指實(shí)現(xiàn)獨(dú)立業(yè)務(wù)功能的服務(wù)類,而非方法間的調(diào)用。例如:轉(zhuǎn)賬模塊調(diào)用記賬模塊。模塊間的報(bào)文傳遞,可以是WebService、RMI等同步方式,也可以是MQ等異步方式。本文不是完整的實(shí)現(xiàn)過程,而是綱要,防止自己忘記的備忘錄。
          本文的軟件系統(tǒng)架構(gòu)參考《基于EJB 3.0的企業(yè)應(yīng)用后端框架》。

          1、創(chuàng)建數(shù)據(jù)庫及數(shù)據(jù)庫表。

          2、創(chuàng)建實(shí)體類及相應(yīng)的DAO類庫,本庫是EJB模塊,可以動態(tài)更換。實(shí)體類總是對應(yīng)數(shù)據(jù)庫表,每個表對應(yīng)一個或多個實(shí)體類。實(shí)體類是POJO對象。DAO類使用JPA完成實(shí)體對象的增、刪、改、查、鎖等操作,和具體業(yè)務(wù)邏輯無關(guān)。
          (1)創(chuàng)建EJB項(xiàng)目,包含ejbModule、testcase、script等目錄。源碼放置到ejbModule目錄,測試代碼放置到testcase,數(shù)據(jù)庫相關(guān)腳本放置到Script目錄。
          (2)給項(xiàng)目添加JPA支持。從ApplicationServer支持的JPA中選擇一款JPA實(shí)現(xiàn)。實(shí)際部署時(shí),JPA模塊是可以動態(tài)更換的。
          (3)編輯項(xiàng)目的持久化配置文件,和數(shù)據(jù)庫配置保持一致。
          (4)給測試或JPA添加依賴的外部JAR包。
          --------- 準(zhǔn)備就緒
          (5)從數(shù)據(jù)庫生成實(shí)體類并定制,確保每個實(shí)體類有唯一的序列化ID。每個實(shí)體類有主鍵,實(shí)體類和主鍵類均是可序列化的。如果實(shí)體對象和數(shù)據(jù)庫數(shù)據(jù)間要進(jìn)行某種轉(zhuǎn)換動作,由實(shí)體類的Get/Set方法完成。
          (6)編寫一個AbstractEnityDao類實(shí)現(xiàn)調(diào)用JPA完成實(shí)體對象的持久化操作。為每個實(shí)體類派生一個DAO類完成該實(shí)體的持久化。該DAO是一個SessionBean,且只實(shí)現(xiàn)本地方法。如果要對實(shí)體的值合法性進(jìn)行檢查,則在DAO類完成。
          (7)編寫DAO和實(shí)體類的測試代碼,確認(rèn)每個DAO類均工作正常。

          3、創(chuàng)建實(shí)體類及DAO類的client庫。本庫是普通的JAR包,給未來使用實(shí)體對象和DAO對象的對象使用。
          (1)DAO類庫完成并定版后,創(chuàng)建JAR庫。
          (2)復(fù)制DAO類庫的全部實(shí)體類到本庫,確保包名沒有變化。
          (3)復(fù)制DAO類庫的全部DAO接口到本庫,確保包名沒有變化。
          (4)編輯全部實(shí)體類,去掉@JPA的注釋并糾正import語句,以減少本庫的依賴性。

          4、創(chuàng)建報(bào)文庫,本庫是普通Jar包。
          (1)為每個報(bào)文創(chuàng)建一個報(bào)文類。報(bào)文類是POJO對象,且必須可序列化。
          (2)如果使用報(bào)文的全部時(shí)JAVA代碼,則使用默認(rèn)的Java序列化對象的方法傳遞報(bào)文對象。否則,實(shí)現(xiàn)序列化方法,將報(bào)文串轉(zhuǎn)換為報(bào)文對象和將報(bào)文對象轉(zhuǎn)換為報(bào)文串。Java內(nèi)部使用報(bào)文對象,模塊間調(diào)用使用報(bào)文串。
          (3)如果使用XML作為報(bào)文串,則可以為每個報(bào)文創(chuàng)建一個類和一個映射文件,通過XML通用類庫實(shí)現(xiàn)對象和串的轉(zhuǎn)換。

          5、編寫業(yè)務(wù)服務(wù)庫,本庫是EJB模塊。
          (1)創(chuàng)建AbstractBusinessService類,定義業(yè)務(wù)服務(wù)的接口,并實(shí)現(xiàn)通用的方法。
          (2)為每個報(bào)文創(chuàng)建一個業(yè)務(wù)服務(wù)類繼承AbstractBusinessService類,并實(shí)現(xiàn)對報(bào)文的特殊處理。業(yè)務(wù)服務(wù)類是SessionBean,實(shí)現(xiàn)本地接口。
          (3)為每個業(yè)務(wù)服務(wù)類編寫測試代碼,確保每個服務(wù)類均可以正常工作。

          6、編寫業(yè)務(wù)引擎服務(wù)(EJB服務(wù))
          (1)本服務(wù)提供本地和遠(yuǎn)程方法供Client使用,接收Client傳遞的業(yè)務(wù)報(bào)文對象,根據(jù)配置創(chuàng)建并調(diào)用業(yè)務(wù)服務(wù)對報(bào)文進(jìn)行處理。
          (2)業(yè)務(wù)引擎通常提供實(shí)時(shí)調(diào)用和MQ調(diào)用兩類引擎,后者是消息驅(qū)動Bean。

          7、Web服務(wù)
          (1)將業(yè)務(wù)引擎服務(wù)封裝為WebService或http/REST風(fēng)格的服務(wù),供外部系統(tǒng)調(diào)用。
          ------------- 完成全部項(xiàng)目

          8、部署:將全部類庫打包為EAR發(fā)布,將報(bào)文庫發(fā)布給Java外部客戶。


           
          posted on 2011-10-29 20:22 飛鷹 閱讀(644) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 大同县| 荃湾区| 湛江市| 镇巴县| 拉孜县| 马边| 五台县| 扎囊县| 花莲县| 普兰县| 大丰市| 名山县| 永安市| 婺源县| 南召县| 鄂温| 客服| 唐山市| 伽师县| 秦安县| 宁晋县| 托克逊县| 噶尔县| 蒙山县| 合阳县| 双柏县| 潜江市| 镇平县| 镇赉县| 景洪市| 益阳市| 呼伦贝尔市| 含山县| 阿克苏市| 洛川县| 乐平市| 阳江市| 岳阳县| 舟曲县| 灌南县| 金乡县|