Spring與WebLogic Server的集成

發表于:2007-06-22來源:作者:點擊數: 標簽:
摘要 BEA WebLogic Server 9.0是對Sun Microsystems的J2EE 1.4平臺的領先實現。然而,WebLogic Server的核心價值主張則體現在J2EE規范中沒有的領域——增強的管理、易用性、高可用性、可伸縮性、 可靠性 和 性能 。 實際上,WebLogic Server的價值并不與任何

   

  摘要

  BEA WebLogic Server 9.0是對Sun Microsystems的J2EE 1.4平臺的領先實現。然而,WebLogic Server的核心價值主張則體現在J2EE規范中沒有的領域——增強的管理、易用性、高可用性、可伸縮性、可靠性性能。

實際上,WebLogic Server的價值并不與任何特定的編程模型關聯,所以很自然地,它也適用于新出現的非J2EE編程模型。近年來出現的最激動人心的事物莫過于基于反向控制(Inversion of Control,IoC)的模型,而Spring Framework正是此類模型的領先實現。本文介紹了Spring Framework、WebLogic Server以及二者的集成的一些特性。我們將看到,整體大于部分之和。

  文章結構

  在前兩節中,我們將概覽Spring和WebLogic Server,并介紹它們各自的特性。熟悉Spring Framework的讀者可以跳過第一節。因為本文的主要目的是介紹兩種技術的集成,所以本文余下的部分都會集中在這一點上。為了提供一個上下文,我們首先剖析了MedRec——與WebLogic Server一起發行的一個示例應用程序——首先是以原始的J2EE形式,然后再使用Spring Framework重構。此后,我們將圍繞特定的集成點進行詳細的闡述。如果您打算在WebLogic Server上開發Spring應用程序,那么您肯定能從本文中找到對您有所幫助的細節。如果您只是想進行大概的了解,那么先閱讀標題,以后再了解其具體內容。最后,我們展望了一些正在考慮的未來開發工作。

  Spring簡介

  在本節中,我們將簡要概括Spring Framework的一些特性。
Spring 是一個分層的Java/J2EE應用框架,它基于Rod Johnson所著的《Expert One-on-One J2EE Design and Development》(Wrox,2002年)一書中所公布的代碼。Spring之所以存在,是因為我們相信,J2EE應該更加易用,而且我們可以使用更簡單的方法進行J2EE開發,同時又不犧牲平臺的性能。
Spring支持靈活的J2EE開發,并允許使用POJO開發J2EE應用程序。

  改進的Spring開發體驗

  Spring在其核心部分提供了一個易于配置的、XML驅動的反向控制(IoC)容器。IoC基于所謂的“好萊塢原則”——不要給我們打電話,我們會找你。在這種方案中,應用程序中Java對象之間的關系是由容器注入的,而不是通過直接編程實現的。注入分兩種形式——構造函數注入和setter注入,這取決于容器是通過其構造函數還是通過mutator方法把信息注入一個已創建的Java對象。
在Spring中,注入的屬性——或到其他bean的引用——是通過一個XML文件進行配置的,這使得配置變得非常直接。Spring與一個AOP框架耦合在一起,而該框架支持非侵入性地添加諸如事務和安全這樣的屬性,這意味著開發人員可以集中精力創建用于解決業務問題的解決方案,而不會為J2EE開發或配置的復雜性而頭痛。因為該容器是非侵入性的,所以您不必擔心業務代碼會被特定于供應商(此處也包括Spring)的工件所污染。

  Spring應用程序的組件

  正如我們所提到的那樣,Spring提供了一個輕量級的容器,用于提供集中式、自動化的配置和編寫應用程序對象。該容器是非侵入性的,能夠以一種一致而透明的方式,通過IoC把一組松散耦合的組件(POJO)組裝為一個復雜的系統。因為該容器允許首先獨立地開發和測試各軟件組件,然后在任意環境(J2SE或J2EE)中進行擴展部署,所以它具有靈活性和高利用率,并提高了應用程序的可測試性和可伸縮性。此外,Spring還提供了大量其他的對開發人員友好的特性,如下:

  • 一個用于事務管理的通用抽象層:支持可插入的事務管理器,并使得劃分事務更加容易,同時無需處理底層的問題。該層中還包括JTA策略和一個JDBC DataSource。與普通的JTA或EJB CMT不同,Spring的事務支持并不依賴于J2EE環境。
  • 一個JDBC抽象層:提供一種很有意義的異常層次結構(不用把供應商代碼從SQLException中抽取出來),簡化了錯誤處理,而且大大減少了必須編寫的代碼數量。不再需要編寫另一個finally塊來再次使用JCBC。面向JDBC的異常符合Spring的一般DAO異常層次結構。
  • 與行業領先的對象-關系映射解決方案的集成:主要在資源管理、DAO實現支持和事務策略等方面。Spring對大量IoC方便特性的一流支持,解決了許多典型的O-R映射集成問題。所有這些都符合Spring的一般事務和DAO異常層次結構。
  • AOP功能:完全集成到Spring配置管理中。您可以對Spring所管理的任何對象啟用AOP,添加像聲明性事務管理這樣的方面。借助于Spring,您可以擁有沒有EJB的聲明性事務管理——甚至也可以沒有JTA。
  • 一個靈活的MVC Web應用框架:構建在核心的Spring功能之上。該框架是高度可配置的(通過策略接口),并能適用多種視圖技術,比如JSP、Velocity、Tiles、iTexth和POI。注意,Spring中間層可以很容易地與基于其他任何Web MVC框架(如:Struts、WebWork或Tapestry)的Web層結合在一起。

  您可以在任何J2EE服務器中使用Spring的所有功能,也可以在非托管環境中使用其中的大部分功能。Spring的一個重心是支持可重用的業務和不依賴于特定的J2EE服務的數據訪問對象。這些對象可以不費事地跨J2EE環境(Web或EJB)、獨立應用程序和測試環境進行重用。

  Spring的分層架構提供了很多靈活性。它所有的功能都構建在較低的層次上。例如,您可以在不使用MVC框架或沒有AOP支持的情況下使用JavaBean配置管理。但是,如果您要使用Web MVC框架或AOP支持,您會發現它們構建在配置框架之上,所以您可以馬上用上有關它的知識。

  BEA WebLogic Server簡介

  在本節中,我們將簡要概括BEA WebLogic Server的特性,重點強調它所提供的底層基礎架構,而不是編程模型。

  WebLogic Server是一個可伸縮的企業級的J2EE應用服務器。WebLogic Server基礎架構支持多種分布式應用程序的部署,是構建任何種類的應用程序的理想基礎。

  WebLogic Server實現了Sun Microsystems的J2EE 1.4規范,提供了一組標準的API,用于創建可以訪問多種服務(如:數據庫、消息傳遞服務)的分布式Java應用程序和到外部企業系統的連接。終端用戶客戶使用Web瀏覽器客戶端或Java客戶端訪問這些應用程序。因為J2EE已經為大家所熟悉,這里我們不再詳細討論。更多信息,請參見WebLogic Server文檔中關于編程模型的部分。

  除了實現J2EE之外,WebLogic Server還使企業能夠在一個健壯、安全、高度可用和可伸縮的環境中部署任務關鍵型應用程序。這些特性允許企業配置WebLogic Server實例集群,以便分布負載,并在發生硬件或其他故障時提供額外的容量。新的診斷工具允許系統管理員監控和調優已部署應用程序和WebLogic Server環境本身的性能。您還可以配置WebLogic Server以自動監控和調整應用程序吞吐量,無需人工干預。廣泛的安全特性保護了對服務的訪問,保證了企業數據的安全,并阻止了惡意攻擊。

  WebLogic Server增強后的服務質量

  和其他許多BEA產品一樣,WebLogic Server就像冰山,浮在水上的不過是很小一部分而已。具體來說,WebLogic Server提供了大量特性和工具來支持高度可用和可伸縮的應用程序的部署。

  • WebLogic Server集群通過將工作負載分布在多個WebLogic Server實例之間,為應用程序提供可伸縮性和可靠性。根據要處理的工作量,可以把傳入的請求發送給集群中的某個WebLogic Server實例。在出現硬件或其他故障時,會話狀態對其他節點是可用的,這些節點可以恢復故障節點的工作。此外,您可以實現集群,使服務駐留在這樣的單個機器上:如果出現故障,該機器可以選擇把服務遷移到集群中的另一個節點上。
  • 除了跨一個集群中的多個服務器復制會話狀態之外,WebLogic Server還可以跨多個集群復制HTTP會話狀態,從而在多個地理區域、網格和Internet服務提供者中擴展可用性和容錯性。
  • Work Manager基于用戶所定義的規則對工作劃分優先級,并監控實際的運行時性能統計信息。這些信息隨后被用于優化應用程序的性能。Work Manager可以以全局方式應用于一個WebLogic Server域或一個特定的應用程序組件上。
  • 過載保護使WebLogic Server能夠檢測、避免過載情況并從其中恢復。
  • 網絡頻道基于流量類型把網絡流量分散到各個頻道中去,有利于網絡資源的有效使用。
  • WebLogic Server持久性存儲是一個性能卓越的內置存儲器解決方案,用于需要持久性存儲的WebLogic Server子系統和服務。例如,它可以保存持久性的JMS消息,或者暫時保存使用存儲-轉發特性發送的消息。持久性存儲支持到基于文件的存儲器或到支持JDBC的數據庫的持久性。
  • 存儲-轉發服務使WebLogic Server能夠在跨WebLogic Server實例分布的應用程序之間可靠地交付消息。如果發送消息時消息目的站不可用,或者出現了網絡問題或系統故障,那么消息就會被保存在本地的服務器實例上,然后一旦遠程目的站可用就轉發給它。
  • 企業級就緒部署工具方便了從開發階段到生產環境的應用程序部署和遷移。
  • 生產環境重新部署使企業能夠部署應用程序的新版本,而不會中斷老版本上正在進行的工作。

  現在,讓我們來看一看這兩個系統之間的協作。

  在J2EE和Spring環境中開發應用程序

  為比較J2EE和Spring開發方法的不同,我們使用Spring Framework重新編寫了MedRec示例應用程序。在接下來的一節中,我們將簡要地概覽MedRec的一般架構,然后依次看一看它的J2EE和Spring形式。

  Medical Records應用程序

  Avitek Medical Records(或MedRec)是一個WebLogic Server示例應用程序套件,它簡明地演示了J2EE平臺的各個方面。MedRec的設計目的是用作對各個層次的J2EE開發人員進行培訓的工具。它展示了如何使用每個J2EE組件,并說明了組件交互和客戶端開發的設計模式。MedRec還闡明了使用WebLogic Server開發和部署應用程序的最佳實踐。
MedRec背后的現實框架是一個患者、醫生和管理人員的框架,該框架使用各種不同的客戶端來管理患者數據。對于患者,MedRec為用戶提供了一個基于Web的應用程序,用于查看他們的醫療記錄和維護檔案文件。對于管理人員,MedRec提供了一個基于Web的應用程序,用于管理傳入的注冊、醫療記錄上傳和一般性的應用程序監控。MedRec還包含用于與獨立醫療機構接合的資源。為了演示這種通信,MedRec包含了一個醫生應用程序,用于請求和提供數據給MedRec的系統。

  MedRec J2EE版本架構概覽

  MedRec的J2EE和WebLogic Server版本是按照傳統的3層架構模型來設計和實現的,在該模型中,客戶端、服務器和數據存儲器都是相互獨立的:

  • 表示層:該層負責所有的用戶交互,有時也稱為客戶端層。
  • 服務層:該層是封裝了應用程序的業務邏輯的中間層。它處理來自異構客戶端的請求,同時與各種后端系統進行交互,包括數據存儲器。該層有時也稱為服務器層。
  • 企業信息系統(Enterprise Information System,EIS)層:該層代表那些提供和/或保存數據的系統,比如遺留應用程序和數據庫。EIS層有時也稱為數據存儲器。

  針對MedRec的患者管理應用程序,我們開發了一些Web應用程序(webapp),用于把服務公開給它們各自的用戶。webapp符合模型-視圖-控制器(Model-View-Controller)模式,Java Server Page呈現視圖給用戶,模型封裝要呈現給用戶和從用戶處捕捉而來的數據,而控制器機制則管理除與服務層的交互之外的組件交互。MedRec采用Jakarta Struts來實現該模式。

  服務層提供服務給發出請求的客戶端,并管理與后端應用程序和資源的交互。MedRec的服務層采用Session Facade模式來封裝業務邏輯和業務數據。Session Facade通過提供一個到分布式服務的接口,簡化了應用程序的復雜性。在MedRec中,Session Facade的首要責任是提供數據吞吐量。在MedRec的J2EE和WebLogic Server版本中,Session Facade被開發為無狀態的會話Enterprise JavaBean,而數據則是由實體Enterprise JavaBean來管理的。

  為了與外部實體相連接,MedRec通過Web服務公開應用程序功能,這允許不同系統之間使用一系列開放標準進行動態交互。通過使用Web服務公開服務,MedRec能夠為獨立的各方提供數據,或接受來自各方的數據,從而實現了集中式醫療記錄管理的首要目標。

圖1說明了MedRec的J2EE與WebLogic Server版本的高層架構。

Spring與WebLogic Server的集成(圖一)


圖1. J2EE版MedRec架構示意圖

  使用Spring重新表示MedRec

  為了使Spring能夠利用WebLogic Server的企業級特性,我們重新設計了MedRec的架構,以便使用Spring組件來代替相應的J2EE組件。我們把MedRec原始版本中的功能完全復制到了基于Spring的MedRec版本(MedRec-Spring)中。

  引入Spring的IoC是MedRec-Spring中最重要的變化。IoC機制功能強大,通過一個容器把依賴性注入到配置好的組件中而應用。IoC解除了應用程序代碼和其配置之間的耦合。例如,對象與它們的依賴性沒有關聯,所以它們可以專注于其職責。對于MedRec-Spring,企業資源(比如DataSourc、JMS服務、MBean連接和對等服務)在運行時被提供給MedRec-Spring的對象。此外,通過遷移資源配置和在已編譯代碼之外進行引用,在從特定于開發的資源轉移到位于中間的生產資源和環境時,應用程序更加易于管理。

  我們發現,要正確使用IoC,應用程序代碼需要遵守更加嚴格的Java編程規則——特別是在編寫接口的代碼時。接口比其他東西更能促進更好的協作,因為可以減輕依賴性,而且實現的變化被隔離開來。從IoC的角度看,接口支持依賴注入的可插入本性。為了利用IoC,我們對MedRec-Spring進行了重構,這樣就可以基于接口對業務對象進行編碼。

  在MedRec-Spring中,無狀態會話EJB被無格式普通Java對象(Plain Old Java Object,POJO)所代替。無狀態會話EJB的長處在于它們的遠程控制和事務管理功能。因為MedRec-Spring通過Spring的HTTP Invoker架構公開了服務bean,所以它能夠滿足遠程控制的要求。事務管理是由Spring的事務抽象層提供的。MedRec-Spring的事務管理精確地映射了MedRec的事務管理,因為Spring事務管理器被配置為把責任委托給WebLogic Server的JTA事務管理器。

  MedRec-Spring包含了原始MedRec的大部分消息收發功能。我們使用Spring的JMS包來簡化一些一般性的任務,比如連接工廠和目的站查找。Spring提供了一個代表消息收發目的站的對象,而不是通過編程獲得隊列句柄。和所有的Spring bean一樣,這些對象表示(JNDI名稱、連接工廠關聯,等等)是在已編譯代碼之外進行配置的。

  MedRec-Spring包含應用程序管理特性。這些特性對WebLogic Server的域配置和它的運行時域有影響。MedRec-Spring必須按照WebLogic Server的MBean Server行事,而Spring提供了連接管理來簡化MBean Server的可訪問性。

  最后,MedRec-Spring使用Web服務導出它的服務。Spring提供一個JAX-RPC工廠,該工廠為Web服務生成一個代理。類似于其他的Spring bean,工廠bean也是在已編譯代碼之外進行配置的,這使得應用程序更加靈活。

圖2顯示了基于Spring的MedRec版本的高層架構圖。

Spring與WebLogic Server的集成(圖二)


圖2. 基于Spring的MedRec版本的高層架構圖

  WebLogic Server上的Spring最佳實踐

  比較了J2EE和Spring環境中的MedRec架構之后,現在,我們要介紹一些在實現MedRec-Spring應用程序的過程中,我們所發現的一些寶貴經驗:

  • 使用延遲初始化。為了實現IoC容器,Spring加載了一個application context文件,并創建和緩存了每個已配置bean的實例。Spring bean引用的每項資源都必須可以實例化或查找,了解這一點很重要。例如,Spring的JMX支持提供到WebLogic Server的MBean服務器的連接。因為并非所有的MBean服務器都是在部署期間激活的,所以用戶應該在部署資源時,一啟動就使用Spring的延遲初始化和查找服務。
  • 基于功能分離出Spring配置。這允許應用程序組件只加載那些與它們的工作職責有關的上下文。在實踐上還允許測試人員修改應用程序的行為,具體方法是使用特定于測試環境的上下文來替換應用程序上下文——例如DataSource配置。
  • 通過JndiObjectFactoryBean封裝JDBC DataSource連接入池。然后,需要數據庫交互的bean可以引用這個bean,以便利用WebLogic Server的DataSource入池功能。
  • 對會話和消息驅動Enterprise JavaBean使用Spring的org.springframework.ejb.support。Spring的org.springframework.ejb.support提供Enterprise JavaBeans (EJB)可以對其進行擴展的抽象類。通過把EJB生命周期方法的標準實現包括進來,這些抽象EJB類可以輔助開發工作。更重要的是,這些類提供了加載Spring的應用程序上下文的機制,包括跨多個EJB和客戶端共享上下文,因此減少了EJB初始化期間的復制工作和負載。
  • 利用熱部署和WebLogic Server的拆分開發目錄環境。這極大地改善了集成測試期間的Spring開發體驗。熱部署允許在不重新啟動服務器的情況下重新加載應用程序。拆分目錄開發環境通過盡量減少不必要的文件復制,支持更快的開發和部署。拆分開發目錄Ant任務可以幫助用戶快速重新編譯和重新部署,無需首先生成可部署的存檔文件或展開的存檔目錄。
  • 把Spring庫打包為應用程序庫、可選擴展或服務器擴展。這允許幾個Spring應用程序共享Spring Framework,從而減少了應用程序所占用的內存。除了降低內存占用量外,這還提高了部署次數。

  Spring on WebLogic Server工具包

  為了幫助客戶使部署在WebLogic Server上的Spring應用程序發揮最大的功效,我們已經發布了一個經過認證的BEA發行版,其中包括Spring 1.2.5、MedRec on Spring應用程序以及其他的一些很不錯的工具。您可以從BEA的發行版Web站點上免費下載這個工具包。

  企業Spring

  Spring Framework的非侵入性IoC開發模型不但依賴于對J2EE應用服務器可用的特性集,而且旨在補充該特性集。事實上,在苛刻的生產環境中,底層應用服務器基礎架構所提供的服務質量對于Spring應用程序的可靠性、可用性和性能非常重要。WebLogic Server 9.0所提供的企業級特性可以增強Spring應用程序的所有方面。在本節中,我們將詳細討論這些特性,以及如何在Spring應用程序中利用它們。

  集群管理和部署

  一個WebLogic Server集群包括多個WebLogic Server服務器實例,這些服務器實例同時運行并一起工作,從而提高了可伸縮性和可靠性。對客戶端來說,集群就像單個的WebLogic Server實例一樣。構成集群的服務器實例既可以運行在同一臺機器上,也可以位于不同的機器上??梢酝ㄟ^在現有的機器上向集群添加另外的服務器實例,或者向集群添加機器以駐留增加的服務器實例,來提高集群的容量。WebLogic Server集群為Spring應用程序提供了一個企業級的部署平臺,雖然其他的技術產品也支持類似的特性,但是它們不具有WebLogic Server所提供的豐富性和易用性。參見Understanding Cluster Configuration and Application Deployment,其中有對WebLogic Server集群的配置和管理的全面討論。
Spring應用程序通常都被打包為web應用程序,這種情況下,要利用WebLogic Server集群就無需修改應用程序。只要把應用程序部署到集群中的服務器上,就可以獲得增強的可伸縮性和可用性。

  Spring會話復制

  Spring Web應用程序習慣在HTTP會話中保存信息,比如訂單ID和用戶信息。為了支持集群中servlet和JSP的自動復制和故障恢復,WebLogic Server支持幾種用于保持HTTP會話狀態的機制。只要為應用程序提供正確的weblogic.xml部署描述符,Spring Web應用程序就可以非侵入性地使用這些機制。參見配置各類會話持久性,可以獲得有關WebLogic Server 9.0的更多可用信息。

  集群化的Spring遠程控制

  Spring提供功能強大的遠程控制支持,允許用戶輕松導出和使用遠程服務,同時仍然可以利用基于POJO的一致編程模型。通過一個接合到適當的Spring bean的RMI接口,Vanilla Spring支持代理POJO調用。然而,這種支持僅限于JRMP(Sun的RMI實現),或者通過JndiRmiProxyFactoryBean使用特定的遠程接口。借助于Spring 1.2.5 on WebLogic Server 9.0認證,我們已經擴展了JndiRmiProxyFactoryBean和相關的服務導出程序——這樣它就能支持任何J2EE RMI實現的POJO代理,包括RMI-IIOP和T3。這方面的支持還包括一個WebLogic RMI部署描述符,它支持代理RMI接口上的集群化,所以POJO調用可以跨一個WebLogic Server集群進行負載均衡:

<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>

服務導出程序如下:

<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>

  集群化的描述符是自動包含在內的,只需要以適當方式配置集群和將Spring應用程序部署到所有集群成員中。參見故障恢復支持,可以獲得更多相關信息。

  對Spring組件的控制臺支持

  Spring on WebLogic Server工具包中包含一個WebLogic Server控制臺擴展,它顯示了定義在應用程序中的Spring bean、屬性和操作。它構建在WebLogic控制臺擴展門戶框架之上,該框架可以變換WebLogic Administration控制臺的外觀、功能和布局,而無需修改服務器或控制臺代碼。將控制臺擴展復制到yourdomain/console-ext目錄下,則重新啟動服務器時就部署了控制臺擴展。想要了解有關部署控制臺擴展的更多信息,可以參考Spring on WebLogic Server工具包。

  自動為不是MBean的Spring bean(大多數Spring bean)創建(JMX)管理接口,然后在applicationContext.xml中配置一個MbeanExporter,并指定哪些bean要通過匯編程序公開,這樣控制臺擴展就運行了。這項特性是Spring和WebLogic Server進行無縫和非侵入性合作的一個良好例證。要使應用程序支持JMX,只需修改應用程序上下文部署描述符。要使控制臺支持Spring,只需將一個簡單的jar部署到現有的域即可。

  Web服務支持

  Spring遠程控制功能的另一個方面是它對RPC風格Web服務的支持。WebLogic Server提供基于Ant的工具,用于基于Web服務的WSDL描述生成JAX-RPC存根。Web服務客戶端使用這些生成的存根來獲取代表服務器端操作的一個遠程接口。Spring提供了一個JaxRpcPortProxyFactoryBean來簡化了這個過程。我們發現,在WebLogic Server環境中配置JaxRpcPortProxyFactoryBean有些棘手,所以為了節約客戶的時間,我們給出下面這個代碼片斷,演示如何為一個包含復雜類型的Document Literal包裝的Web服務配置代理生成。

  大部分屬性都是自解釋的。其中有一些屬性比較有名:

  • serviceInterface是Spring的setter注入的副產品。這個類將表示Web服務操作。
  • customProperties屬性支持定制的WebLogic Server Web服務存根屬性。
  • jaxRpcService值被設置為WebLogic Server生成的JAX-RPC實現服務。JAX-RPC服務負責驗證Web服務和加載復雜的類型映射。為了實現后者,必須把WebLogic Server的JAX-RPC服務實現配置為Spring bean。這確保了JAX-RPC服務構造函數的執行,這也是加載類型映射文件的地方。

  把JaxRpcPortProxyFactoryBean上的lookupServiceOnStartup設置為false,可以關閉啟動期間的JAX-RPC服務查找。這樣,查找將在首次訪問時進行。這對于與WebLogic Server的可靠請求/響應Web服務通信的客戶端來說是必需的,而且此處的客戶端也必須是一個Web服務。通常在這些情況下,始發客戶端是與Web服務客戶端一起部署的。因為直到應用程序部署完成才會激活Web服務,所以客戶端Web服務對于Spring的上下文加載是不可用的。

<!-- reliable asynchronous Web service for sending new
  medical 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 its
  constructor which loads in type mappings -->
<bean id="generatedReliableService"
  class="com.bea.physician.webservices.client.PhysicianWebServices_Impl">
</bean>

  參見WebLogic Server的調用Web服務概覽和通過Spring使用遠程控制和Web服務,可以獲得進一步的信息。

  安全性

  WebLogic Server安全系統支持和擴展了J2EE安全性,同時提供一組豐富的安全提供程序,您可以對它們進行定制,然后使用它們來處理不同的安全性數據庫或安全性策略。除了使用標準的J2EE安全性之外,應用程序程序員還可以使用很多專有擴展,這些擴展使應用程序可以與安全系統緊密集成。WebLogic Server帶有幾個安全提供程序,例如,可以選擇包含大部分流行LDAP服務器的身份驗證數據庫、Active Directory、本地Windows和一個內置的身份驗證解決方案??梢允褂枚ㄖ频奶峁┏绦驅戎玫奶峁┏绦蜻M行擴充,從而幾乎可以與任意身份驗證數據庫、授權機制和憑證映射服務相集成。因為部署為webapp的Spring應用程序使用的是J2EE安全性,所以無需修改應用程序就可以獲得WebLogic Server的安全性優點。

  經驗豐富的Spring用戶還會熟悉Acegi——Spring自身的安全框架。目前,可以在應用程序中使用Acegi、WebLogic Server安全性,或同時使用二者,因為它們是相互獨立的。稍后我們將講述與此相關的更多信息。

  分布式事務

  Spring為事務管理提供了基礎架構。除了對各家數據庫供應商提供支持之外,Spring還通過一家J2EE供應商的JTA實現支持分布式事務。通過WebLogicJtaTransactionManager,可以把Spring的JTA管理器配置為與WebLogic Server的JTA實現一起工作。

  WebLogicJtaTransactionManager把責任直接委派給WebLogic Server的Java Transaction API。WebLogic Server的JTA TransactionManager接口可以通過JNDI為客戶端和bean提供者所用,而由Spring來管理這種交互。事務管理器還支持事務的作用域;事務可以作用于集群和域內部或二者之間。

  WebLogicJtaTransactionManager最強大的特性是管理分布式事務的能力和用于企業應用程序的兩階段提交協議。通過采用WebLogicJtaTransactionManager,應用程序可以通過WebLogic Administration Console來進行事務監控。WebLogicJtaTransactionManager還支持按數據庫(per-database)隔離級別,這種級別支持復雜的事務配置。

<!-- spring's transaction manager delegates to WebLogic
  Server'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">
      <bean
        class="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>

  想要了解更多信息,請參見Overview of Transactions in WebLogic Server Applications 和 在Spring中實現事務掛起。

  Java Management Extension

  Java Management Extension(Java管理擴展,JMX)是用于監控和管理Java應用程序的規范。它使一般的管理系統能夠監控應用程序,當應用程序需要注意時發出通知,并修改應用程序狀態來補救問題。Spring提供廣泛的JMX支持,包括通過Spring的MBeanServerConnectionFactoryBean公開WebLogic Server的MBeanServer的能力。MBeanServerConnectionFactoryBean是一個使用方便的工廠,它附帶了一個MBeanServerConnection。在應用程序部署期間,連接被建立并緩存,以便稍后由引用bean對其進行操作。

  可以配置MBeanServerConnectionFactoryBean,使其返回WebLogic Server的Runtime MBean Server,它會公開特定WebLogic Server實例的監控、運行時控制和活動配置。這包括對WebLogic Server的Diagnostics Framework的訪問。此外,Runtime MBean還為當前服務器提供對運行時MBean和活動配置MBean的訪問。]

  還可以配置MBeanServerConnectionFactoryBean,獲得一個到WebLogic Server的Domain Runtime MBean Server的連接。Domain Runtime MBean Server提供對域范圍內服務的訪問,比如應用程序部署、JMS服務器和JDBC數據源。它還是訪問域中所有服務器的所有運行時MBean和活動配置MBean層次結構的單點。這個MBean Server還用作訪問位于托管服務器上的MBean的單點。

  此外,可以配置MBeanServerConnectionFactoryBean,獲得一個到WebLogic Server的Edit MBean Server的連接。Edit MBean Server為管理當前WebLogic Server域配置提供入口點。

  注意,WebLogic Server的Domain Runtime MBean Server在部署期間不是活動的。因此,需要使用延遲初始化來配置bean,它會在調用bean時獲取該bean。
下面給出了一個使用WebLogic的MBean Server配置Spring的MBeanServerConnectionFactoryBean的例子:

<!-- expose WebLogic Server's runtime
  mbeanserver 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>

  想要了解更多信息,請參見Understanding WebLogic Server MBeans 和Spring的 JMX支持。

  支持

  從WebLogic Server 9.0和Spring 1.2.5開始,BEA為Spring Framework on WebLogic Server提供了可用的支持和認證。這種支持不僅僅是對WebLogic Server上的Spring庫進行健全的測試,而且還涉及到BEA與Interface 21——Spring Framework的創建者和維護者之間的共同努力和協作。我們不僅測試了上述的所有Spring 1.2.5的特性和配置,一些新特性還是直接作為BEA和Interface 21的協作成果引入Spring 1.2.5中的。有一些特性需要對WebLogic Server本身進行調整,將來可以以Spring組合補丁的形式得到。

  下載

  Spring Open Source Framework Support 1.2.5 download包括Spring 1.2.5(已在WebLogic Server 9.0上得到認證)、Spring JMX控制臺擴展以及使用Spring Framework重新編寫的WebLogic Medical Records示例應用程序。

  未來的工作

  以后,我們計劃提供WebLogic Server與Spring Framework的更深層次的集成。我們已經有了一些想法,其中比較有意思的是:

  • Spring部署單元:Spring應用程序通常被部署為webapp,但是為Spring應用程序提供一個專門的部署單元是可能的。
  • Acegi和WebLogic Server安全性集成:Acegi是Spring的安全框架,我們計劃將它與WebLogic Server的企業級安全框架進行集成。
  • 使用EJB 3.0實現持久性:因為一般情況下,Spring操縱的是POJO,您很可能需要某種對象-關系映射技術,以便持久化Spring bean。隨著EJB 3.0的出現,WebLogic Server將為實現這個目標提供一個標準化的機制。

  結束語

  我們已經花了一些時間來考察Spring、WebLogic Server以及這兩種技術的集成。正如我們所說的那樣,Spring可以提高開發人員的效率,而WebLogic Server可以提高應用程序的服務質量。這兩種技術都是高度非侵入性的,因此用戶可以把精力集中在開發應用程序的業務功能之上,而不是糾纏于特定于技術的API的錯綜復雜性。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97