BEA WebLogic Server 9.0是對Sun Microsystems的J2EE 1.4平臺的領(lǐng)先實(shí)現。然而,WebLogic Server的核心價(jià)值主張則體現在J2EE規范中沒(méi)有的領(lǐng)域——增強的管理、易用性、高可用性、可伸縮性、可靠性和性能。實(shí)際上,WebLogic Server的價(jià)值并不與任何特定的編程模型關(guān)聯(lián),所以很自然地,它也適用于新出現的非J2EE編程模型。近年來(lái)出現的最激動(dòng)人心的事物莫過(guò)于基于反向控制(Inversion of Control,IoC)的模型,而Spring Framework正是此類(lèi)模型的領(lǐng)先實(shí)現。本文介紹了Spring Framework、WebLogic Server以及二者的集成的一些特性。我們將看到,整體大于部分之和。
在前兩節中,我們將概覽Spring和WebLogic Server,并介紹它們各自的特性。熟悉Spring Framework的讀者可以跳過(guò)第一節。因為本文的主要目的是介紹兩種技術(shù)的集成,所以本文余下的部分都會(huì )集中在這一點(diǎn)上。為了提供一個(gè)上下文,我們首先剖析了MedRec——與WebLogic Server一起發(fā)行的一個(gè)示例應用程序——首先是以原始的J2EE形式,然后再使用Spring Framework重構。此后,我們將圍繞特定的集成點(diǎn)進(jìn)行詳細的闡述。如果您打算在WebLogic Server上開(kāi)發(fā)Spring應用程序,那么您肯定能從本文中找到對您有所幫助的細節。如果您只是想進(jìn)行大概的了解,那么先閱讀標題,以后再了解其具體內容。最后,我們展望了一些正在考慮的未來(lái)開(kāi)發(fā)工作。
在本節中,我們將簡(jiǎn)要概括Spring Framework的一些特性。
Spring 是一個(gè)分層的Java/J2EE應用框架,它基于Rod Johnson所著(zhù)的《Expert One-on-One J2EE Design and Development》(Wrox,2002年)一書(shū)中所公布的代碼。Spring之所以存在,是因為我們相信,J2EE應該更加易用,而且我們可以使用更簡(jiǎn)單的方法進(jìn)行J2EE開(kāi)發(fā),同時(shí)又不犧牲平臺的性能。
Spring支持靈活的J2EE開(kāi)發(fā),并允許使用POJO開(kāi)發(fā)J2EE應用程序。
Spring在其核心部分提供了一個(gè)易于配置的、XML驅動(dòng)的反向控制(IoC)容器。IoC基于所謂的“好萊塢原則”——不要給我們打電話(huà),我們會(huì )找你。在這種方案中,應用程序中Java對象之間的關(guān)系是由容器注入的,而不是通過(guò)直接編程實(shí)現的。注入分兩種形式——構造函數注入和setter注入,這取決于容器是通過(guò)其構造函數還是通過(guò)mutator方法把信息注入一個(gè)已創(chuàng )建的Java對象。
在Spring中,注入的屬性——或到其他bean的引用——是通過(guò)一個(gè)XML文件進(jìn)行配置的,這使得配置變得非常直接。Spring與一個(gè)AOP框架耦合在一起,而該框架支持非侵入性地添加諸如事務(wù)和安全這樣的屬性,這意味著(zhù)開(kāi)發(fā)人員可以集中精力創(chuàng )建用于解決業(yè)務(wù)問(wèn)題的解決方案,而不會(huì )為J2EE開(kāi)發(fā)或配置的復雜性而頭痛。因為該容器是非侵入性的,所以您不必擔心業(yè)務(wù)代碼會(huì )被特定于供應商(此處也包括Spring)的工件所污染。
正如我們所提到的那樣,Spring提供了一個(gè)輕量級的容器,用于提供集中式、自動(dòng)化的配置和編寫(xiě)應用程序對象。該容器是非侵入性的,能夠以一種一致而透明的方式,通過(guò)IoC把一組松散耦合的組件(POJO)組裝為一個(gè)復雜的系統。因為該容器允許首先獨立地開(kāi)發(fā)和測試各軟件組件,然后在任意環(huán)境(J2SE或J2EE)中進(jìn)行擴展部署,所以它具有靈活性和高利用率,并提高了應用程序的可測試性和可伸縮性。此外,Spring還提供了大量其他的對開(kāi)發(fā)人員友好的特性,如下:
您可以在任何J2EE服務(wù)器中使用Spring的所有功能,也可以在非托管環(huán)境中使用其中的大部分功能。Spring的一個(gè)重心是支持可重用的業(yè)務(wù)和不依賴(lài)于特定的J2EE服務(wù)的數據訪(fǎng)問(wèn)對象。這些對象可以不費事地跨J2EE環(huán)境(Web或EJB)、獨立應用程序和測試環(huán)境進(jìn)行重用。
Spring的分層架構提供了很多靈活性。它所有的功能都構建在較低的層次上。例如,您可以在不使用MVC框架或沒(méi)有AOP支持的情況下使用JavaBean配置管理。但是,如果您要使用Web MVC框架或AOP支持,您會(huì )發(fā)現它們構建在配置框架之上,所以您可以馬上用上有關(guān)它的知識。
在本節中,我們將簡(jiǎn)要概括BEA WebLogic Server的特性,重點(diǎn)強調它所提供的底層基礎架構,而不是編程模型。
WebLogic Server是一個(gè)可伸縮的企業(yè)級的J2EE應用服務(wù)器。WebLogic Server基礎架構支持多種分布式應用程序的部署,是構建任何種類(lèi)的應用程序的理想基礎。
WebLogic Server實(shí)現了Sun Microsystems的J2EE 1.4規范,提供了一組標準的API,用于創(chuàng )建可以訪(fǎng)問(wèn)多種服務(wù)(如:數據庫、消息傳遞服務(wù))的分布式Java應用程序和到外部企業(yè)系統的連接。終端用戶(hù)客戶(hù)使用Web瀏覽器客戶(hù)端或Java客戶(hù)端訪(fǎng)問(wèn)這些應用程序。因為J2EE已經(jīng)為大家所熟悉,這里我們不再詳細討論。更多信息,請參見(jiàn)WebLogic Server文檔中關(guān)于編程模型的部分。
除了實(shí)現J2EE之外,WebLogic Server還使企業(yè)能夠在一個(gè)健壯、安全、高度可用和可伸縮的環(huán)境中部署任務(wù)關(guān)鍵型應用程序。這些特性允許企業(yè)配置WebLogic Server實(shí)例集群,以便分布負載,并在發(fā)生硬件或其他故障時(shí)提供額外的容量。新的診斷工具允許系統管理員監控和調優(yōu)已部署應用程序和WebLogic Server環(huán)境本身的性能。您還可以配置WebLogic Server以自動(dòng)監控和調整應用程序吞吐量,無(wú)需人工干預。廣泛的安全特性保護了對服務(wù)的訪(fǎng)問(wèn),保證了企業(yè)數據的安全,并阻止了惡意攻擊。
和其他許多BEA產(chǎn)品一樣,WebLogic Server就像冰山,浮在水上的不過(guò)是很小一部分而已。具體來(lái)說(shuō),WebLogic Server提供了大量特性和工具來(lái)支持高度可用和可伸縮的應用程序的部署。
現在,讓我們來(lái)看一看這兩個(gè)系統之間的協(xié)作。
為比較J2EE和Spring開(kāi)發(fā)方法的不同,我們使用Spring Framework重新編寫(xiě)了MedRec示例應用程序。在接下來(lái)的一節中,我們將簡(jiǎn)要地概覽MedRec的一般架構,然后依次看一看它的J2EE和Spring形式。
Avitek Medical Records(或MedRec)是一個(gè)WebLogic Server示例應用程序套件,它簡(jiǎn)明地演示了J2EE平臺的各個(gè)方面。MedRec的設計目的是用作對各個(gè)層次的J2EE開(kāi)發(fā)人員進(jìn)行培訓的工具。它展示了如何使用每個(gè)J2EE組件,并說(shuō)明了組件交互和客戶(hù)端開(kāi)發(fā)的設計模式。MedRec還闡明了使用WebLogic Server開(kāi)發(fā)和部署應用程序的最佳實(shí)踐。
MedRec背后的現實(shí)框架是一個(gè)患者、醫生和管理人員的框架,該框架使用各種不同的客戶(hù)端來(lái)管理患者數據。對于患者,MedRec為用戶(hù)提供了一個(gè)基于Web的應用程序,用于查看他們的醫療記錄和維護檔案文件。對于管理人員,MedRec提供了一個(gè)基于Web的應用程序,用于管理傳入的注冊、醫療記錄上傳和一般性的應用程序監控。MedRec還包含用于與獨立醫療機構接合的資源。為了演示這種通信,MedRec包含了一個(gè)醫生應用程序,用于請求和提供數據給MedRec的系統。
MedRec的J2EE和WebLogic Server版本是按照傳統的3層架構模型來(lái)設計和實(shí)現的,在該模型中,客戶(hù)端、服務(wù)器和數據存儲器都是相互獨立的:
針對MedRec的患者管理應用程序,我們開(kāi)發(fā)了一些Web應用程序(webapp),用于把服務(wù)公開(kāi)給它們各自的用戶(hù)。webapp符合模型-視圖-控制器(Model-View-Controller)模式,Java Server Page呈現視圖給用戶(hù),模型封裝要呈現給用戶(hù)和從用戶(hù)處捕捉而來(lái)的數據,而控制器機制則管理除與服務(wù)層的交互之外的組件交互。MedRec采用Jakarta Struts來(lái)實(shí)現該模式。
服務(wù)層提供服務(wù)給發(fā)出請求的客戶(hù)端,并管理與后端應用程序和資源的交互。MedRec的服務(wù)層采用Session Facade模式來(lái)封裝業(yè)務(wù)邏輯和業(yè)務(wù)數據。Session Facade通過(guò)提供一個(gè)到分布式服務(wù)的接口,簡(jiǎn)化了應用程序的復雜性。在MedRec中,Session Facade的首要責任是提供數據吞吐量。在MedRec的J2EE和WebLogic Server版本中,Session Facade被開(kāi)發(fā)為無(wú)狀態(tài)的會(huì )話(huà)Enterprise JavaBean,而數據則是由實(shí)體Enterprise JavaBean來(lái)管理的。
為了與外部實(shí)體相連接,MedRec通過(guò)Web服務(wù)公開(kāi)應用程序功能,這允許不同系統之間使用一系列開(kāi)放標準進(jìn)行動(dòng)態(tài)交互。通過(guò)使用Web服務(wù)公開(kāi)服務(wù),MedRec能夠為獨立的各方提供數據,或接受來(lái)自各方的數據,從而實(shí)現了集中式醫療記錄管理的首要目標。
圖1說(shuō)明了MedRec的J2EE與WebLogic Server版本的高層架構。

為了使Spring能夠利用WebLogic Server的企業(yè)級特性,我們重新設計了MedRec的架構,以便使用Spring組件來(lái)代替相應的J2EE組件。我們把MedRec原始版本中的功能完全復制到了基于Spring的MedRec版本(MedRec-Spring)中。
引入Spring的IoC是MedRec-Spring中最重要的變化。IoC機制功能強大,通過(guò)一個(gè)容器把依賴(lài)性注入到配置好的組件中而應用。IoC解除了應用程序代碼和其配置之間的耦合。例如,對象與它們的依賴(lài)性沒(méi)有關(guān)聯(lián),所以它們可以專(zhuān)注于其職責。對于MedRec-Spring,企業(yè)資源(比如DataSourc、JMS服務(wù)、MBean連接和對等服務(wù))在運行時(shí)被提供給MedRec-Spring的對象。此外,通過(guò)遷移資源配置和在已編譯代碼之外進(jìn)行引用,在從特定于開(kāi)發(fā)的資源轉移到位于中間的生產(chǎn)資源和環(huán)境時(shí),應用程序更加易于管理。
我們發(fā)現,要正確使用IoC,應用程序代碼需要遵守更加嚴格的Java編程規則——特別是在編寫(xiě)接口的代碼時(shí)。接口比其他東西更能促進(jìn)更好的協(xié)作,因為可以減輕依賴(lài)性,而且實(shí)現的變化被隔離開(kāi)來(lái)。從IoC的角度看,接口支持依賴(lài)注入的可插入本性。為了利用IoC,我們對MedRec-Spring進(jìn)行了重構,這樣就可以基于接口對業(yè)務(wù)對象進(jìn)行編碼。
在MedRec-Spring中,無(wú)狀態(tài)會(huì )話(huà)EJB被無(wú)格式普通Java對象(Plain Old Java Object,POJO)所代替。無(wú)狀態(tài)會(huì )話(huà)EJB的長(cháng)處在于它們的遠程控制和事務(wù)管理功能。因為MedRec-Spring通過(guò)Spring的HTTP Invoker架構公開(kāi)了服務(wù)bean,所以它能夠滿(mǎn)足遠程控制的要求。事務(wù)管理是由Spring的事務(wù)抽象層提供的。MedRec-Spring的事務(wù)管理精確地映射了MedRec的事務(wù)管理,因為Spring事務(wù)管理器被配置為把責任委托給WebLogic Server的JTA事務(wù)管理器。
MedRec-Spring包含了原始MedRec的大部分消息收發(fā)功能。我們使用Spring的JMS包來(lái)簡(jiǎn)化一些一般性的任務(wù),比如連接工廠(chǎng)和目的站查找。Spring提供了一個(gè)代表消息收發(fā)目的站的對象,而不是通過(guò)編程獲得隊列句柄。和所有的Spring bean一樣,這些對象表示(JNDI名稱(chēng)、連接工廠(chǎng)關(guān)聯(lián),等等)是在已編譯代碼之外進(jìn)行配置的。
MedRec-Spring包含應用程序管理特性。這些特性對WebLogic Server的域配置和它的運行時(shí)域有影響。MedRec-Spring必須按照WebLogic Server的MBean Server行事,而Spring提供了連接管理來(lái)簡(jiǎn)化MBean Server的可訪(fǎng)問(wèn)性。
最后,MedRec-Spring使用Web服務(wù)導出它的服務(wù)。Spring提供一個(gè)JAX-RPC工廠(chǎng),該工廠(chǎng)為Web服務(wù)生成一個(gè)代理。類(lèi)似于其他的Spring bean,工廠(chǎng)bean也是在已編譯代碼之外進(jìn)行配置的,這使得應用程序更加靈活。
圖2顯示了基于Spring的MedRec版本的高層架構圖。

比較了J2EE和Spring環(huán)境中的MedRec架構之后,現在,我們要介紹一些在實(shí)現MedRec-Spring應用程序的過(guò)程中,我們所發(fā)現的一些寶貴經(jīng)驗:
為了幫助客戶(hù)使部署在WebLogic Server上的Spring應用程序發(fā)揮最大的功效,我們已經(jīng)發(fā)布了一個(gè)經(jīng)過(guò)認證的BEA發(fā)行版,其中包括Spring 1.2.5、MedRec on Spring應用程序以及其他的一些很不錯的工具。您可以從BEA的發(fā)行版Web站點(diǎn)上免費下載這個(gè)工具包。
Spring Framework的非侵入性IoC開(kāi)發(fā)模型不但依賴(lài)于對J2EE應用服務(wù)器可用的特性集,而且旨在補充該特性集。事實(shí)上,在苛刻的生產(chǎn)環(huán)境中,底層應用服務(wù)器基礎架構所提供的服務(wù)質(zhì)量對于Spring應用程序的可靠性、可用性和性能非常重要。WebLogic Server 9.0所提供的企業(yè)級特性可以增強Spring應用程序的所有方面。在本節中,我們將詳細討論這些特性,以及如何在Spring應用程序中利用它們。
一個(gè)WebLogic Server集群包括多個(gè)WebLogic Server服務(wù)器實(shí)例,這些服務(wù)器實(shí)例同時(shí)運行并一起工作,從而提高了可伸縮性和可靠性。對客戶(hù)端來(lái)說(shuō),集群就像單個(gè)的WebLogic Server實(shí)例一樣。構成集群的服務(wù)器實(shí)例既可以運行在同一臺機器上,也可以位于不同的機器上??梢酝ㄟ^(guò)在現有的機器上向集群添加另外的服務(wù)器實(shí)例,或者向集群添加機器以駐留增加的服務(wù)器實(shí)例,來(lái)提高集群的容量。WebLogic Server集群為Spring應用程序提供了一個(gè)企業(yè)級的部署平臺,雖然其他的技術(shù)產(chǎn)品也支持類(lèi)似的特性,但是它們不具有WebLogic Server所提供的豐富性和易用性。參見(jiàn)Understanding Cluster Configuration and Application Deployment,其中有對WebLogic Server集群的配置和管理的全面討論。
Spring應用程序通常都被打包為web應用程序,這種情況下,要利用WebLogic Server集群就無(wú)需修改應用程序。只要把應用程序部署到集群中的服務(wù)器上,就可以獲得增強的可伸縮性和可用性。
Spring Web應用程序習慣在HTTP會(huì )話(huà)中保存信息,比如訂單ID和用戶(hù)信息。為了支持集群中servlet和JSP的自動(dòng)復制和故障恢復,WebLogic Server支持幾種用于保持HTTP會(huì )話(huà)狀態(tài)的機制。只要為應用程序提供正確的weblogic.xml部署描述符,Spring Web應用程序就可以非侵入性地使用這些機制。參見(jiàn)配置各類(lèi)會(huì )話(huà)持久性,可以獲得有關(guān)WebLogic Server 9.0的更多可用信息。
Spring提供功能強大的遠程控制支持,允許用戶(hù)輕松導出和使用遠程服務(wù),同時(shí)仍然可以利用基于POJO的一致編程模型。通過(guò)一個(gè)接合到適當的Spring bean的RMI接口,Vanilla Spring支持代理POJO調用。然而,這種支持僅限于JRMP(Sun的RMI實(shí)現),或者通過(guò)JndiRmiProxyFactoryBean使用特定的遠程接口。借助于Spring 1.2.5 on WebLogic Server 9.0認證,我們已經(jīng)擴展了JndiRmiProxyFactoryBean和相關(guān)的服務(wù)導出程序——這樣它就能支持任何J2EE RMI實(shí)現的POJO代理,包括RMI-IIOP和T3。這方面的支持還包括一個(gè)WebLogic RMI部署描述符,它支持代理RMI接口上的集群化,所以POJO調用可以跨一個(gè)WebLogic Server集群進(jìn)行負載均衡:
<bean id="proProxy"class="org.springframework.remoting.rmi.JndiRmiProxyFactoryBean"><property name="jndiName" value="t3://:/order"/></property><property name="jndiEnvironment"><props><prop key="java.naming.factory.url.pkgs">weblogic.jndi.factories</prop></props></property><property name="serviceInterface"value="org.springframework.samples.jpetstore.domain.logic.OrderService"/></bean>服務(wù)導出程序如下:<bean id="order-pro" class="org.springframework.remoting.rmi.JndiRmiServiceExporter"><property name="service" ref="petStore"/><property name="serviceInterface"value="org.springframework.samples.jpetstore.domain.logic.OrderService"/><property name="jndiName" value="order"/></bean>
集群化的描述符是自動(dòng)包含在內的,只需要以適當方式配置集群和將Spring應用程序部署到所有集群成員中。參見(jiàn)故障恢復支持,可以獲得更多相關(guān)信息。
Spring on WebLogic Server工具包中包含一個(gè)WebLogic Server控制臺擴展,它顯示了定義在應用程序中的Spring bean、屬性和操作。它構建在WebLogic控制臺擴展門(mén)戶(hù)框架之上,該框架可以變換WebLogic Administration控制臺的外觀(guān)、功能和布局,而無(wú)需修改服務(wù)器或控制臺代碼。將控制臺擴展復制到yourdomain/console-ext目錄下,則重新啟動(dòng)服務(wù)器時(shí)就部署了控制臺擴展。想要了解有關(guān)部署控制臺擴展的更多信息,可以參考Spring on WebLogic Server工具包。
自動(dòng)為不是MBean的Spring bean(大多數Spring bean)創(chuàng )建(JMX)管理接口,然后在applicationContext.xml中配置一個(gè)MbeanExporter,并指定哪些bean要通過(guò)匯編程序公開(kāi),這樣控制臺擴展就運行了。這項特性是Spring和WebLogic Server進(jìn)行無(wú)縫和非侵入性合作的一個(gè)良好例證。要使應用程序支持JMX,只需修改應用程序上下文部署描述符。要使控制臺支持Spring,只需將一個(gè)簡(jiǎn)單的jar部署到現有的域即可。
Spring遠程控制功能的另一個(gè)方面是它對RPC風(fēng)格Web服務(wù)的支持。WebLogic Server提供基于A(yíng)nt的工具,用于基于Web服務(wù)的WSDL描述生成JAX-RPC存根。Web服務(wù)客戶(hù)端使用這些生成的存根來(lái)獲取代表服務(wù)器端操作的一個(gè)遠程接口。Spring提供了一個(gè)JaxRpcPortProxyFactoryBean來(lái)簡(jiǎn)化了這個(gè)過(guò)程。我們發(fā)現,在WebLogic Server環(huán)境中配置JaxRpcPortProxyFactoryBean有些棘手,所以為了節約客戶(hù)的時(shí)間,我們給出下面這個(gè)代碼片斷,演示如何為一個(gè)包含復雜類(lèi)型的Document Literal包裝的Web服務(wù)配置代理生成。
大部分屬性都是自解釋的。其中有一些屬性比較有名:
把JaxRpcPortProxyFactoryBean上的lookupServiceOnStartup設置為false,可以關(guān)閉啟動(dòng)期間的JAX-RPC服務(wù)查找。這樣,查找將在首次訪(fǎng)問(wèn)時(shí)進(jìn)行。這對于與WebLogic Server的可靠請求/響應Web服務(wù)通信的客戶(hù)端來(lái)說(shuō)是必需的,而且此處的客戶(hù)端也必須是一個(gè)Web服務(wù)。通常在這些情況下,始發(fā)客戶(hù)端是與Web服務(wù)客戶(hù)端一起部署的。因為直到應用程序部署完成才會(huì )激活Web服務(wù),所以客戶(hù)端Web服務(wù)對于Spring的上下文加載是不可用的。
<!-- reliable asynchronous Web service for sending newmedical records to medrec --><bean id="reliableClientWebServicesPortType"class="org.springframework.remoting.jaxrpc.JaxRpcPortProxyFactoryBean"lazy-init="true"><property name="wsdlDocumentUrl"value="http://:/ws_phys/PhysicianWebServices?WSDL"/><property name="portName" value="PhysicianWebServicesPort"/><property name="jaxRpcService"><ref bean="generatedReliableService"/></property><property name="serviceInterface"value="com.bea.physician.webservices.client.PhysicianWebServicesPortType"/><property name="username" value="medrec_webservice_user"/><property name="password" value="weblogic"/><property name="customProperties"><props><prop key="weblogic.wsee.complex">true</prop></props></property></bean><!-- allows the jaxRpcService class to execute itsconstructor which loads in type mappings --><bean id="generatedReliableService"class="com.bea.physician.webservices.client.PhysicianWebServices_Impl"></bean>
參見(jiàn)WebLogic Server的調用Web服務(wù)概覽和通過(guò)Spring使用遠程控制和Web服務(wù),可以獲得進(jìn)一步的信息。
WebLogic Server安全系統支持和擴展了J2EE安全性,同時(shí)提供一組豐富的安全提供程序,您可以對它們進(jìn)行定制,然后使用它們來(lái)處理不同的安全性數據庫或安全性策略。除了使用標準的J2EE安全性之外,應用程序程序員還可以使用很多專(zhuān)有擴展,這些擴展使應用程序可以與安全系統緊密集成。WebLogic Server帶有幾個(gè)安全提供程序,例如,可以選擇包含大部分流行LDAP服務(wù)器的身份驗證數據庫、Active Directory、本地Windows和一個(gè)內置的身份驗證解決方案??梢允褂枚ㄖ频奶峁┏绦驅戎玫奶峁┏绦蜻M(jìn)行擴充,從而幾乎可以與任意身份驗證數據庫、授權機制和憑證映射服務(wù)相集成。因為部署為webapp的Spring應用程序使用的是J2EE安全性,所以無(wú)需修改應用程序就可以獲得WebLogic Server的安全性?xún)?yōu)點(diǎn)。
經(jīng)驗豐富的Spring用戶(hù)還會(huì )熟悉Acegi——Spring自身的安全框架。目前,可以在應用程序中使用Acegi、WebLogic Server安全性,或同時(shí)使用二者,因為它們是相互獨立的。稍后我們將講述與此相關(guān)的更多信息。
Spring為事務(wù)管理提供了基礎架構。除了對各家數據庫供應商提供支持之外,Spring還通過(guò)一家J2EE供應商的JTA實(shí)現支持分布式事務(wù)。通過(guò)WebLogicJtaTransactionManager,可以把Spring的JTA管理器配置為與WebLogic Server的JTA實(shí)現一起工作。
WebLogicJtaTransactionManager把責任直接委派給WebLogic Server的Java Transaction API。WebLogic Server的JTA TransactionManager接口可以通過(guò)JNDI為客戶(hù)端和bean提供者所用,而由Spring來(lái)管理這種交互。事務(wù)管理器還支持事務(wù)的作用域;事務(wù)可以作用于集群和域內部或二者之間。
WebLogicJtaTransactionManager最強大的特性是管理分布式事務(wù)的能力和用于企業(yè)應用程序的兩階段提交協(xié)議。通過(guò)采用WebLogicJtaTransactionManager,應用程序可以通過(guò)WebLogic Administration Console來(lái)進(jìn)行事務(wù)監控。WebLogicJtaTransactionManager還支持按數據庫(per-database)隔離級別,這種級別支持復雜的事務(wù)配置。
<!-- spring‘s transaction manager delegates to WebLogicServer‘s transaction manager --><bean id="transactionManager" class="org.springframework.transaction.jta.WebLogicJtaTransactionManager"><property name="transactionManagerName"value="javax.transaction.TransactionManager"/></bean><!-- base transaction proxy for which medrec spring beans inherit--><bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"abstract="true"><property name="transactionManager" ref="transactionManager"/><property name="transactionAttributes"><props><prop key="activate*">PROPAGATION_REQUIRED</prop><prop key="create*">PROPAGATION_REQUIRED</prop><prop key="compose*">PROPAGATION_REQUIRED</prop><prop key="deny*">PROPAGATION_REQUIRED</prop><prop key="getRecord*">PROPAGATION_REQUIRED,readOnly</prop><prop key="getPatient*">PROPAGATION_REQUIRED,readOnly</prop><prop key="getLog*">PROPAGATION_NOT_SUPPORTED</prop><prop key="process*">PROPAGATION_REQUIRED</prop><prop key="save*">PROPAGATION_REQUIRED</prop><prop key="send*">PROPAGATION_REQUIRED</prop></props></property>< /bean><!-- single point of service for all medrec clients --><bean id="medRecClientServiceFacade"parent="baseTransactionProxy"><property name="target"><beanclass="com.bea.medrec.service.MedRecClientServiceFacadeImpl"><property name="adminService"><ref bean="adminService"/></property><property name="patientService"><ref bean="patientService"/></property><property name="recordService"><ref bean="recordService"/></property><property name="recordXmlProcessorService"><ref bean="recordXmlProcessorService"/></property></bean></property></bean>
想要了解更多信息,請參見(jiàn)Overview of Transactions in WebLogic Server Applications 和 在Spring中實(shí)現事務(wù)掛起。
Java Management Extension(Java管理擴展,JMX)是用于監控和管理Java應用程序的規范。它使一般的管理系統能夠監控應用程序,當應用程序需要注意時(shí)發(fā)出通知,并修改應用程序狀態(tài)來(lái)補救問(wèn)題。Spring提供廣泛的JMX支持,包括通過(guò)Spring的MBeanServerConnectionFactoryBean公開(kāi)WebLogic Server的MBeanServer的能力。MBeanServerConnectionFactoryBean是一個(gè)使用方便的工廠(chǎng),它附帶了一個(gè)MBeanServerConnection。在應用程序部署期間,連接被建立并緩存,以便稍后由引用bean對其進(jìn)行操作。
可以配置MBeanServerConnectionFactoryBean,使其返回WebLogic Server的Runtime MBean Server,它會(huì )公開(kāi)特定WebLogic Server實(shí)例的監控、運行時(shí)控制和活動(dòng)配置。這包括對WebLogic Server的Diagnostics Framework的訪(fǎng)問(wèn)。此外,Runtime MBean還為當前服務(wù)器提供對運行時(shí)MBean和活動(dòng)配置MBean的訪(fǎng)問(wèn)。]
還可以配置MBeanServerConnectionFactoryBean,獲得一個(gè)到WebLogic Server的Domain Runtime MBean Server的連接。Domain Runtime MBean Server提供對域范圍內服務(wù)的訪(fǎng)問(wèn),比如應用程序部署、JMS服務(wù)器和JDBC數據源。它還是訪(fǎng)問(wèn)域中所有服務(wù)器的所有運行時(shí)MBean和活動(dòng)配置MBean層次結構的單點(diǎn)。這個(gè)MBean Server還用作訪(fǎng)問(wèn)位于托管服務(wù)器上的MBean的單點(diǎn)。
此外,可以配置MBeanServerConnectionFactoryBean,獲得一個(gè)到WebLogic Server的Edit MBean Server的連接。Edit MBean Server為管理當前WebLogic Server域配置提供入口點(diǎn)。
注意,WebLogic Server的Domain Runtime MBean Server在部署期間不是活動(dòng)的。因此,需要使用延遲初始化來(lái)配置bean,它會(huì )在調用bean時(shí)獲取該bean。
下面給出了一個(gè)使用WebLogic的MBean Server配置Spring的MBeanServerConnectionFactoryBean的例子:
<!-- expose WebLogic Server‘s runtimembeanserver connection --><bean id="runtimeMbeanServerConnection"class="org.springframework.jmx.support.MBeanServerConnectionFactoryBean"><property name="serviceUrl" value="service:jmx:t3://:/jndi/weblogic.management.mbeanservers.runtime"/><property name="environment"><props><prop key="java.naming.security.principle"></prop><prop key="java.naming.security.credentials"></prop><prop key="jmx.remote.protocol.provider.pkgs">weblogic.management.remote</prop></props></property></bean>
想要了解更多信息,請參見(jiàn)Understanding WebLogic Server MBeans 和Spring的 JMX支持。
從WebLogic Server 9.0和Spring 1.2.5開(kāi)始,BEA為Spring Framework on WebLogic Server提供了可用的支持和認證。這種支持不僅僅是對WebLogic Server上的Spring庫進(jìn)行健全的測試,而且還涉及到BEA與Interface 21——Spring Framework的創(chuàng )建者和維護者之間的共同努力和協(xié)作。我們不僅測試了上述的所有Spring 1.2.5的特性和配置,一些新特性還是直接作為BEA和Interface 21的協(xié)作成果引入Spring 1.2.5中的。有一些特性需要對WebLogic Server本身進(jìn)行調整,將來(lái)可以以Spring組合補丁的形式得到。
Spring Open Source Framework Support 1.2.5 download包括Spring 1.2.5(已在WebLogic Server 9.0上得到認證)、Spring JMX控制臺擴展以及使用Spring Framework重新編寫(xiě)的WebLogic Medical Records示例應用程序。
以后,我們計劃提供WebLogic Server與Spring Framework的更深層次的集成。我們已經(jīng)有了一些想法,其中比較有意思的是:
我們已經(jīng)花了一些時(shí)間來(lái)考察Spring、WebLogic Server以及這兩種技術(shù)的集成。正如我們所說(shuō)的那樣,Spring可以提高開(kāi)發(fā)人員的效率,而WebLogic Server可以提高應用程序的服務(wù)質(zhì)量。這兩種技術(shù)都是高度非侵入性的,因此用戶(hù)可以把精力集中在開(kāi)發(fā)應用程序的業(yè)務(wù)功能之上,而不是糾纏于特定于技術(shù)的API的錯綜復雜性。
聯(lián)系客服