我的 前一篇文章 描述了在 WebLogic 8.1 上配置 Hibernate 3.0 的具體步驟。文章引起了巨大的反響。
在本文中,我將介紹高級配置,其中 Hibernate 使用了 WebLogic 的 Java 命名和目錄接口 (Java Naming and Directory Interface , JNDI) 、 Java 事務 API (Java Transaction API , JTA) 、 Java 連接器架構 (Java Connector Architecture , JCA) 和 Java 管理擴展 (Java Management extension , JMX) 實現。
我們先從 JNDI 開始。通過在 hibernate.cfg.xml 文件中命名 SessionFactory , Hibernate 使 SessionFactory 在 JNDI 中可用。呀!這在 WebLogic 中不起作用。正如 此處 所描述的, WebLogic JNDI 與 Hibernate 配合得不是很好。有多個工作區。工作區手動將 SessionFactory 綁定到 JNDI 中,方法是通過 WebLogic startup 類或者啟動 servlet 。但是,我不能使 SessionFactory 實例從 JNDI 安全返回。因此,折衷一下,為 SessionFactory 向 HibernateUtil 實用類添加一個存取器。
為了配置 Hibernate 使用 JTA ,我在 hibernate.cfg.xml 文件中配置了 transaction.factory_class 。有兩個選項: org.hibernate.transaction.JTATransactionFactory 和 org.hibernate.transaction.CMTTransactionFactory 。說明文檔建議,對 Bean 托管事務界定 (Bean Managed Transaction Demarcation , BMTD) bean 使用 JTATransactionFactory ,而對容器托管事務界定 (Container Managed Transaction Demarcation , CMTD) bean 使用 CMTTransactionFactory 。 JTATransactionFactory 似乎更通用些,它既支持 BMTD bean 又支持 CMTD bean 。因此,我配置的是 JTATransactionFactory 。此外,為了以特定于容器的方式查找事務,我在 hibernate.cfg.xml 文件中配置了 transaction.manager_lookup_class 。借助于這個配置,我完全不需要使用 Hibernate Transaction API 。
對 Hibernate 的 JCA 支持是實驗性質的,目前還沒有全面應用于 WebLogic 。我可以設想,以后 Hibernate 會被打包為 Resource ARchive (RAR) 文件。 Hibernate RAR 文件作為資源適配器部署。適配器使 Session 在 JNDI 中可用。所有的配置元素都是通過資源適配器( xml 文件)配置的,而不是通過 hibernate.cfg.xml 文件或采用其他方法配置。為什么在 WebLogic 中要配置 Hibernate 使用 JCA ? JCA 旨在封裝傳統系統的連接、事務等等,并使它們在 J2EE 中可用。但是,由于 Hibernate ,傳統的資源適配器的優勢不能全面體現。一旦 Hibernate 被配置為資源適配器,特定的應用程序與 Hibernate 的耦合就被削弱了。多個不同的應用程序可以使用同一個 Hibernate 資源適配器。由于當前正在開發的 EJB 3.0 ,這種配置在 EJB 的持久性 API 、 Hibernate 和 Java 數據對象 (Java Data Object , JDO) 的標準化方面的優勢更為明顯。從理論上講,可以熱部署(或重部署)適配器和改變持久性實現。
Hibernate 附帶 JMX Management Bean (MBean) 實現。我不知道如何使用 JMX 將 Hibernate 部署到 WebLogic 上。 Hibernate 和 WebLogic 使用 JMX 有什么好處?至少有兩條。一條是部署和重部署。更重要的一條是,可以監控 Hibernate 和獲得的統計信息。從 JMX 控制臺進行運行時監控是所部署的應用程序運行良好的基本保障。
我更新了示例應用程序,可 在此 獲取。(注:需要有 bartsandbox 的免費會員資格。)
原文轉自:http://www.anti-gravitydesign.com