前言――強強聯合
在JEE應用服務器領域JBoss是發展最為迅速的應用服務器由於JBoss遵循商業友好的LGPL授權分發並且由開源社區開發這使得JBoss廣為流行另外JBoss應用服務器還具有許多優秀的特質其一它將具有革命性的JMX微內核服務作為其總線結構其二它本身就是面向服務的架構(ServiceOriented ArchitectureSOA)其三它還具有統一的類裝載器從而能夠實現應用的熱部署和熱卸載能力因此它是高度模塊化的和松耦合的JBoss用戶的積極反饋告訴我們JBoss應用服務器是健壯的高質量的而且還具有良好的性能年JBOSS獲得了最佳應用服務器稱號
Entity Bean的效率問題一直是JEE開發中爭議熱點近年來Hibernate已經成為了事實上的持久化引擎最新版的JBoss應用服務器已經將Hibernate集成為JMX MBean服務這使得用戶能夠在應用服務器環境中直接使用Hibernate而不管它是否處於JEE上下文中JBOSS 中已經融入了Hibernate作為對象持久化的基礎
對於大量采用JBOSS x的用戶如何將Hibernate加入到JBOSS中以便使用JBOSS的連接池支持JBOSS的BMT和CMT事務下文將詳細將Hibernate加入到JBOSS x的實現步驟
操作步驟
JBOSS是以JMX為微內核的各種功能和服務都有MBean提供同時Hibernate提供了對MBean接口的實現orghibernatejmxHibernateService所以我們可以很方便的將持久化類打包成Mbean部署到JBOSS中以下是具體步驟
將Hibernatejar及Hibernate用到的其他庫文件一同拷貝至相應的JBOSS路徑下(如jboss\server\default\lib)
為了將我們編寫的持久化管理類加入到JBOSS中我們必須將他封裝成Mbean形式以便被JMX加載
如同實現一般的Mbean一樣需要編寫jbossservicexml文件文件內容如下
<server>
<mbean code=orghibernatejmxHibernateService
name=jbossjcaservice=HibernateFactoryname=HibernateFactory>
<depends>jbossjcaservice=RARDeployer</depends>
<depends>jbossjcaservice=LocalTxCMname=YourDataSource</depends>
<attribute name=MapResources>mappings/Yourmappinghbmxml</attribute>
<attribute name=JndiName>java/YourJNIDName</attribute>
<attribute name=Datasource>YourDataSourceJNIDName </attribute>
<attribute name=Dialect>orghibernatedialectSQLServerDialect</attribute>
<attribute name=TransactionStrategy>orghibernatetransactionJTATransactionFactory</attribute>
<attribute name=TransactionManagerLookupStrategy>
orghibernatetransactionJBossTransactionManagerLookup</attribute>
<attribute name=UserTransactionName>UserTransaction</attribute>
</mbean>
</server>
注釋
<depends>元素表示該Mbean依賴的服務其中需要將YourDataSource替換實際應用中使用的數據源的名稱
<attribute>元素對Mbean中的屬性進行了配置其中
MapResource指定了持久化類的映射文件將其替換為實際的映射文件名
JndiName指定的是所用到的數據源的JNDI名將其替換為實際的數據源JNDI名稱
Dialect同樣根據使用的數庫類型不同進行相應的替換
TransactionStrategy在你的Session Bean使用BMT的時候應該配置為orghibernatetransactionJTATransactionFactory而當你的Session Bean使用CMT的時候應該配置為orghibernatetransactionCMTTransactionFactory
Mbean是一種jar文件(但其後綴不是jar而是sar)以下是要創建的sar包的內部結構
YourClasses(持久化類及輔助類)
mappings/ Yourmappinghbmxml
METAINF/jossservicexml
在Session Bean中調用持久化對象
…
private javaxejbSessionContext _ctx
public void setSessionContext(javaxejbSessionContext ctx)
{
_ctx=ctx
}
…
{
try {
InitialContext ctx = null
ctx = new InitialContext()
SessionFactory jtaf = (SessionFactory)ctxlookup(jndiName)
Session session=jtafopenSession()
//Transaction tx = sessio
UserTransaction tx=_ctxgetUserTransaction()
txbegin()
Book book = new Book()
booksetId()
booksetBook_name(JBOSS&Hibernate)
booksetPrice(f)
sessionsave(book)
txrollback()
sessionclose()
}
catch (NamingException e) {
eprintStackTrace()
} catch (Exception e) {
eprintStackTrace()
}
}
…
上面的代碼段展示了在session bean中操作hibernate持久化對象的過程並且展示了如何使用JBOSS提供的JTA事務
好了現在Hibernate已經和JBOSS X完美的整合在一起了
作者蔡超北京天融信網絡安全有限公司研發工程師
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28023.html