前言――强强联合
在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完美的整合在一起了
作者蔡超北京天融信网络安全有限公司研发工程师