配置weblogic 8.1和hibernate 3.0

发表于:2007-06-11来源:作者:点击数: 标签:
最近,在bartsandbox上,有人问我在 WebLogic 上配置Hibernate的具体步骤。您可能知道,Hibernate是一个非常流行的 开源 对象关系映射(Object Relational Mapping,ORM)工具。下面是在WebLogic 8.1上配置Hibernate的具体步骤: ◆首先要创建一个域。我创建了

最近,在bartsandbox上,有人问我在WebLogic上配置Hibernate的具体步骤。您可能知道,Hibernate是一个非常流行的开源对象关系映射(Object Relational Mapping,ORM)工具。下面是在WebLogic 8.1上配置Hibernate的具体步骤:

◆首先要创建一个域。我创建了一个WebLogic Workshop(WLW)域,因为我打算使用WLW来创建和实现应用程序。

◆将hibernate...\lib\antlr-2.7.5H3.jar添加到PRE_CLASSPATH,或者在hibernate.cfg.xml文件中将query.factory_class属性设为user 2.x's query factory。

◆WLW域还启动了一个PointBase数据库实例。我将使用这个内置实例。我创建了一个新的用户和模式。并为该模式填充了一些示例数据。

◆在服务器实例中配置连接池和数据源。

◆创建应用程序。我打算使用WebLogic Workshop创建。

◆应该将库(jar文件)(它们是成功运行Hibernate所必需的)放在哪里呢?放在应用程序的APP-INF/lib文件夹中。库包括hibernate.jar和附加的第三方库。引用Hibernate Reference的表格3-1。

◆在WLW中创建一个Java项目。该Java项目包括映射到数据库的域类。WLW编译该项目,并将生成的jar文件放到APP-INF/lib目录下。在Java项目中编码域类。创建Hibernate映射文件和Hibernate配置文件。此外,从Hibernate Reference复制实现,创建HibenateUtil类。Hibernate配置文件包括数据源的JNDI名。

◆创建一个EJB对象(例如,一个模块)。该项目包含了会话bean。编写一个操纵域类的会话bean。

◆创建一个Web或Web Service项目(例如,一个模块)。该项目包含了可互操作性地测试会话bean的组件。

完整、有效、自包含的示例应用程序在此。其中包括了模式和所有的Hibernate配置文件。

我在上面描述了在WebLogic 8.1上配置Hibernate 3.0的具体步骤。下面将介绍高级配置,其中Hibernate使用了WebLogic的Java命名和目录接口(Java Naming and Directory Interface,JNDI)、Java事务API(Java Transaction API,JTA)、Java连接器架构(Java Connector Architecture,JCA)和Java管理扩展(Java Management extension,JMX)实现。

我们先从JNDI开始。通过在hibernate.cfg.xml文件中命名SessionFactory,Hibernate使SessionFactory在JNDI中可用。呀!这在WebLogic中不起作用。正如此处所描述的,WebLogic JNDI与Hibernate配合得不是很好。有多个工作区。工作区手动将SessionFactory绑定到JNDI中,方法是通过WebLogic startup类或者启动servlet。但是,我不能使SessionFactory实例从JNDI安全返回。因此,折衷一下,为SessionFactory向HibernateUtil实用类添加一个存取器。

为了配置Hibernate使用JTA,我在hibernate.cfg.xml文件中配置了transaction.factory_class。有两个选项:org.hibernate.transaction.JTATransactionFactory和org.hibernate.transaction.CMTTransactionFactory。说明文档建议,对Bean托管事务界定(Bean Managed Transaction Demarcation,BMTD)bean使用JTATransactionFactory,而对容器托管事务界定(Container Managed Transaction Demarcation,CMTD)bean使用CMTTransactionFactory。

JTATransactionFactory似乎更通用些,它既支持BMTD bean又支持CMTD bean。因此,我配置的是JTATransactionFactory。此外,为了以特定于容器的方式查找事务,我在hibernate.cfg.xml文件中配置了transaction.manager_lookup_class。借助于这个配置,我完全不需要使用HibernateTransaction API。

对Hibernate的JCA支持是实验性质的,目前还没有全面应用于WebLogic。我可以设想,以后Hibernate会被打包为Resource ARchive(RAR)文件。Hibernate RAR文件作为资源适配器部署。适配器使Session在JNDI中可用。所有的配置元素都是通过资源适配器(xml文件)配置的,而不是通过hibernate.cfg.xml文件或采用其他方法配置。为什么在WebLogic中要配置Hibernate使用JCA?JCA旨在封装传统系统的连接、事务等等,并使它们在J2EE中可用。但是,由于Hibernate,传统的资源适配器的优势不能全面体现。一旦Hibernate被配置为资源适配器,特定的应用程序与Hibernate的耦合就被削弱了。多个不同的应用程序可以使用同一个Hibernate资源适配器。由于当前正在开发的EJB 3.0,这种配置在EJB的持久性API、Hibernate和Java数据对象(Java Data Object,JDO)的标准化方面的优势更为明显。从理论上讲,可以热部署(或重部署)适配器和改变持久性实现。

Hibernate附带JMX Management Bean (MBean)实现。我不知道如何使用JMX将Hibernate部署到WebLogic上。Hibernate和WebLogic使用JMX有什么好处?至少有两条。一条是部署和重部署。更重要的一条是,可以监控Hibernate和获得的统计信息。从JMX控制台进行运行时监控是所部署的应用程序运行良好的基本保障。

(责任编辑 火凤凰 sunsj@51cto.com  TEL:(010)68476636-8007)



原文转自:http://www.ltesting.net

...