描述Hibernate使用JCA
Hibernate有很多值得學(xué)習(xí)的地方,這里我們主要介紹Hibernate JCA,包括介紹Hibernate使用了WebLogic的Java命名和目錄接口等方面。
在本文中,我將介紹Hibernate JCA,其中Hibernate使用了WebLogic的Java命名和目錄接口(JavaNamingandDirectoryInterface,JNDI)、Java事務(wù)API(JavaTransactionAPI,JTA)、Java連接器架構(gòu)(JavaConnectorArchitecture,JCA)和Java管理擴展(JavaManagementextension,JMX)實現(xiàn)。
我們先從JNDI開始。通過在hibernate.cfg.xml文件中命名SessionFactory,Hibernate使SessionFactory在JNDI中可用。呀!這在WebLogic中不起作用。正如此處所描述的,WebLogicJNDI與Hibernate配合得不是很好。有多個工作區(qū)。工作區(qū)手動將SessionFactory綁定到JNDI中,方法是通過WebLogicstartup類或者啟動servlet。但是,我不能使SessionFactory實例從JNDI安全返回。因此,折衷一下,為SessionFactory向HibernateUtil實用類添加一個存取器。
為了配置Hibernate JTA,我在hibernate.cfg.xml文件中配置了transaction.factory_class。有兩個選項:org.hibernate.transaction.JTATransactionFactory和org.hibernate.transaction.CMTTransactionFactory。說明文檔建議,對Bean托管事務(wù)界定(BeanManagedTransactionDemarcation,BMTD)bean使用JTATransactionFactory,而對容器托管事務(wù)界定(ContainerManagedTransactionDemarcation,CMTD)bean使用CMTTransactionFactory。JTATransactionFactory似乎更通用些,它既支持BMTDbean又支持CMTDbean。因此,我配置的是JTATransactionFactory。此外,為了以特定于容器的方式查找事務(wù),我在hibernate.cfg.xml文件中配置了transaction.manager_lookup_class。借助于這個配置,我完全不需要使用HibernateTransactionAPI。
對Hibernate JCA,目前還沒有全面應(yīng)用于WebLogic。我可以設(shè)想,以后Hibernate會被打包為ResourceARchive(RAR)文件。HibernateRAR文件作為資源適配器部署。適配器使Session在JNDI中可用。所有的配置元素都是通過資源適配器(xml文件)配置的,而不是通過hibernate.cfg.xml文件或采用其他方法配置。為什么在WebLogic中要配置Hibernate使用JCA?JCA旨在封裝傳統(tǒng)系統(tǒng)的連接、事務(wù)等等,并使它們在J2EE中可用。但是,由于Hibernate,傳統(tǒng)的資源適配器的優(yōu)勢不能全面體現(xiàn)。一旦Hibernate被配置為資源適配器,特定的應(yīng)用程序與Hibernate的耦合就被削弱了。多個不同的應(yīng)用程序可以使用同一個Hibernate資源適配器。由于當(dāng)前正在開發(fā)的EJB3.0,這種配置在EJB的持久性API、Hibernate和Java數(shù)據(jù)對象(JavaDataObject,JDO)的標(biāo)準(zhǔn)化方面的優(yōu)勢更為明顯。從理論上講,可以熱部署(或重部署)適配器和改變持久性實現(xiàn)。
Hibernate附帶JMXManagementBean(MBean)實現(xiàn)。我不知道如何使用JMX將Hibernate部署到WebLogic上。Hibernate和WebLogic使用JMX有什么好處?至少有兩條。一條是部署和重部署。更重要的一條是,可以監(jiān)控Hibernate和獲得的統(tǒng)計信息。從JMX控制臺進行運行時監(jiān)控是所部署的應(yīng)用程序運行良好的基本保障。
我更新了示例應(yīng)用程序,可在此獲取。(注:需要有bartsandbox的免費會員資格。)
【編輯推薦】

















