国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Spring與WebLogic Server的集成

摘要

  BEA WebLogic Server 9.0是對(duì)Sun Microsystems的J2EE 1.4平臺(tái)的領(lǐng)先實(shí)現(xiàn)。然而,WebLogic Server的核心價(jià)值主張則體現(xiàn)在J2EE規(guī)范中沒(méi)有的領(lǐng)域——增強(qiáng)的管理、易用性、高可用性、可伸縮性、可靠性和性能。實(shí)際上,WebLogic Server的價(jià)值并不與任何特定的編程模型關(guān)聯(lián),所以很自然地,它也適用于新出現(xiàn)的非J2EE編程模型。近年來(lái)出現(xiàn)的最激動(dòng)人心的事物莫過(guò)于基于反向控制(Inversion of Control,IoC)的模型,而Spring Framework正是此類(lèi)模型的領(lǐng)先實(shí)現(xiàn)。本文介紹了Spring Framework、WebLogic Server以及二者的集成的一些特性。我們將看到,整體大于部分之和。

文章結(jié)構(gòu)

  在前兩節(jié)中,我們將概覽Spring和WebLogic Server,并介紹它們各自的特性。熟悉Spring Framework的讀者可以跳過(guò)第一節(jié)。因?yàn)楸疚牡闹饕康氖墙榻B兩種技術(shù)的集成,所以本文余下的部分都會(huì)集中在這一點(diǎn)上。為了提供一個(gè)上下文,我們首先剖析了MedRec——與WebLogic Server一起發(fā)行的一個(gè)示例應(yīng)用程序——首先是以原始的J2EE形式,然后再使用Spring Framework重構(gòu)。此后,我們將圍繞特定的集成點(diǎn)進(jìn)行詳細(xì)的闡述。如果您打算在WebLogic Server上開(kāi)發(fā)Spring應(yīng)用程序,那么您肯定能從本文中找到對(duì)您有所幫助的細(xì)節(jié)。如果您只是想進(jìn)行大概的了解,那么先閱讀標(biāo)題,以后再了解其具體內(nèi)容。最后,我們展望了一些正在考慮的未來(lái)開(kāi)發(fā)工作。

Spring簡(jiǎn)介

  在本節(jié)中,我們將簡(jiǎn)要概括Spring Framework的一些特性。
Spring 是一個(gè)分層的Java/J2EE應(yīng)用框架,它基于Rod Johnson所著的《Expert One-on-One J2EE Design and Development》(Wrox,2002年)一書(shū)中所公布的代碼。Spring之所以存在,是因?yàn)槲覀兿嘈?,J2EE應(yīng)該更加易用,而且我們可以使用更簡(jiǎn)單的方法進(jìn)行J2EE開(kāi)發(fā),同時(shí)又不犧牲平臺(tái)的性能。
Spring支持靈活的J2EE開(kāi)發(fā),并允許使用POJO開(kāi)發(fā)J2EE應(yīng)用程序。

改進(jìn)的Spring開(kāi)發(fā)體驗(yàn)

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

Spring應(yīng)用程序的組件

  正如我們所提到的那樣,Spring提供了一個(gè)輕量級(jí)的容器,用于提供集中式、自動(dòng)化的配置和編寫(xiě)應(yīng)用程序?qū)ο?。該容器是非侵入性的,能夠以一種一致而透明的方式,通過(guò)IoC把一組松散耦合的組件(POJO)組裝為一個(gè)復(fù)雜的系統(tǒng)。因?yàn)樵撊萜髟试S首先獨(dú)立地開(kāi)發(fā)和測(cè)試各軟件組件,然后在任意環(huán)境(J2SE或J2EE)中進(jìn)行擴(kuò)展部署,所以它具有靈活性和高利用率,并提高了應(yīng)用程序的可測(cè)試性和可伸縮性。此外,Spring還提供了大量其他的對(duì)開(kāi)發(fā)人員友好的特性,如下:

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

  您可以在任何J2EE服務(wù)器中使用Spring的所有功能,也可以在非托管環(huán)境中使用其中的大部分功能。Spring的一個(gè)重心是支持可重用的業(yè)務(wù)和不依賴(lài)于特定的J2EE服務(wù)的數(shù)據(jù)訪問(wèn)對(duì)象。這些對(duì)象可以不費(fèi)事地跨J2EE環(huán)境(Web或EJB)、獨(dú)立應(yīng)用程序和測(cè)試環(huán)境進(jìn)行重用。

  Spring的分層架構(gòu)提供了很多靈活性。它所有的功能都構(gòu)建在較低的層次上。例如,您可以在不使用MVC框架或沒(méi)有AOP支持的情況下使用JavaBean配置管理。但是,如果您要使用Web MVC框架或AOP支持,您會(huì)發(fā)現(xiàn)它們構(gòu)建在配置框架之上,所以您可以馬上用上有關(guān)它的知識(shí)。

BEA WebLogic Server簡(jiǎn)介

  在本節(jié)中,我們將簡(jiǎn)要概括BEA WebLogic Server的特性,重點(diǎn)強(qiáng)調(diào)它所提供的底層基礎(chǔ)架構(gòu),而不是編程模型。

  WebLogic Server是一個(gè)可伸縮的企業(yè)級(jí)的J2EE應(yīng)用服務(wù)器。WebLogic Server基礎(chǔ)架構(gòu)支持多種分布式應(yīng)用程序的部署,是構(gòu)建任何種類(lèi)的應(yīng)用程序的理想基礎(chǔ)。

  WebLogic Server實(shí)現(xiàn)了Sun Microsystems的J2EE 1.4規(guī)范,提供了一組標(biāo)準(zhǔn)的API,用于創(chuàng)建可以訪問(wèn)多種服務(wù)(如:數(shù)據(jù)庫(kù)、消息傳遞服務(wù))的分布式Java應(yīng)用程序和到外部企業(yè)系統(tǒng)的連接。終端用戶(hù)客戶(hù)使用Web瀏覽器客戶(hù)端或Java客戶(hù)端訪問(wèn)這些應(yīng)用程序。因?yàn)镴2EE已經(jīng)為大家所熟悉,這里我們不再詳細(xì)討論。更多信息,請(qǐng)參見(jiàn)WebLogic Server文檔中關(guān)于編程模型的部分。

  除了實(shí)現(xiàn)J2EE之外,WebLogic Server還使企業(yè)能夠在一個(gè)健壯、安全、高度可用和可伸縮的環(huán)境中部署任務(wù)關(guān)鍵型應(yīng)用程序。這些特性允許企業(yè)配置WebLogic Server實(shí)例集群,以便分布負(fù)載,并在發(fā)生硬件或其他故障時(shí)提供額外的容量。新的診斷工具允許系統(tǒng)管理員監(jiān)控和調(diào)優(yōu)已部署應(yīng)用程序和WebLogic Server環(huán)境本身的性能。您還可以配置WebLogic Server以自動(dòng)監(jiān)控和調(diào)整應(yīng)用程序吞吐量,無(wú)需人工干預(yù)。廣泛的安全特性保護(hù)了對(duì)服務(wù)的訪問(wèn),保證了企業(yè)數(shù)據(jù)的安全,并阻止了惡意攻擊。

WebLogic Server增強(qiáng)后的服務(wù)質(zhì)量

  和其他許多BEA產(chǎn)品一樣,WebLogic Server就像冰山,浮在水上的不過(guò)是很小一部分而已。具體來(lái)說(shuō),WebLogic Server提供了大量特性和工具來(lái)支持高度可用和可伸縮的應(yīng)用程序的部署。

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

  現(xiàn)在,讓我們來(lái)看一看這兩個(gè)系統(tǒng)之間的協(xié)作。

在J2EE和Spring環(huán)境中開(kāi)發(fā)應(yīng)用程序

  為比較J2EE和Spring開(kāi)發(fā)方法的不同,我們使用Spring Framework重新編寫(xiě)了MedRec示例應(yīng)用程序。在接下來(lái)的一節(jié)中,我們將簡(jiǎn)要地概覽MedRec的一般架構(gòu),然后依次看一看它的J2EE和Spring形式。

Medical Records應(yīng)用程序

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

MedRec J2EE版本架構(gòu)概覽

  MedRec的J2EE和WebLogic Server版本是按照傳統(tǒng)的3層架構(gòu)模型來(lái)設(shè)計(jì)和實(shí)現(xiàn)的,在該模型中,客戶(hù)端、服務(wù)器和數(shù)據(jù)存儲(chǔ)器都是相互獨(dú)立的:

  • 表示層:該層負(fù)責(zé)所有的用戶(hù)交互,有時(shí)也稱(chēng)為客戶(hù)端層。
  • 服務(wù)層:該層是封裝了應(yīng)用程序的業(yè)務(wù)邏輯的中間層。它處理來(lái)自異構(gòu)客戶(hù)端的請(qǐng)求,同時(shí)與各種后端系統(tǒng)進(jìn)行交互,包括數(shù)據(jù)存儲(chǔ)器。該層有時(shí)也稱(chēng)為服務(wù)器層。
  • 企業(yè)信息系統(tǒng)(Enterprise Information System,EIS)層:該層代表那些提供和/或保存數(shù)據(jù)的系統(tǒng),比如遺留應(yīng)用程序和數(shù)據(jù)庫(kù)。EIS層有時(shí)也稱(chēng)為數(shù)據(jù)存儲(chǔ)器。

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

  服務(wù)層提供服務(wù)給發(fā)出請(qǐng)求的客戶(hù)端,并管理與后端應(yīng)用程序和資源的交互。MedRec的服務(wù)層采用Session Facade模式來(lái)封裝業(yè)務(wù)邏輯和業(yè)務(wù)數(shù)據(jù)。Session Facade通過(guò)提供一個(gè)到分布式服務(wù)的接口,簡(jiǎn)化了應(yīng)用程序的復(fù)雜性。在MedRec中,Session Facade的首要責(zé)任是提供數(shù)據(jù)吞吐量。在MedRec的J2EE和WebLogic Server版本中,Session Facade被開(kāi)發(fā)為無(wú)狀態(tài)的會(huì)話(huà)Enterprise JavaBean,而數(shù)據(jù)則是由實(shí)體Enterprise JavaBean來(lái)管理的。

  為了與外部實(shí)體相連接,MedRec通過(guò)Web服務(wù)公開(kāi)應(yīng)用程序功能,這允許不同系統(tǒng)之間使用一系列開(kāi)放標(biāo)準(zhǔn)進(jìn)行動(dòng)態(tài)交互。通過(guò)使用Web服務(wù)公開(kāi)服務(wù),MedRec能夠?yàn)楠?dú)立的各方提供數(shù)據(jù),或接受來(lái)自各方的數(shù)據(jù),從而實(shí)現(xiàn)了集中式醫(yī)療記錄管理的首要目標(biāo)。

圖1說(shuō)明了MedRec的J2EE與WebLogic Server版本的高層架構(gòu)。


圖1. J2EE版MedRec架構(gòu)示意圖

使用Spring重新表示MedRec

  為了使Spring能夠利用WebLogic Server的企業(yè)級(jí)特性,我們重新設(shè)計(jì)了MedRec的架構(gòu),以便使用Spring組件來(lái)代替相應(yīng)的J2EE組件。我們把MedRec原始版本中的功能完全復(fù)制到了基于Spring的MedRec版本(MedRec-Spring)中。

  引入Spring的IoC是MedRec-Spring中最重要的變化。IoC機(jī)制功能強(qiáng)大,通過(guò)一個(gè)容器把依賴(lài)性注入到配置好的組件中而應(yīng)用。IoC解除了應(yīng)用程序代碼和其配置之間的耦合。例如,對(duì)象與它們的依賴(lài)性沒(méi)有關(guān)聯(lián),所以它們可以專(zhuān)注于其職責(zé)。對(duì)于MedRec-Spring,企業(yè)資源(比如DataSourc、JMS服務(wù)、MBean連接和對(duì)等服務(wù))在運(yùn)行時(shí)被提供給MedRec-Spring的對(duì)象。此外,通過(guò)遷移資源配置和在已編譯代碼之外進(jìn)行引用,在從特定于開(kāi)發(fā)的資源轉(zhuǎn)移到位于中間的生產(chǎn)資源和環(huán)境時(shí),應(yīng)用程序更加易于管理。

  我們發(fā)現(xiàn),要正確使用IoC,應(yīng)用程序代碼需要遵守更加嚴(yán)格的Java編程規(guī)則——特別是在編寫(xiě)接口的代碼時(shí)。接口比其他東西更能促進(jìn)更好的協(xié)作,因?yàn)榭梢詼p輕依賴(lài)性,而且實(shí)現(xiàn)的變化被隔離開(kāi)來(lái)。從IoC的角度看,接口支持依賴(lài)注入的可插入本性。為了利用IoC,我們對(duì)MedRec-Spring進(jìn)行了重構(gòu),這樣就可以基于接口對(duì)業(yè)務(wù)對(duì)象進(jìn)行編碼。

  在MedRec-Spring中,無(wú)狀態(tài)會(huì)話(huà)EJB被無(wú)格式普通Java對(duì)象(Plain Old Java Object,POJO)所代替。無(wú)狀態(tài)會(huì)話(huà)EJB的長(zhǎng)處在于它們的遠(yuǎn)程控制和事務(wù)管理功能。因?yàn)镸edRec-Spring通過(guò)Spring的HTTP Invoker架構(gòu)公開(kāi)了服務(wù)bean,所以它能夠滿(mǎn)足遠(yuǎn)程控制的要求。事務(wù)管理是由Spring的事務(wù)抽象層提供的。MedRec-Spring的事務(wù)管理精確地映射了MedRec的事務(wù)管理,因?yàn)镾pring事務(wù)管理器被配置為把責(zé)任委托給WebLogic Server的JTA事務(wù)管理器。

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

  MedRec-Spring包含應(yīng)用程序管理特性。這些特性對(duì)WebLogic Server的域配置和它的運(yùn)行時(shí)域有影響。MedRec-Spring必須按照WebLogic Server的MBean Server行事,而Spring提供了連接管理來(lái)簡(jiǎn)化MBean Server的可訪問(wèn)性。

  最后,MedRec-Spring使用Web服務(wù)導(dǎo)出它的服務(wù)。Spring提供一個(gè)JAX-RPC工廠,該工廠為Web服務(wù)生成一個(gè)代理。類(lèi)似于其他的Spring bean,工廠bean也是在已編譯代碼之外進(jìn)行配置的,這使得應(yīng)用程序更加靈活。

圖2顯示了基于Spring的MedRec版本的高層架構(gòu)圖。


圖2. 基于Spring的MedRec版本的高層架構(gòu)圖

WebLogic Server上的Spring最佳實(shí)踐

  比較了J2EE和Spring環(huán)境中的MedRec架構(gòu)之后,現(xiàn)在,我們要介紹一些在實(shí)現(xiàn)MedRec-Spring應(yīng)用程序的過(guò)程中,我們所發(fā)現(xiàn)的一些寶貴經(jīng)驗(yàn):

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

Spring on WebLogic Server工具包

  為了幫助客戶(hù)使部署在WebLogic Server上的Spring應(yīng)用程序發(fā)揮最大的功效,我們已經(jīng)發(fā)布了一個(gè)經(jīng)過(guò)認(rèn)證的BEA發(fā)行版,其中包括Spring 1.2.5、MedRec on Spring應(yīng)用程序以及其他的一些很不錯(cuò)的工具。您可以從BEA的發(fā)行版Web站點(diǎn)上免費(fèi)下載這個(gè)工具包。

企業(yè)Spring

  Spring Framework的非侵入性IoC開(kāi)發(fā)模型不但依賴(lài)于對(duì)J2EE應(yīng)用服務(wù)器可用的特性集,而且旨在補(bǔ)充該特性集。事實(shí)上,在苛刻的生產(chǎn)環(huán)境中,底層應(yīng)用服務(wù)器基礎(chǔ)架構(gòu)所提供的服務(wù)質(zhì)量對(duì)于Spring應(yīng)用程序的可靠性、可用性和性能非常重要。WebLogic Server 9.0所提供的企業(yè)級(jí)特性可以增強(qiáng)Spring應(yīng)用程序的所有方面。在本節(jié)中,我們將詳細(xì)討論這些特性,以及如何在Spring應(yīng)用程序中利用它們。

集群管理和部署

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

Spring會(huì)話(huà)復(fù)制

  Spring Web應(yīng)用程序習(xí)慣在HTTP會(huì)話(huà)中保存信息,比如訂單ID和用戶(hù)信息。為了支持集群中servlet和JSP的自動(dòng)復(fù)制和故障恢復(fù),WebLogic Server支持幾種用于保持HTTP會(huì)話(huà)狀態(tài)的機(jī)制。只要為應(yīng)用程序提供正確的weblogic.xml部署描述符,Spring Web應(yīng)用程序就可以非侵入性地使用這些機(jī)制。參見(jiàn)配置各類(lèi)會(huì)話(huà)持久性,可以獲得有關(guān)WebLogic Server 9.0的更多可用信息。

集群化的Spring遠(yuǎn)程控制

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

<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ù)導(dǎo)出程序如下:<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)包含在內(nèi)的,只需要以適當(dāng)方式配置集群和將Spring應(yīng)用程序部署到所有集群成員中。參見(jiàn)故障恢復(fù)支持,可以獲得更多相關(guān)信息。

對(duì)Spring組件的控制臺(tái)支持

  Spring on WebLogic Server工具包中包含一個(gè)WebLogic Server控制臺(tái)擴(kuò)展,它顯示了定義在應(yīng)用程序中的Spring bean、屬性和操作。它構(gòu)建在WebLogic控制臺(tái)擴(kuò)展門(mén)戶(hù)框架之上,該框架可以變換WebLogic Administration控制臺(tái)的外觀、功能和布局,而無(wú)需修改服務(wù)器或控制臺(tái)代碼。將控制臺(tái)擴(kuò)展復(fù)制到y(tǒng)ourdomain/console-ext目錄下,則重新啟動(dòng)服務(wù)器時(shí)就部署了控制臺(tái)擴(kuò)展。想要了解有關(guān)部署控制臺(tái)擴(kuò)展的更多信息,可以參考Spring on WebLogic Server工具包。

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

Web服務(wù)支持

  Spring遠(yuǎn)程控制功能的另一個(gè)方面是它對(duì)RPC風(fēng)格Web服務(wù)的支持。WebLogic Server提供基于Ant的工具,用于基于Web服務(wù)的WSDL描述生成JAX-RPC存根。Web服務(wù)客戶(hù)端使用這些生成的存根來(lái)獲取代表服務(wù)器端操作的一個(gè)遠(yuǎn)程接口。Spring提供了一個(gè)JaxRpcPortProxyFactoryBean來(lái)簡(jiǎn)化了這個(gè)過(guò)程。我們發(fā)現(xiàn),在WebLogic Server環(huán)境中配置JaxRpcPortProxyFactoryBean有些棘手,所以為了節(jié)約客戶(hù)的時(shí)間,我們給出下面這個(gè)代碼片斷,演示如何為一個(gè)包含復(fù)雜類(lèi)型的Document Literal包裝的Web服務(wù)配置代理生成。

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

  • serviceInterface是Spring的setter注入的副產(chǎn)品。這個(gè)類(lèi)將表示W(wǎng)eb服務(wù)操作。
  • customProperties屬性支持定制的WebLogic Server Web服務(wù)存根屬性。
  • jaxRpcService值被設(shè)置為WebLogic Server生成的JAX-RPC實(shí)現(xiàn)服務(wù)。JAX-RPC服務(wù)負(fù)責(zé)驗(yàn)證Web服務(wù)和加載復(fù)雜的類(lèi)型映射。為了實(shí)現(xiàn)后者,必須把WebLogic Server的JAX-RPC服務(wù)實(shí)現(xiàn)配置為Spring bean。這確保了JAX-RPC服務(wù)構(gòu)造函數(shù)的執(zhí)行,這也是加載類(lèi)型映射文件的地方。

  把JaxRpcPortProxyFactoryBean上的lookupServiceOnStartup設(shè)置為false,可以關(guān)閉啟動(dòng)期間的JAX-RPC服務(wù)查找。這樣,查找將在首次訪問(wèn)時(shí)進(jìn)行。這對(duì)于與WebLogic Server的可靠請(qǐng)求/響應(yīng)Web服務(wù)通信的客戶(hù)端來(lái)說(shuō)是必需的,而且此處的客戶(hù)端也必須是一個(gè)Web服務(wù)。通常在這些情況下,始發(fā)客戶(hù)端是與Web服務(wù)客戶(hù)端一起部署的。因?yàn)橹钡綉?yīng)用程序部署完成才會(huì)激活Web服務(wù),所以客戶(hù)端Web服務(wù)對(duì)于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的調(diào)用Web服務(wù)概覽通過(guò)Spring使用遠(yuǎn)程控制和Web服務(wù),可以獲得進(jìn)一步的信息。

安全性

  WebLogic Server安全系統(tǒng)支持和擴(kuò)展了J2EE安全性,同時(shí)提供一組豐富的安全提供程序,您可以對(duì)它們進(jìn)行定制,然后使用它們來(lái)處理不同的安全性數(shù)據(jù)庫(kù)或安全性策略。除了使用標(biāo)準(zhǔn)的J2EE安全性之外,應(yīng)用程序程序員還可以使用很多專(zhuān)有擴(kuò)展,這些擴(kuò)展使應(yīng)用程序可以與安全系統(tǒng)緊密集成。WebLogic Server帶有幾個(gè)安全提供程序,例如,可以選擇包含大部分流行LDAP服務(wù)器的身份驗(yàn)證數(shù)據(jù)庫(kù)、Active Directory、本地Windows和一個(gè)內(nèi)置的身份驗(yàn)證解決方案??梢允褂枚ㄖ频奶峁┏绦?qū)?nèi)置的提供程序進(jìn)行擴(kuò)充,從而幾乎可以與任意身份驗(yàn)證數(shù)據(jù)庫(kù)、授權(quán)機(jī)制和憑證映射服務(wù)相集成。因?yàn)椴渴馂閣ebapp的Spring應(yīng)用程序使用的是J2EE安全性,所以無(wú)需修改應(yīng)用程序就可以獲得WebLogic Server的安全性?xún)?yōu)點(diǎn)。

  經(jīng)驗(yàn)豐富的Spring用戶(hù)還會(huì)熟悉Acegi——Spring自身的安全框架。目前,可以在應(yīng)用程序中使用Acegi、WebLogic Server安全性,或同時(shí)使用二者,因?yàn)樗鼈兪窍嗷オ?dú)立的。稍后我們將講述與此相關(guān)的更多信息。

分布式事務(wù)

  Spring為事務(wù)管理提供了基礎(chǔ)架構(gòu)。除了對(duì)各家數(shù)據(jù)庫(kù)供應(yīng)商提供支持之外,Spring還通過(guò)一家J2EE供應(yīng)商的JTA實(shí)現(xiàn)支持分布式事務(wù)。通過(guò)WebLogicJtaTransactionManager,可以把Spring的JTA管理器配置為與WebLogic Server的JTA實(shí)現(xiàn)一起工作。

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

  WebLogicJtaTransactionManager最強(qiáng)大的特性是管理分布式事務(wù)的能力和用于企業(yè)應(yīng)用程序的兩階段提交協(xié)議。通過(guò)采用WebLogicJtaTransactionManager,應(yīng)用程序可以通過(guò)WebLogic Administration Console來(lái)進(jìn)行事務(wù)監(jiān)控。WebLogicJtaTransactionManager還支持按數(shù)據(jù)庫(kù)(per-database)隔離級(jí)別,這種級(jí)別支持復(fù)雜的事務(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>

  想要了解更多信息,請(qǐng)參見(jiàn)Overview of Transactions in WebLogic Server Applications在Spring中實(shí)現(xiàn)事務(wù)掛起。

Java Management Extension

  Java Management Extension(Java管理擴(kuò)展,JMX)是用于監(jiān)控和管理Java應(yīng)用程序的規(guī)范。它使一般的管理系統(tǒng)能夠監(jiān)控應(yīng)用程序,當(dāng)應(yīng)用程序需要注意時(shí)發(fā)出通知,并修改應(yīng)用程序狀態(tài)來(lái)補(bǔ)救問(wèn)題。Spring提供廣泛的JMX支持,包括通過(guò)Spring的MBeanServerConnectionFactoryBean公開(kāi)WebLogic Server的MBeanServer的能力。MBeanServerConnectionFactoryBean是一個(gè)使用方便的工廠,它附帶了一個(gè)MBeanServerConnection。在應(yīng)用程序部署期間,連接被建立并緩存,以便稍后由引用bean對(duì)其進(jìn)行操作。

  可以配置MBeanServerConnectionFactoryBean,使其返回WebLogic Server的Runtime MBean Server,它會(huì)公開(kāi)特定WebLogic Server實(shí)例的監(jiān)控、運(yùn)行時(shí)控制和活動(dòng)配置。這包括對(duì)WebLogic Server的Diagnostics Framework的訪問(wèn)。此外,Runtime MBean還為當(dāng)前服務(wù)器提供對(duì)運(yùn)行時(shí)MBean和活動(dòng)配置MBean的訪問(wèn)。]

  還可以配置MBeanServerConnectionFactoryBean,獲得一個(gè)到WebLogic Server的Domain Runtime MBean Server的連接。Domain Runtime MBean Server提供對(duì)域范圍內(nèi)服務(wù)的訪問(wèn),比如應(yīng)用程序部署、JMS服務(wù)器和JDBC數(shù)據(jù)源。它還是訪問(wèn)域中所有服務(wù)器的所有運(yùn)行時(shí)MBean和活動(dòng)配置MBean層次結(jié)構(gòu)的單點(diǎn)。這個(gè)MBean Server還用作訪問(wèn)位于托管服務(wù)器上的MBean的單點(diǎn)。

  此外,可以配置MBeanServerConnectionFactoryBean,獲得一個(gè)到WebLogic Server的Edit MBean Server的連接。Edit MBean Server為管理當(dāng)前WebLogic Server域配置提供入口點(diǎn)。

  注意,WebLogic Server的Domain Runtime MBean Server在部署期間不是活動(dòng)的。因此,需要使用延遲初始化來(lái)配置bean,它會(huì)在調(diào)用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>

  想要了解更多信息,請(qǐng)參見(jiàn)Understanding WebLogic Server MBeans 和Spring的 JMX支持。

支持

  從WebLogic Server 9.0和Spring 1.2.5開(kāi)始,BEA為Spring Framework on WebLogic Server提供了可用的支持和認(rèn)證。這種支持不僅僅是對(duì)WebLogic Server上的Spring庫(kù)進(jìn)行健全的測(cè)試,而且還涉及到BEA與Interface 21——Spring Framework的創(chuàng)建者和維護(hù)者之間的共同努力和協(xié)作。我們不僅測(cè)試了上述的所有Spring 1.2.5的特性和配置,一些新特性還是直接作為BEA和Interface 21的協(xié)作成果引入Spring 1.2.5中的。有一些特性需要對(duì)WebLogic Server本身進(jìn)行調(diào)整,將來(lái)可以以Spring組合補(bǔ)丁的形式得到。

下載

  Spring Open Source Framework Support 1.2.5 download包括Spring 1.2.5(已在WebLogic Server 9.0上得到認(rèn)證)、Spring JMX控制臺(tái)擴(kuò)展以及使用Spring Framework重新編寫(xiě)的WebLogic Medical Records示例應(yīng)用程序。

未來(lái)的工作

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

  • Spring部署單元:Spring應(yīng)用程序通常被部署為webapp,但是為Spring應(yīng)用程序提供一個(gè)專(zhuān)門(mén)的部署單元是可能的。
  • Acegi和WebLogic Server安全性集成:Acegi是Spring的安全框架,我們計(jì)劃將它與WebLogic Server的企業(yè)級(jí)安全框架進(jìn)行集成。
  • 使用EJB 3.0實(shí)現(xiàn)持久性:因?yàn)橐话闱闆r下,Spring操縱的是POJO,您很可能需要某種對(duì)象-關(guān)系映射技術(shù),以便持久化Spring bean。隨著EJB 3.0的出現(xiàn),WebLogic Server將為實(shí)現(xiàn)這個(gè)目標(biāo)提供一個(gè)標(biāo)準(zhǔn)化的機(jī)制。

結(jié)束語(yǔ)

  我們已經(jīng)花了一些時(shí)間來(lái)考察Spring、WebLogic Server以及這兩種技術(shù)的集成。正如我們所說(shuō)的那樣,Spring可以提高開(kāi)發(fā)人員的效率,而WebLogic Server可以提高應(yīng)用程序的服務(wù)質(zhì)量。這兩種技術(shù)都是高度非侵入性的,因此用戶(hù)可以把精力集中在開(kāi)發(fā)應(yīng)用程序的業(yè)務(wù)功能之上,而不是糾纏于特定于技術(shù)的API的錯(cuò)綜復(fù)雜性。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
結(jié)合SPRING 2.0使用JAVA PERSISTENCE API
針對(duì)開(kāi)發(fā)人員的WebLogic Server應(yīng)用管理,第4部分--使用JMX編寫(xiě)自定義Java應(yīng)用程序
《J2EE應(yīng)用與BEA WebLogic Server》
WebLogic Server 的最佳調(diào)整建議
CSDN 文檔中心:針對(duì)開(kāi)發(fā)人員的WebLogic Server應(yīng)用管理,第 2 部分
真正的java學(xué)習(xí)從入門(mén)到精通
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服