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