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

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

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

    大鳥的學習樂園
    路漫漫其修遠兮,吾將上下而求索
    posts - 26,comments - 27,trackbacks - 0
    【IT168技術文檔】

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

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

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

      在這篇文章中,我們將了解如何利用幾個流行的容器來獲得一個TransactionManager,以及如何用它來擴展bean托管事務的功能,使它們和容器托管事務一樣強大。我們也將簡述一些涉及使用這些高級功能的風險,在文章的結尾,我們還將探討如何在流行的Spring框架中使用TransactionManager。

      在各種J2EE服務器中獲得TransactionManager的引用

      J2EE和EJB規范沒有描述任何獲得TransactionManager引用的標準方法,每個J2EE容器供應商可以隨意將其放置在任何地方,甚至不需提供任何機制,就可以從應用程序代碼中對它進行訪問。但在實踐中,如今所有的容器都有獲取它的機制。以下是一些如何從最流行的J2EE容器獲得TransactionManager引用的例子。

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

      任何一個兼容J2EE的容器都必須使UserTransaction對象在JNDI中的java:comp/UserTransaction下可用。因為UserTransaction接口是TransactionManager的子集,所以一些J2EE容器供應商選擇為它們提供一種通用的實現。WebLogic 8、Orion 2和Oracle的OC4J EJB3預覽版都是這種方法的例子。在這些容器中,只要從JNDI中獲得一個UserTransaction對象,再把它轉到TransactionManager,就可以獲得對TransactionManager的引用。這可能是最簡單的一種情況。
    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(雖然名稱不一樣),因此可以通過簡單的查找而獲得:

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



    從一個定制的工廠獲取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) 評論(0)  編輯  收藏 所屬分類: JAVA
    主站蜘蛛池模板: 亚在线观看免费视频入口| 视频一区在线免费观看| 13小箩利洗澡无码视频网站免费| 四虎影视永久免费观看网址| 亚洲精品美女久久久久久久| 精品久久久久国产免费| 亚洲区精品久久一区二区三区| 亚洲三级在线免费观看| 亚洲精品动漫在线| 免费99精品国产自在现线| 亚洲乱人伦精品图片| 日韩在线播放全免费| 亚洲日本人成中文字幕| 欧美大尺寸SUV免费| 亚洲AV无码一区二区三区性色| 国产嫩草影院精品免费网址| 边摸边脱吃奶边高潮视频免费| 亚洲色图综合在线| a毛片全部播放免费视频完整18| 亚洲AV无码国产精品麻豆天美| 久久久久久曰本AV免费免费| 亚洲中文字幕无码一去台湾 | 免费看无码自慰一区二区| 亚洲人成网站在线在线观看| 亚洲Av无码乱码在线znlu| 久久免费视频一区| 亚洲综合激情九月婷婷| 免费的涩涩视频在线播放| 一个人看的www免费高清| 久久久久亚洲精品影视| 国产精品美女午夜爽爽爽免费| 综合一区自拍亚洲综合图区 | 国产啪亚洲国产精品无码| 无码囯产精品一区二区免费 | 国产成人精品曰本亚洲79ren| 久久精品国产免费| 亚洲色成人WWW永久在线观看| 亚洲无线一二三四区手机| 污视频在线观看免费| 免费亚洲视频在线观看| 久久精品国产精品亚洲艾草网|