SOA的組件實現(xiàn)---EJB+Spring+Hibernate
Posted on 2007-01-30 23:29 江上一葉舟 閱讀(2156) 評論(1) 編輯 收藏 所屬分類: 軟件藝術(shù)????? 最近項目很變態(tài),硬是要把Domino的東西往J2EE上搬,說什么文檔型數(shù)據(jù)庫無法跨越系統(tǒng),我覺得如果照目前電信的系統(tǒng)結(jié)構(gòu)來說,就算把Domino上的所有東西,包括process都搬到J2EE上,也無法解決各個系統(tǒng)之間很好協(xié)作的問題,Portal和統(tǒng)一認證已經(jīng)在某種程度上幫了大忙,如果實在很想各個應用系統(tǒng)之間進行數(shù)據(jù)交互,開發(fā)webservice接口就ok了,甚至在系統(tǒng)開始規(guī)劃的時候就不應該出現(xiàn)Domino這種東西,現(xiàn)在想起關系型數(shù)據(jù)庫的好來了,未免累死了開發(fā)人員,所以我還是秉持我自己的原則:我們無限制的追求軟件程序的完美,并不是為了那幫傻逼客戶,而是為了讓我們之后的程序員能夠以更少的精力來更輕松的拿這份工資!
????? 牢騷完畢來說說目前的J2EE做法。既然涉及到流程,那不免就那兩種,WFMC和BPEL,我們選擇BPEL,原因是IBM支持BPEL,不要問我兩種東西那種更優(yōu)秀,我會告訴你:你搞清楚了也沒意義,用戶只相信IBM。
????? 既然用BPEL,IBM的Websphere Process Server首當其沖,項目組買了幾百萬的軟件和服務就開始開發(fā)了,說實話,WPS真的是一個很好的SOA解決方案,但我個人認為絕對不適合中國政府、國企的流程開發(fā),因為他無法很好的解決人工節(jié)點的問題,哪怕是引入了human task,于是我們又自己封裝了一層小的流程引擎,當然我所要說的重點不是這個,而是我們在wps中所需要的JCA方式綁定的組件的實現(xiàn)方式:EJB+Spring+Hibernate,做好的EJB包可以以EJB Bind的Java component形式打入wps的assembly里,在bpel process中reference進來就可以了。下面我們主要說說EJB的實現(xiàn)。
????? 由于wps有個特點就是在流程實例結(jié)束后刪除其自帶數(shù)據(jù)庫中的所有實例數(shù)據(jù),所以我們必須在流程的最后一部將數(shù)據(jù)記錄在我們自己的業(yè)務庫中來,我們開發(fā)的EJB就實現(xiàn)了這個功能。
首先是業(yè)務邏輯,業(yè)務邏輯分成三個包,ejb、face、pojo,其中ejb是組件的本地接口,face是組件的功能性接口,pojo是具體實現(xiàn)類。
??????具體邏輯代碼不貼了,貼一個我寫的例子:
??????face中的功能接口:

2

3

4

5

6



7

8

9

???ejb中本地接口:

?2

?3

?4

?5

?6

?7

?8



?9

10

11


?2

?3

?4

?5

?6

?7

?8

?9

10

11

12

13



14

15

16

17

18



19

20

21

22

23



?????????????????String message = "";
?????????????????????? try {
????????????????message = m_simple_service.sayHello(message);
??????? }
??????? catch (Exception ex)
??????? {
??????????? this.sessionContext.setRollbackOnly();
??????????? throw new EJBException();
??????? }
24

25

26

27


?2

?3

?4

?5

?6



?7

?8

?9



10

11

12



13

14

15

16

17

18

19

20

21

22

23

最終打包發(fā)布到Websphere上可以正常運行,做個web客戶端簡單測試一下就ok了。
放入wps上也運行正常。
最后說一句:不一定所有的國外產(chǎn)品都適用于我們的現(xiàn)狀。