<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 11.2.2\. 使用JTA 如果你的持久層運行在一個應用服務器中(例如,在EJB session beans的后面),Hibernate獲取 的每個數據源連接將自動成為全局JTA事務的一部分。 你可以安裝一個獨立的JTA實現,使用它而不使用EJB。Hibernate提供了兩種策略進行JTA集成。 如果你使用bean管理事務(BMT),可以通過使用Hibernate的 `Transaction` API來告訴 應用服務器啟動和結束BMT事務。因此,事務管理代碼和在非托管環境下是一樣的。 ``` // BMT idiom Session sess = factory.openSession(); Transaction tx = null; try { tx = sess.beginTransaction(); // do some work ... tx.commit(); } catch (RuntimeException e) { if (tx != null) tx.rollback(); throw e; // or display error message } finally { sess.close(); } ``` 如果你希望使用與事務綁定的`Session`,也就是使用`getCurrentSession()`來簡化上下文管理,你將不得不直接使用JTA `UserTransaction`API。 ``` // BMT idiom with getCurrentSession() try { UserTransaction tx = (UserTransaction)new InitialContext() .lookup("java:comp/UserTransaction"); tx.begin(); // Do some work on Session bound to transaction factory.getCurrentSession().load(...); factory.getCurrentSession().persist(...); tx.commit(); } catch (RuntimeException e) { tx.rollback(); throw e; // or display error message } ``` 在CMT方式下,事務聲明是在session bean的部署描述符中,而不需要編程。 因此,代碼被簡化為: ``` // CMT idiom Session sess = factory.getCurrentSession(); // do some work ... ``` 在CMT/EJB中甚至會自動rollback,因為假若有未捕獲的`RuntimeException`從session bean方法中拋出,這就會通知容器把全局事務回滾。_這就意味著,在BMT或者CMT中,你根本就不需要使用Hibernate `Transaction` API ,你自動得到了綁定到事務的“當前”Session。_ 注意,當你配置Hibernate的transaction factory的時候,在直接使用JTA的時候(BMT),你應該選擇`org.hibernate.transaction.JTATransactionFactory`,在CMT session bean中選擇`org.hibernate.transaction.CMTTransactionFactory`。記得也要設置`hibernate.transaction.manager_lookup_class`。還有,確認你的`hibernate.current_session_context_class`未設置(為了向下兼容),或者設置為`"jta"`。 `getCurrentSession()`在JTA環境中有一個弊端。對`after_statement`連接釋放方式有一個警告,這是被默認使用的。因為JTA規范的一個很愚蠢的限制,Hibernate不可能自動清理任何未關閉的`ScrollableResults` 或者`Iterator`,它們是由`scroll()`或`iterate()`產生的。你_must_通過在`finally`塊中,顯式調用`ScrollableResults.close()`或者`Hibernate.close(Iterator)`方法來釋放底層數據庫游標。(當然,大部分程序完全可以很容易的避免在JTA或CMT代碼中出現`scroll()`或`iterate()`。)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看