`

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是一个开源的对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互过程。JNDI(Java Naming and Directory Interface)则是一种广泛使用的API,...

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

    Hibernate 的 JNDI 绑定分析 Java 教程 在 Java 应用程序中,Hibernate 是一个流行的对象关系映射(ORM)工具,它提供了许多有用的功能来帮助开发者快速开发应用程序。其中一个重要的功能就是 JNDI 绑定,今天我们...

    用dbcp连接池,mysql数据库,在tomcat服务器下,通过hibernate配置jndi数据源.doc

    10. **JNDI工作原理**:JNDI通过名字绑定技术,允许程序通过唯一的名字找到对象的引用,而对象的创建和管理则由对象工厂负责。 11. **配置过程**:配置数据源包括准备环境(如安装Tomcat、Eclipse、MySQL、驱动等)...

    Jboss6.0.0 M4配置jndi和hibernate

    JNDI 提供了一种标准的接口,用于查找和绑定命名服务,如数据源、EJB等。在JBoss 6.0.0 M4中,配置JNDI主要涉及到以下几个步骤: 1. **创建数据源**:在JBoss中,数据源通常通过JNDI名称提供给应用程序。例如,我们...

    hibernate源码分析过程

    Hibernate 的配置可以通过多种方式实现,包括配置文件、可编程配置和 JNDI绑定。配置文件可以是 XML 文件或 properties 文件,用于指定数据库连接信息、映射文件路径等信息。可编程配置可以在运行时动态生成配置信息...

    hibernate常見錯誤

    2. **禁用JNDI绑定:**如果应用并不打算通过JNDI来获取SessionFactory,可以在配置文件中显式地禁用JNDI绑定。 ```xml <property name="hibernate.connection.provider_class">org.hibernate.connection....

    JNDI示例整合SSH

    在整合JNDI时,我们可以在Hibernate的配置文件(hibernate.cfg.xml)中指定数据源的JNDI名称,使Hibernate能够通过JNDI查找数据库连接。 **整合步骤:** 1. 配置应用服务器的JNDI资源,如在Tomcat的`context.xml`...

    Hibernate3的配置参数汇总

    - `hibernate.session_factory_name`:SessionFactory创建后,用此名称绑定到JNDI。 - `hibernate.max_fetch_depth`:控制外连接抓取的深度,默认值为0表示关闭。 - `hibernate.default_batch_fetch_size`:设置...

    hibernate_reference

    文档中的这部分内容讲解了事务策略配置、通过JNDI绑定SessionFactory、使用JTA管理当前会话上下文以及JMX部署。 关于“PersistentClasses”,文档提供了如何创建简单的POJO示例以及实现继承、equals()和hashCode()...

    Hibernate常见的20个问题

    2. **配置JNDI名称**:如果确实需要绑定到JNDI,需要在Hibernate配置文件中指定JNDI名称。 **示例配置** (在`hibernate.cfg.xml`中): ```xml <property name="hibernate.connection.datasource">java:/comp/env/...

    hibernate4 jar包

    c3p0 是一个开源的 JDBC 连接池,它实现了 JNDI 绑定,可以配合 Hibernate 使用,提高数据库连接的效率和管理。 接下来,我们逐一分析压缩包中的文件: 1. **hibernate-core-4.2.4.Final.jar**:这是 Hibernate 4 ...

    c3p0-0.9.1.2.jar

    C3P0连接池 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0是异步操作的,缓慢的JDBC操作通过它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0是异步...

    Hibernate依赖jar包

    3. **c3p0包**:c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Hibernate中,c3p0作为连接池提供者,负责管理数据库连接的创建、分配和释放,以提高数据库访问的效率并...

    Hibernate 参数配置详解

    - **描述**:创建 `SessionFactory` 后,将其自动绑定到 JNDI 中的名称。 - **取值**:JNDI 名称。 - **示例**:`hibernate.session_factory_name=jndi/mySessionFactory` ##### 7. 最大抓取深度 (Max Fetch Depth)...

    让hibernate输出sql语句参数配置.doc

    hibernate.session_factory_name 参数用于 SessionFactory 创建后,将自动使用这个名字绑定到 JNDI 中。其取值为 jndi/composite/name。 7. hibernate.max_fetch_depth hibernate.max_fetch_depth 参数用于设置...

    Hibernate5.2.5全部jar包

    1. **hibernate-c3p0-5.2.5.Final.jar**:提供了C3P0连接池的集成,C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。 2. **hibernate-core-5.2.5.Final.jar**:这是...

    hibernate需要jar包

    3. **C3P0**:这是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,提供了对数据库连接的自动获取与释放,以及连接池的管理功能。在Hibernate中,C3P0用于管理数据库连接,提高数据库访问性能和效率。 除了这些,...

    hibernate 3.2中文手册 中文文档

    - 讲解如何使用JNDI绑定`SessionFactory`实例。 - **3.8.3 在JTA环境下使用CurrentSessioncontext(当前session上下文)管理** - 解释如何在JTA事务模型下管理当前Session。 - **3.8.4 JMX部署** - 介绍如何使用...

    hibernate-release-5.2.16.Final源码包

    c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,提供了比DBCP更丰富的配置参数,以实现更精细的数据库连接管理。在Hibernate中集成c3p0,可以实现更高效、更稳定的数据连接管理,减少数据库资源的消耗,...

Global site tag (gtag.js) - Google Analytics