<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    沙漠中的魚

    欲上天堂,先下地獄
    posts - 0, comments - 56, trackbacks - 0, articles - 119
      BlogJava :: 首頁 ::  :: 聯系 :: 聚合  :: 管理

    Spring與WebSphere應用服務器的配合

    Posted on 2008-04-19 22:35 沙漠中的魚 閱讀(634) 評論(0)  編輯  收藏 所屬分類: 開源框架
    Spring與底層J2EE應用服務器還是存在一些需要結合的地方,這里給出WAS中的一些結合點。

      1 使用WAS數據源

      在Java應用程序中,數據庫的連接一般有兩種方式來得到。一種是通過java.sql.DriverManager的方式來得到數據庫連接。這種方式不依賴于應用服務的支持,但是也不提供數據庫連接池的功能。另外一種方式是通過javax.sql.DataSource的方式來得到數據庫連接。在傳統基于J2EE的應用需要通過JNDI來得到數據源(javax.sql.DataSource)對象,然后再通過數據源來得到相應的數據庫連接。常見的應用服務器都支持這種方式,且一般都提供了數據庫連接池的支持。雖然說我們一般推薦使用數據庫連接池,但是也有一些時候我們需要脫離開應用服務器的環境使用數據庫(比如單元測試,比如應用移植等)。然而應用程序使用這兩種方式的時候代碼是不一樣的,因此只能通過代碼來應變。Spring提供了一個統一使用數據源的解決方案,然后通過控制反轉的機制用外部配置文件來指定使用的數據源。這樣一方面可以統一這兩種得到數據庫連接的方式,另一方面也不需要像通常的J2EE應用通過繁瑣的JNDI代碼來得到數據源。這樣應用程序也就不需要知道使用的何種數據源。

      Spring提供了一個DriverManagerDataSource類來統一第一種方式的數據源獲取。如果使用WAS中的Cloudscape數據庫,用外部配置文件可配置如下:
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName">
    <value>com.ibm.db2j.jdbc.DB2jDriver</value>
    </property>
    <property name="url">
    <value>jdbc:db2j:D:\\DBName</value>
    </property>
    </bean>


            Spring提供了JndiObjectFactoryBean類來支持第二種方式的數據源獲取。假設WAS中已經配置好的數據源名稱為jdbc /MyDB,那么用外部配置文件可配置如下:

    <bean id="dataSource"
    class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName"><value>java:comp/env/jdbc/MyDB</value></property>
    </bean>

    或者

    <bean id="dataSource"
    class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName"><value>jdbc/MyDB</value></property>
    <property name="resourceRef"><value>true</value></property>
    </bean>

    從上面配置我們可以得知,通過使用Spring,應用程序能夠統一使用不同的數據源實現。如果使用環境發生變化,那么只需要修改Spring的配置文件即可。對于部署在WAS上的Web應用,在生產環境中推薦使用WAS實現的數據庫連接池。一方面是因為連接池實現地比較完善。另一方面,使用WAS提供的數據庫連接池可以很完善地支持JTA事務。

      2 使用WAS的JTA

      Web應用程序在使用事務的時候常常會涉及一個事務類型的選擇。是選擇像JDBC事務這樣的本地事務呢還是使用JTA支持的全局事務。這個與應用程序需要涉及到的事務管理器類型和個數密切相關。Spring本身不支持分布式事務,因此分布式事務需要底層的JTA。但是Spring提供了事務的抽象,即底層真正事務實現可以切換而不影響應用程序代碼。這樣應用程序可以依賴于底層WAS,也可以輕易地脫離開應用服務器的環境。這一點與前面數據源的抽象非常類似。

      WAS本身對于事務劃分有兩種支持方式,一種是聲明式的,當然這種管理方式需要EJB容器的支持,即所謂的容器管理事務(CMT)。另外一種方式是編程式的,通過程序代碼來直接使用JTA編程接口。Spring對于事務的劃分也可以分為聲明式和編程式兩種方式。對于Spring編程式的事務劃分方式,總體上可以分為兩大類。一類是通過直接使用實現PlatformTransactionManager接口的類。另一類是通過使用TransactionTemplate模板類,模板類的使用可以簡化事務控制代碼。Spring對于聲明式事務劃分的支持實際上是利用了它的AOP機制。相對于編程式事務劃分,這種基于AOP的方式比較靈活,而且對代碼的侵入性幾乎為零。因此,如果沒有特殊需要推薦使用這種事務劃分方式。基于AOP的常用事務劃分方式可以使用ProxyFactoryBean加TransactionInterceptor方式,或者使用TransactionPorxyFactoryBean的方式。前一種方式相對比較靈活,而后一種則對使用相對比較簡單。

      無論是哪一種事務劃分方式,底層都需要一個事務管理機制作為支撐。如果是單一的事務資源管理器,那么根據所使用的后臺事務管理資源不同的類型,可以選擇的PlatformTransactionManager實現有DataSourceTransactionManager,HibernateTransactionManager, JdoTransactionManager, PersistenceBrokerTransactionManager,和JmsTransactionManager等。無論是單個還是多個事務資源管理器,都可以使用JtaTransactionManager類。如果使用JtaTransactionManager,那么所有事務管理實際都會委托給底層應用服務器的JTA實現。

      例如,如果使用JDBC或iBATIS,那么我們可以使用簡單的DataSourceTransactionManager,外部配置文件片斷如下:

    <bean id="transactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource">
    <ref local="dataSource" />
    </property>
    </bean>

    如果使用Hibernate,那么我們可以使用HibernateTransactionManager,外部配置文件片斷如下:

    <bean id="transactionManager" class="org.springframework.orm.hibernate.
    HibernateTransactionManager">
    <property name="sessionFactory"><ref local="sessionFactory"/></property>
    </bean>

    使用WAS的JTA支持,我們只需要把上述對應bean中的class屬性改成class屬性改為org.springframework.transaction.jta.JtaTransactionManager,然后再把屬性改為WebSphere對應的TransactionManager,參考如下:

    <bean id="wasTxMgr"
    class="org.springframework.transaction.jta.WebSphereTransactionManagerFactoryBean"/>
    <bean id="transactionManager"
    class="org.springframework.transaction.jta.JtaTransactionManager">
    <property name="transactionManager">
    <ref local="wasTxMgr"/>
    </property>
    </bean>

    通過采用Spring的事務支持,底層事務采用何種方式的決定就不必在一開始開發就做出決定。因為我們能夠通過Spring的外部配置文件來進行切換真正的事務支持。不過,雖然也有第三方的JTA支持,但是WAS能夠提供非常穩定的XA支持,因此推薦使用WAS的JTA,尤其是當應用涉及到分布事務處理的時候。這樣無論應用涉及幾個事務資源都可以統一解決。

      3 如何加載Spring的JAR包

      Spring框架的核心JAR包是spring.jar,但是根據實際使用情況需要一些擴展JAR包和依賴JAR包。那在WAS中如何處理這些JAR包文件呢?在Web應用中一個簡單而直接的處理方式放是把這些使用到的JAR文件都拷貝到對應的WEB-INF/lib目錄下面。這種方法雖然簡單,但是當有多個Spring應用程序的時候這種處理方式就需要在每個應用的WEB-INF/lib目錄下都拷貝一份相同的JAR文件。這里可以通過共享庫的方式來統一解決類庫共享這個問題。

      共享庫就是WAS專門用來解決不同應用程序之間共享JAR或本地庫文件的一種機制。共享庫由一個名字、一個JAVA類路徑和/或一個裝載JNI庫本地庫路徑組成。它可以分別在單元,節點和服務器級別定義。但是共享庫定義了并不意味著它會被裝載,只有當這個共享庫與某個應用程序或應用服務器關聯之后,它才會被加載。如果一個共享庫與一個應用程序關聯,那么這個共享庫由應用程序類加載器加載。如果一個共享庫與應用服務器關聯,那么這個共享庫就需要一個專門定義的類加載器來加載。這個類加載器需要用戶自己定義。其操作如下:選應用服務器比如server1'類加載器'新建一個類加載器'加載器與共享庫關聯。

      在創建這個類加載器之前一般都需要預先定義好共享庫。 根據上面的介紹可知,通過共享庫解決Spring應用的JAR包共享問題,主要就是兩個步驟。一是,把Spring應用中需要共享的JAR包定義成為一個共享庫。二是,選定相應的WAS服務器實例,把它與上面創建的共享庫關聯起來。這樣此WAS服務器實例上的所有應用都能夠使用共享庫中定義的JAR包。使用共享庫這種方式的時候要注意理解類的裝載次序和方式。如果是這種與WAS服務器實例關聯的共享庫JAR包,其類加載器在層次結構上在應用程序類加載器上面,即是它的父加載器。關于WAS的類裝載器結構和策略可以進一步參考WAS信息中心。

    轉自:http://www.golddot.com.cn/article/2830/Article90448_4.htm

    http://www.golddot.com.cn/article/2830/Article90448_4.htm

    主站蜘蛛池模板: 成全高清在线观看免费| 国产精品免费视频观看拍拍| 麻豆高清免费国产一区| 亚洲午夜免费视频| 一个人免费日韩不卡视频| 婷婷精品国产亚洲AV麻豆不片| 国内精品一级毛片免费看| 亚洲av无码片在线播放| 一级毛片免费观看| 亚洲天堂一区二区三区四区| 免费无码A片一区二三区| 亚洲欧美日韩中文二区| 国产成人aaa在线视频免费观看| 国产偷国产偷亚洲高清在线| 免费va在线观看| 中文字幕免费在线观看动作大片| 久久久青草青青亚洲国产免观| 日本免费人成网ww555在线| 久久久亚洲AV波多野结衣| 特级做A爰片毛片免费69| 久久亚洲AV成人无码国产最大| 深夜国产福利99亚洲视频| 精选影视免费在线 | 亚洲视频在线观看视频| 2020久久精品国产免费| 亚洲AV无码专区在线厂| 亚洲日韩欧洲乱码AV夜夜摸| 蜜臀AV免费一区二区三区| 亚洲国产成人精品无码区二本| 不卡精品国产_亚洲人成在线| 无码国产精品一区二区免费16| 亚洲图片校园春色| 亚洲成a人片在线观看老师| 99re免费99re在线视频手机版| 最新国产精品亚洲| 亚洲精品无码专区在线在线播放 | 在线a亚洲v天堂网2019无码| 8090在线观看免费观看| 羞羞的视频在线免费观看| 亚洲色图在线播放| 国产无遮挡吃胸膜奶免费看|