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

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

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

    大鳥的學(xué)習(xí)樂(lè)園
    路漫漫其修遠(yuǎn)兮,吾將上下而求索
    posts - 26,comments - 27,trackbacks - 0
    【IT168技術(shù)文檔】

      您有沒(méi)有想過(guò),為什么會(huì)有六種事務(wù)劃分屬性(NotSupported、Required、Supports、RequiresNew、Mandatory和Never)?這六種都是由容器托管事務(wù) (CMT)的bean來(lái)支持的,但如果使用的是bean托管事務(wù)(BMT),EJB規(guī)范所能提供的功能難道就只有通過(guò)UserTransaction接口啟動(dòng)和提交/回滾事務(wù)嗎?顯然,CMT模型好像更強(qiáng)大,比如,BMT不能使當(dāng)前事務(wù)掛起然后恢復(fù),這就意味著在BMT bean中無(wú)法仿真RequiresNew和NotSupported劃分,至少是在使用UserTransaction接口時(shí)。

      雖然EJB規(guī)范并沒(méi)有解釋為什么會(huì)存在以上所提到的不對(duì)稱情況,但是在BMT模型中依然有一種用來(lái)使事務(wù)掛起然后恢復(fù)的合法方式。如果曾經(jīng)研究過(guò)javax.transaction包的內(nèi)容,您可能會(huì)注意到,與UserTransaction接口一起的還有一個(gè)TransactionManager接口,它看起來(lái)就像一個(gè)擴(kuò)展的UserTransaction:同樣的方法——begin()、commit()和rollback(),再加上suspend()和resume()。

      如果能從EJB中得到一個(gè)TransactionManager實(shí)現(xiàn),我們就可以實(shí)現(xiàn)編程式地使事務(wù)掛起然后恢復(fù)的目標(biāo)。雖然J2EE 1.3和EJB 2.0規(guī)范都未提到TransactionManager的可用性,但它們也都沒(méi)有明確表示禁止使用它。此外,對(duì)于CMT事務(wù)劃分,容器是從內(nèi)部使用Java Transaction API (JTA),因此,我們幾乎可以100%地肯定:TransactionManager是存在的,惟一的問(wèn)題只是在代碼中獲得對(duì)它的引用。

      在這篇文章中,我們將了解如何利用幾個(gè)流行的容器來(lái)獲得一個(gè)TransactionManager,以及如何用它來(lái)擴(kuò)展bean托管事務(wù)的功能,使它們和容器托管事務(wù)一樣強(qiáng)大。我們也將簡(jiǎn)述一些涉及使用這些高級(jí)功能的風(fēng)險(xiǎn),在文章的結(jié)尾,我們還將探討如何在流行的Spring框架中使用TransactionManager。

      在各種J2EE服務(wù)器中獲得TransactionManager的引用

      J2EE和EJB規(guī)范沒(méi)有描述任何獲得TransactionManager引用的標(biāo)準(zhǔn)方法,每個(gè)J2EE容器供應(yīng)商可以隨意將其放置在任何地方,甚至不需提供任何機(jī)制,就可以從應(yīng)用程序代碼中對(duì)它進(jìn)行訪問(wèn)。但在實(shí)踐中,如今所有的容器都有獲取它的機(jī)制。以下是一些如何從最流行的J2EE容器獲得TransactionManager引用的例子。

      拋出一個(gè)UserTransaction (WebLogic、Orion、OC4J)

      任何一個(gè)兼容J2EE的容器都必須使UserTransaction對(duì)象在JNDI中的java:comp/UserTransaction下可用。因?yàn)閁serTransaction接口是TransactionManager的子集,所以一些J2EE容器供應(yīng)商選擇為它們提供一種通用的實(shí)現(xiàn)。WebLogic 8、Orion 2和Oracle的OC4J EJB3預(yù)覽版都是這種方法的例子。在這些容器中,只要從JNDI中獲得一個(gè)UserTransaction對(duì)象,再把它轉(zhuǎn)到TransactionManager,就可以獲得對(duì)TransactionManager的引用。這可能是最簡(jiǎn)單的一種情況。
    private TransactionManager getFromUserTransaction()
    throws Exception{
    InitialContext ctx = new InitialContext();
    UserTransaction ut = (UserTransaction)
    ctx.lookup("java:comp/UserTransaction");
    if (ut instanceof TransactionManager){
    log("UserTransaction also TransactionManager");
    return (TransactionManager)ut;
    }
    return null;
    }
    直接從JNDI中獲取TransactionManager (JBoss、WebLogic)

      在JBoss 3和WebLogic 8中,可從JNDI獲取TransactionManager(雖然名稱不一樣),因此可以通過(guò)簡(jiǎn)單的查找而獲得:

    private TransactionManager getFromJNDI()
    throws Exception {
    InitialContext ctx = new InitialContext();
    try {
    // WebLogic
    return (TransactionManager)
    ctx.lookup("javax.transaction.TransactionManager");
    }
    catch (Exception e) { }

    try {
    // JBoss
    return (TransactionManager)
    ctx.lookup("java:/TransactionManager");
    }
    catch (Exception e) { }
    return null;
    }



    從一個(gè)定制的工廠獲取TransactionManager (Websphere)

      在WebSphere 4/5/6中,TransactionManager的引用要從工廠類中獲取。但是,麻煩的是,工廠類的名稱隨WebSphere版本的不同而有所改變。

    public TransactionManager getFromWebsphereFactory()
    throws Exception{
    try{
    // WebSphere 5.1 or 6.0
    return
    com.ibm.ws.Transaction.TransactionManagerFactory
    .getTransactionManager();
    }
    catch (ClassNotFoundException ex){}

    try{
    // WebSphere 5.0
    return
    com.ibm.ejs.jts.jta.TransactionManagerFactory
    .getTransactionManager();
    }
    catch (ClassNotFoundException ex){}

    try{
    // WebSphere 4.0
    com.ibm.ejs.jts.jta.JTSXA..getTransactionManager();
    }
    catch (ClassNotFoundException ex){ }

    return null;
    }

    posted on 2008-11-26 19:00 大鳥 閱讀(260) 評(píng)論(0)  編輯  收藏 所屬分類: JAVA
    主站蜘蛛池模板: 国产免费女女脚奴视频网| 花蝴蝶免费视频在线观看高清版| 永久黄色免费网站| 国产成人亚洲综合色影视| 中国国语毛片免费观看视频| 久久亚洲高清综合| 两个人看的www高清免费观看| 国产a v无码专区亚洲av| 成人av片无码免费天天看| 亚洲啪啪AV无码片| 三年片在线观看免费观看大全动漫| 亚洲国产日韩在线视频| 人妻丰满熟妇无码区免费| 亚洲国产精品久久久久婷婷软件| 69视频在线观看免费| 亚洲国产高清美女在线观看| 国产一卡二卡3卡四卡免费| 中文字幕亚洲情99在线| 国产hs免费高清在线观看| 四虎影视久久久免费观看| 亚洲日本va在线视频观看| 无码中文字幕av免费放dvd| 亚洲国产成人久久三区| 在线永久免费观看黄网站| 国产精品免费大片一区二区| 久久精品国产精品亚洲艾| 日韩欧毛片免费视频| 国产成人人综合亚洲欧美丁香花| 国产精品亚洲不卡一区二区三区| 久久青草免费91线频观看站街| 亚洲国产精品成人综合色在线婷婷| 天天摸天天碰成人免费视频| 一个人免费播放在线视频看片| 久久精品亚洲视频| a级毛片无码免费真人| 一区二区三区免费在线视频| 久久水蜜桃亚洲av无码精品麻豆| 青青青青青青久久久免费观看| 亚洲第一视频在线观看免费| 亚洲成a人片在线观| 亚洲精品久久久www|