`

Hibernate的JNDI绑定分析

阅读更多
Hibernate的JNDI名称绑定是在net.sf.hibernate.impl.SessionFactoryObjectFactory程序里面实现的,分析一下Hibernate的绑定JNDI的过程:
获得SessionFactory一般是这样写代码:
Java代码

   1. Configuration conf = new Configuration();.addClass(Cat.class);; 
   2. SessionFactory sf = conf.buildSessionFactory(); 

首先是new Configuration()创建一个Configuration,在这个构造器里面进行配置文件(hibernate.properties)的读取工作,然后保存到一个Properties对象里面去,和JNDI相关的是这个属性:

Java代码

1. hibernate.session_factory_name hibernate/session_factory 

     hibernate.session_factory_name hibernate/session_factory

接着调用buildSessionFactory()方法,该方法检查一下配置信息,然后调用SessionFactoryImpl的一个构造器。在构造器里面注意下面两行代码:

Java代码

   1. name = properties.getProperty(Environment.SESSION_FACTORY_NAME);; 
   2. SessionFactoryObjectFactory.addInstance(uuid, name, this, properties);; 

name = properties.getProperty(Environment.SESSION_FACTORY_NAME);;
SessionFactoryObjectFactory.addInstance(uuid, name, this, properties);;

调用了SessionFactoryObjectFactory的addInstance方法,并且把自身(SessionFactory的实例)作为参数传递。最后在addInstance方法可以看到如下代码:

Java代码

   1. Context ctx = NamingHelper.getInitialContext(properties);; 
   2. NamingHelper.bind(ctx, name, instance);
instance 就是SessionFactory的实例,通过读源代码,可以清楚的看到Hibernate是在conf.buildSessionFactory()的时候通过一系列类方法调用,把创建的SessionFactory实例绑定到配置文件(hibernate.properties)中 hibernate.session_factory_name属性指定的名称上的,因此可见Hibernate自身是具有JNDI的动态绑定功能的。但是Hibernate需要获得一个SessionFactory实例用于绑定,而这个SessionFactory实例需要我们写代码进行预先创建,并且必须保证该过程要在所有其它要从JNDI上获得SessionFactory实例的程序之前完成。

因此对于任何App Server来说,我们都不必去管JNDI名称的绑定过程,只需要保证预先创建一个SessionFactory实例出来就够了,剩下的工作 Hibernate会做的。那么如何确保预创建SessionFactory实例呢,如果是Servlet,可以配置一个初始化的Servlet,只要把

Java代码

   1. Configuration conf = new Configuration();.addClass(Cat.class);; 
   2. SessionFactory sf = conf.buildSessionFactory();;  

Configuration conf = new Configuration();.addClass(Cat.class);;
SessionFactory sf = conf.buildSessionFactory();;

这样的代码加进去就可以了。如果是包含EJB的的复杂的J2EE应用,可能需要依靠App Server的功能来保证预创建SessionFactory实例 
分享到:
评论

相关推荐

    Hibernate的JNDI绑定分析.doc

    Hibernate的JNDI绑定分析 Hibernate的JNDI绑定分析.doc

    2022年Hibernate的JNDI绑定分析Java教程.docx

    2022年Hibernate的JNDI绑定分析Java教程.docx

    hibernate+中文api

    前言 1. 翻译说明 2. 版权声明 1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 ...3.8.2. JNDI绑定的SessionFactory

    Hibernate实战(第2版 中文高清版)

     2.4.2 JNDI绑定的SessionFactory   2.4.3 JMX服务部署   2.5 小结   第3章 领域模型和元数据   3.1 CaveatEmptor应用程序   3.1.1 分析业务领域   3.1.2 CaveatEmptor领域模型   3.2 实现领域模型 ...

    hibernate-c3p0-4.2.4

    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展,本包主要用于支持hibernate4.2.x

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     19.3 把SessionFactory与JNDI绑定  19.4 配置日志  19.5 使用XML格式的配置文件  19.6 小结  19.7 思考题 第20章 声明数据库事务  20.1 数据库事务的概念  20.2 声明事务边界的方式  20.3 在mysql.exe程序...

    Hibernate+中文文档

    3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 3.8.4. JMX部署 4. 持久化类(Persistent Classes) 4.1. 一个简单的POJO例子 4.1.1. 实现一个默认的...

    hibernate3.2中文文档(chm格式)

    3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 3.8.4. JMX部署 4. 持久化类(Persistent Classes) 4.1. 一个简单的POJO例子 4.1.1. 实现一个默认的...

    HibernateAPI中文版.chm

    3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 3.8.4. JMX部署 4. 持久化类(Persistent Classes) 4.1. 一个简单的POJO例子 4.1.1. 实现一个默认的...

    最全Hibernate 参考文档

    3.8.2. JNDI绑定的SessionFactory 3.8.3. JTA和Session的自动绑定 3.8.4. JMX部署 4. 持久化类(Persistent Classes) 4.1. 一个简单的POJO例子 4.1.1. 为持久化字段声明访问器(accessors)和是否可变的标志...

    hibernate 教程

    绑定SessionFactory到JNDI 3.5.7. 查询语言替换 3.6. Logging 3.7. 实现NamingStrategy(命名策略) 3.8. XML配置文件 4. 持久化类(Persistent Classes) 4.1. POJO简单示例 4.1.1. 为持久化...

    Hibernate 中文 html 帮助文档

    3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 3.8.4. JMX部署 4. 持久化类(Persistent Classes) 4.1. 一个简单的POJO例子 4.1.1. 实现一个默认的(即...

    Hibernate中文详细学习文档

    3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 3.8.4. JMX部署 4. 持久化类(Persistent Classes) 4.1. 一个简单的POJO例子 4.1.1. 实现一个默认的...

    c3p0的JAR包

    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。C3P0数据源在项目开发中使用得比较多。导入相关jar包c3p0-0.9.2-pre1.jar、...

    Hibernate教程

    4.8.2. JNDI绑定的SessionFactory 4.8.3. JTA和Session的自动绑定 4.8.4. JMX部署 5. 持久化类(Persistent Classes) 5.1. 一个简单的POJO例子 5.1.1. 为持久化字段声明访问器(accessors)和是否可变的标志...

    hibernate 体系结构与配置 参考文档(html)

    JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 3.8.4. JMX部署 4. 持久化类(Persistent Classes) 4.1. 一个简单的POJO例子 4.1.1. 实现一个默认的(即无...

    SSM框架-c3p0架包zip

    SSM框架中c3p0架包zip ,C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 3.8.4. JMX部署 4. 持久化类(Persistent Classes) 4.1. 一个简单的POJO例子 4.1.1. 实现一个默认的...

Global site tag (gtag.js) - Google Analytics