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

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

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

    OMG,到底在尋找什么..................
    (構造一個完美的J2EE系統所需要的完整知識體系)
    posts - 198,  comments - 37,  trackbacks - 0

    轉貼地址:http://spring.jactiongroup.net/viewtopic.php?p=5305&sid=db136be488b88cb911bf4903611c2ac7

    JTA UserTransaction與JTA TransactionManager

      讓我們來看一些Spring的JTA支持的詳細情況。雖然理解該機制是很有幫助的,但是通常不必為之擔心。對于像前面的小節所展示的簡單用例,只需要一個標準的JtaTransactionManager定義,以及由J2EE服務器提供的支持XA規范的DataSource。

      默認的Spring JtaTransactionManager設置將從標準的JNDI位置獲取JTA的 javax.transaction.UserTransaction對象,該JNDI位置由J2EE指定:java: comp/UserTransaction。對于大多數標準J2EE環境下的用例來說,它工作良好。

      但是,默認的JtaTransactionManager不能執行事務掛起操作(即它不支持PROPAGATION_REQUIRES_NEW 和PROPAGATION_NOT_SUPPORTED)。原因是標準的JTA UserTransaction接口不支持掛起或恢復事務的操作;它只支持開始和完成新事務的操作。

      為執行事務掛起操作,還需要提供javax.transaction.TransactionManager實例,按照JTA的規定,它提供標準的掛起和恢復方法。遺憾的是,J2EE沒有為JTA TransactionManager定義標準的JNDI位置!因此,必須使用特定于供應商的(vendor-specific)查尋機制。
    代碼:

    <bean id="transactionManager"
    ?? class="org.springframework.transaction.jta.JtaTransactionManager">
    ???? <property name="transactionManagerName">
    ??????? <value>vendorSpecificJndiLocation</value>
    ???? </property>
    </bean>

    ?


    實質上,J2EE沒有考慮把JTA TransactionManager接口作為它的公開API的一部分。JTA規范規定的TransactionManager接口原本是打算用于容器集成的。雖然這可以理解,但是為JTA TransactionManager定義標準的JNDI位置還是有重大意義的,尤其是對于輕量級容器(如Spring);然后,便可以以同樣的方式來定位任意的J2EE服務器的JTA TransactionManager。

      不僅Spring的JtaTransactionManager將從對JTA TransactionManager的訪問中獲益,而且O/R映射工具,比如Hibernate、Apache OJB和Kodo JDO也將從中受益,因為他們需要利用該接口在JTA環境中執行緩存同步--即在JTA事務完成時釋放緩存鎖。注冊事務同步的能力只能由JTA TransactionManager接口而不是UserTransaction句柄提供。因此,每個工具都需要實現自己特定于供應商的 TransactionManager查尋適配器。

      為JTA TransactionManager定義標準的JNDI位置是許多基礎架構軟件供應商在J2EE方面的強烈愿望。如果J2EE 5.0規范的開發團隊能意識到該功能的重要性,那就太好了。幸運的是,優秀的J2EE服務器(如WebLogic Server)已經考慮將其JTA TransactionManager作為公開的API,包括特定于供應商的擴展!

    結合了WebLogic JTA的Spring事務劃分

      對于WebLogic Server,JTA TransactionManager的正式JNDI位置是javax.transaction.TransactionManager。在Spring 的JtaTransactionManager中,該值可被指定為“transactionManagerName”。一般來說,這啟用了使用 WebLogic JTA子系統的Spring驅動的事務掛起,激活了對PROPAGATION_REQUIRES_NEW和 PROPAGATION_NOT_SUPPORTED的支持。 代碼:

    <bean id="transactionManager"
    ?? class="org.springframework.transaction.jta.JtaTransactionManager">
    ?<property name="transactionManagerName">
    ?? <value>javax.transaction.TransactionManager</value>
    ?</property>
    </bean>

    ?

    除了標準的JtaTransactionManager和它所支持的通用配置選項,Spring還支持一種特殊的WebLogicJtaTransactionManager適配器,它直接利用WebLogic的JTA擴展。

    <bean id="transactionManager" class="org.springframework.transaction.jta.WebLogicJtaTransactionManager"/>

      除了自動檢測WebLogic的JTA TransactionManager,它還支持不屬于標準JTA的三個重要特性:

    事務名稱(Transaction name)--將Spring的事務名稱暴露給WebLogic Server,使Spring事務在WebLogic的事務監視器上可見。默認的情況下,Spring將對聲明性事務使用全限定方法名。
    按事務的隔離級別(Per-transaction isolation level)--將Spring事務屬性中指定的隔離級別應用到WebLogic JTA事務。這支持按事務指定數據庫的隔離級別,而標準的JTA并不支持。
    強制性事務恢復(Enforcing transaction resume)--恢復WebLogic事務,即使掛起的事務已標記為rollback-only(只能回滾)。這要求調用forceResume()方法,使用WebLogic底層的擴展的TransactionManager接口。

      
    下面的圖像顯示的是WebLogic Server的事務監視器,它按名稱列出了一組Spring驅動的事務:

    ?

    圖2. WebLogic Server的事務監視器(點擊圖片查看大圖)

    Spring的WebLogicJtaTransactionManager實際上暴露了WebLogic Server的事務管理器針對基于Spring的應用程序的全部功能。它使Spring事務劃分成為EJB CMT的一個極具吸引人的替代方案,而且它提供同級別的事務支持。

      注意,只有實際需要掛起事務或使用WebLogic的JTA擴展時,才需要對特定于WebLogic的JTA進行設置。對于標準的事務劃分(如PROPAGATION_REQUIRED或PROPAGATION_SUPPORTS),標準的JTA設置就足夠了。


    Spring和EJB CMT

      如上所述,針對POJO的Spring聲明性事務劃分可以看作傳統的EJB CMT的替代方案。但是,Spring和EJB并不是互相排斥的。Spring應用程序上下文也可以作為EJB外觀的后端,管理數據訪問對象(DAO)和其它的細粒度業務對象。

      在EJB場景中,事務由EJB CMT驅動。Spring的數據訪問支持會自動地檢測這樣的環境并進行相應的調整。例如,Spring的Hibernate支持將為其隱式資源管理提供 EJB驅動的事務,就像它提供Spring驅動的事務一樣。它甚至提供相同的語義,而不需要對DAO代碼做任何修改。

      Spring有效地將DAO實現從實際的運行時環境中分離出來。DAO可以參與到Spring事務(以哪個事務策略作為后端都可以)和EJB CMT事務中。這不僅支持其它環境中的重用,還支持在J2EE容器之外的測試中直接使用。

    結束語

      Spring Framework為J2EE和非J2EE環境提供了完善的事務劃分功能,具體來說就是為純Java目標對象提供聲明性事務。這允許在沒有EJB的情況下,以一種靈活和非入侵的方式便捷地進行事務劃分。與EJB相比,這些事務POJO應用程序對象可以在J2EE容器之外輕松地測試或重用。

      Spring提供了多種開箱即用的事務策略,比如JtaTransactionManager和JDBC DataSourceTransactionManager,前者委托給J2EE服務器的事務協調程序,后者則針對單個JDBC DataSource(即單個的目標數據庫)執行事務。通過對后端配置進行簡單的更改,Spring就能夠輕松地調整事務策略適應另一個環境。

      除了標準的JTA支持,Spring還提供與WebLogic Server的JTA擴展的完善集成,支持一些高級特性(如事務監控和按事務的隔離級別)。通過這種專門的WebLogic Server支持,WebLogic的事務管理器的全部功能都可應用于基于Spring的應用程序。

      Spring事務劃分是對EJB CMT的極具吸引人的替代方案,特別是與基于POJO的輕量級架構結合后。在一個聲明性事務是選擇Local Stateless Session Bean(局部無狀態會話Bean)的惟一原因的場景中,基于Spring的POJO服務模型是一個可行的選擇,它提供更高水平的靈活性、可測試性和重用。


    參考資料

    Spring Framework--Spring的官方web站點。
    Spring 參考手冊
    JTA規范。 http://java.sun.com/products/jta/
    WebLogic JTA--WebLogic的JTA擴展的說明文檔
    http://e-docs.bea.com/wls/docs81/jta/jtaapi.html#1053904

    posted on 2006-10-24 09:04 OMG 閱讀(2200) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    <2006年10月>
    24252627282930
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    IT風云人物

    文檔

    朋友

    相冊

    經典網站

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久久久久亚洲Av无码精品专口 | 亚洲日韩国产一区二区三区| 99热亚洲色精品国产88| 免费下载成人电影| 最新亚洲春色Av无码专区 | 亚洲人午夜射精精品日韩| 亚洲精品视频免费| 亚洲欭美日韩颜射在线二| 光棍天堂免费手机观看在线观看| 午夜亚洲国产理论秋霞| 在线a免费观看最新网站| 亚洲不卡中文字幕| 日本不卡高清中文字幕免费| 特级毛片A级毛片100免费播放| 成人亚洲性情网站WWW在线观看| 成人毛片100免费观看| 亚洲首页在线观看| 在线视频观看免费视频18| 国产成人亚洲综合在线| 曰韩亚洲av人人夜夜澡人人爽 | 成在线人免费无码高潮喷水| 亚洲av之男人的天堂网站| 最近中文字幕高清免费中文字幕mv| 亚洲不卡视频在线观看| 国产gav成人免费播放视频| 在线视频网址免费播放| 亚洲精品中文字幕无码AV| 成年女人免费碰碰视频| 成年免费大片黄在线观看com| 久久亚洲精品成人| 在线观看免费污视频| 国产免费AV片在线观看播放| 亚洲综合久久久久久中文字幕| 全免费a级毛片免费**视频| 国产精品免费一区二区三区| 亚洲第一成年网站大全亚洲| 四虎亚洲国产成人久久精品| 在线观看免费av网站| 免费国产在线精品一区| 亚洲的天堂av无码| 亚洲一区二区三区在线播放|