關於spring + ejb進行組合的一些疑問

macrochen發表於2005-04-15
關於spring + ejb進行組合的一些疑問
最近一個專案需要將spring與EJB結合,這種行為在一些人的眼裡看來是不夠地道的做法,不過我目前的確是需要spring這樣一種支援。先講講我的理解吧。
要對stateless session bean進行很好的封裝,在建立這個session bena的時候就不是以往繼承SessionBean,而是必須繼承AbstractEnterpriseBean,並實現onCreate方法,為什麼要繼承這個bean呢?
透過檢視原始碼我們可以得知,該abstract類主要做了一件事情,就是是載入ear-jar.xml中的環境變數引數:
<env-entry>
<env-entry-name>ejb/BeanFactoryPath</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>myComponent-ejb-beans.xml</env-entry-value>
</env-entry>
這個引數是一個jndi的設定,告訴客戶端的spring framework,必須載入myComponent-ejb-beans.xml這樣的一個xml配置檔案來生產我們所需要的bean例項。
從而我們可以得出這樣一個結論:spring framework所需要的ApplicationContext配置資訊是放在將要釋出到應用伺服器上的EJB元件描述符中的。這是不是spring所謂的侵入性呢?我不知道,希望spring高手能給我答案^_^。從這裡我似乎得出了一個答案,spring 在解除業務邏輯層與表現層之間的耦合,對外儘可能封裝複雜實現的時候,在漸漸的加強了spring framework與ejb之間的耦合性,比如實現spring封裝的抽象類,在部署描述符中附帶配置資訊。我不知道這個是不是可以避免呢?
這樣做還有一個不好的地方就是,如果某人要用這個EJB元件,並且中間使用spring作為控制層。就必須做一個該EJB部署描述符中指定的檔案路徑名,比如上面的myComponent-ejb-beans.xml,否則沒法用。同時也強制部署描述符必須帶有一個環境變數來指明客戶端bean factory的application context配置檔案路徑,由此我們可以看出spring在與ejb結合的時候不僅是在充當控制層的角色,而是在強制ejb必須按照他的要求來做某些事情。這裡表現出來的就是兩點,一個是繼承spring提供的抽象類,另一個就是在部署描述符中設定spring控制層的bean factory配置檔案路徑名。

相關文章