J2EE之巅

 

整合Hibernate3与JBOSS 3.2.X

 

前言――强强联合

J2EE 应用服务器领域, JBoss 是发展最为迅速的应用服务器。由于 JBoss 遵循商业友好的 LGPL 授权分发,并且由开源社区开发,这使得 JBoss 广为流行。另外, JBoss 应用服务器还具有许多优秀的特质。其一,它将具有革命性的 JMX 微内核服务作为其总线结构;其二,它本身就是面向服务的架构( Service-Oriented Architecture SOA );其三,它还具有统一的类装载器,从而能够实现应用的热部署和热卸载能力。因此,它是高度模块化的和松耦合的。 JBoss 用户的积极反馈告诉我们, JBoss 应用服务器是健壮的、高质量的,而且还具有良好的性能, 2002 JBOSS 获得了最佳应用服务器称号。

Entity Bean 的效率问题一直是 J2EE 开发中争议热点,近年来, Hibernate 已经成为了事实上的持久化引擎。最新版的 JBoss 应用服务器已经将 Hibernate 集成为 JMX MBean 服务。这使得用户能够在应用服务器环境中直接使用 Hibernate ,而不管它是否处于 J2EE 上下文中。 JBOSS 4.0 中已经融入了 Hibernate 作为对象持久化的基础。

对于大量采用 JBOSS 3.2.x 的用户,如何将 Hibernate3 加入到 JBOSS 中,以便使用 JBOSS 的连接池,支持 JBOSS BMT CMT 事务。下文将详细将 Hibernate3 加入到 JBOSS 3.2.x 的实现步骤。

操作步骤

JBOSS 是以 JMX 为微内核的,各种功能和服务都有 MBean 提供,同时 Hibernate 提供了对 MBean 接口的实现 org.hibernate.jmx.HibernateService 。所以我们可以很方便的将持久化类打包成 Mbean ,部署到 JBOSS 中,以下是具体步骤:

1.  Hibernate3.jar Hibernate 用到的其他库文件一同拷贝至相应的 JBOSS 路径下(如: jboss-3.2.1\server\default\lib )。

2.  为了将我们编写的持久化管理类,加入到 JBOSS 中,我们必须将他封装成 Mbean 形式,以便被 JMX 加载。

如同实现一般的 Mbean 一样需要编写 jboss-service.xml 文件,文件内容如下:

<server>

<mbean code="org.hibernate.jmx.HibernateService" name="jboss.jca:service=HibernateFactory,name=HibernateFactory">

    <depends>jboss.jca:service=RARDeployer</depends>

    <depends>jboss.jca:service=LocalTxCM,name=YourDataSource</depends>    

    <attribute name="MapResources">mappings/Yourmapping.hbm.xml</attribute>

    <attribute name="JndiName">java:/YourJNIDName</attribute>

    <attribute name="Datasource">YourDataSourceJNIDName </attribute>

    <attribute name="Dialect">org.hibernate.dialect.SQLServerDialect</attribute>

    <attribute name="TransactionStrategy">org.hibernate.transaction.JTATransactionFactory</attribute>

    <attribute name="TransactionManagerLookupStrategy">org.hibernate.transaction.JBossTransactionManagerLookup</attribute>

    <attribute name="UserTransactionName">UserTransaction</attribute>

</mbean>

</server>

注释:

<depends> 元素表示该 Mbean 依赖的服务,其中需要将YourDataSource 替换实际应用中使用的数据源的名称。

<attribute> 元素对 Mbean 中的属性进行了配置,其中

MapResource 指定了持久化类的映射文件,将其替换为实际的映射文件名。

JndiName 指定的是所用到的数据源的 JNDI 名,将其替换为实际的数据源 JNDI 名称。

Dialect 同样根据使用的数库类型不同,进行相应的替换。

TransactionStrategy ,在你的 Session Bean 使用 BMT 的时候应该配置为 org.hibernate.transaction.JTATransactionFactory ,而当你的 Session Bean 使用 CMT 的时候应该配置为 org.hibernate.transaction.CMTTransactionFactory

Mbean 是一种 jar 文件(但其后缀不是 jar, 而是 sar ),以下是要创建的 sar 包的内部结构。

YourClasses( 持久化类及辅助类 )

mappings/ Yourmapping.hbm.xml

META-INF/joss-service.xml

3         Session Bean 中调用持久化对象

private javax.ejb.SessionContext _ctx;

public void setSessionContext(javax.ejb.SessionContext ctx)

{

_ctx=ctx;

}

{

try {

InitialContext ctx = null;

        ctx = new InitialContext();          

SessionFactory jtaf = (SessionFactory)ctx.lookup(jndiName);

Session session=jtaf.openSession();

//Transaction tx = sessio

UserTransaction tx=_ctx.getUserTransaction();

tx.begin();

       Book book = new Book();

book.setId(111);

book.setBook_name("JBOSS&Hibernate");

book.setPrice(111f);

session.save(book);

tx.rollback();

session.close();

} catch (NamingException e) {

e.printStackTrace();  

} catch (Exception e1) {

e1.printStackTrace();

}

}

上面的代码段展示了,在 session bean 中操作 hibernate 持久化对象的过程,并且展示了如何使用 JBOSS 提供的 JTA 事务。

好了现在 Hibernate3 已经和 JBOSS 3.2.X 完美的整合在一起了。

posted on 2006-03-21 21:14 超越巅峰 阅读(1207) 评论(0)  编辑  收藏 所属分类: JBOSS


标题  
姓名  
主页
验证码 *  
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
 
 
相关链接:
网站导航:




导航

统计

常用链接

留言簿(3)

随笔分类(36)

随笔档案(41)

文章分类(2)

文章档案(2)

相册

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜