前言――强强联合
在
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
完美的整合在一起了。