Hibernate的JNDI绑定分析

Hibernate的JNDI名称绑定是在net.sf.hibernate.impl.SessionFactoryObjectFactory程序里面实现的,我来分析一下Hibernate的绑定JNDI的过程:

  我们获得SessionFactory一般是这样写代码:

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

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

  hibernate.session_factory_name hibernate/session_factory

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

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

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

  Context ctx = NamingHelper.getInitialContext(properties);
  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,只要把

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

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

(0)

相关推荐

  • 基于JNDI的应用程序开发

    JNDI(The Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务将名称和对象联系起来,使得我们可以用名称访问对象.目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性. 命名或目录服务使你可以集中存储共有信息,这一点在网络应用中是重要的,因为这使得这样的应用更协调.更容易管理.例如,可以将打印机设置存储在目录服务中,以便被与打印机有关的应用使用. 本文用代码示例的方式给出了一个快

  • Weblogic上配置Hibernate为JNDI

    一.首先需要把Hibernate 用到的jar包和配置文件都放到Weblogic能够搜索到的CLASSPATH路径上.单单这一步就有很多人很迷茫,其实去仔细看看Weblogic的启动脚本文件startWeblogic.cmd和startWLS.cmd,我想大部分人都知道该怎么配置了. 我机器上的有个Hibernate的项目,在D: estoracle目录下,该目录下的结构是: D: estoraclelib 放置hibernate的所有jar包 D: estoraclesrc 放置源代码 D:

  • 封装jndi操作ldap服务器的工具类

    LDAP操作封装类 目标:使用者只需要会使用List,Map 数据结构,将对LDAP的操作进行封装 类:主要有三个类 1 Env类 包含LDAP的连接信息 2 LdapConnectionFactory类 ldap连接工厂,提供初始化及获取ldap连接的方法 3 LdapOperUtils ldap的处理工具类,提供了各种操作ldap的方法. 连接LDAP的连接属性类 复制代码 代码如下: package com.common.ldapconnection; import org.apache.

  • Spring jndi数据源配置方法详解

    本文实例为大家分享了Spring jndi数据源配置代码,供大家参考,具体内容如下 xml配置: <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver

  • Java中的命名与目录接口JNDI基本操作方法概览

    对jndi总体的理解: jndi(java naming and directory Interface)它提供了一套使用命名和目录服务的接口.用户可以通过它来使用命名和目录服务.就像jdbc一样.jndi包括命名服务和目录服务两部分,其中目录服务包含目录对象directory object,它包含若干属性对象.提供了对属性的很多操作. 命名和目录服务: 命名和目录服务我们一直在使用,如操作系统的文件系统,它给我们提供对文件的操作,查询,添加删除等功能.DNS服务将url同ip地址绑定在了一起.

  • Hibernate的JNDI绑定分析

    Hibernate的JNDI名称绑定是在net.sf.hibernate.impl.SessionFactoryObjectFactory程序里面实现的,我来分析一下Hibernate的绑定JNDI的过程: 我们获得SessionFactory一般是这样写代码: Configuration conf = new Configuration().addClass(Cat.class); SessionFactory sf = conf.buildSessionFactory(); 首先是new C

  • hibernate和mybatis对比分析

    第一章     Hibernate与MyBatis Hibernate 是当前最流行的O/R mapping框架,它出身于sf.net,现在已经成为Jboss的一部分. Mybatis 是另外一种优秀的O/R mapping框架.目前属于apache的一个子项目. MyBatis 参考资料官网:http://www.mybatis.org/core/zh/index.html Hibernate参考资料: http://docs.jboss.org/hibernate/core/3.6/refe

  • hibernate查询缓存详细分析

     一.查询缓存配置 1.在hibernate.cfg.xml中加入查询缓存的策略,  <propertyname="hibernate.cache.use_query_cache">true</property>      启用查询缓存的策略,默认是false. 二.关闭二级缓存,采用query.list()查询普通属性 代码如下所示. public voidtestCache1() { Session session = null; try { session

  • js中DOM事件绑定分析

    js事件绑定 JavaScript 有三种事件模型: 内联模型 脚本模型 DOM2 模型 1.内联模型 //基本废除不用 <input type="button" value="按钮" onclick="alert('Lee');" /> <input type="button" value="按钮" onclick="box();" /> 2.脚本模型 //基本

  • Java中几种常用数据库连接池的使用

    一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出.拓机.如下图所示: 二.使用数据库连接池优化程序性能 2.1.数据库连接池的基本概念 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现的尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性

  • 详解IDEA2020新建spring项目和c3p0连接池的创建和使用

    目录 前言 1.环境准备:maven配置 2.导入jar包:c3p0-0.9.5.4.jar和mysql-connector-java.jar 3.编写测试类测试连接 前言 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展,目前使用它的开源项目有Hibernate,Spring等. 1.环境准备:maven配置 打开idea,点击"+"新建项目,选择Spring,点击next,填写项目的名称,点击finish,新的Spring项

  • 用3个实例从原理到实战讲清楚Log4j史诗级漏洞

    目录 背景 JNDI是个什么鬼? 命名服务与目录服务的区别 JNDI架构分层 JNDI的应用 JNDI实战 基于RMI的实现 构建攻击 进一步改造 基于Log4j2的攻击 小结 背景 最近互联网技术圈最火的一件事莫过于Log4j2的漏洞了.同时也涌现出了各类分析文章,关于漏洞的版本.漏洞的原因.漏洞的修复.程序员因此加班等等. 经常看我文章的朋友都知道,面对这样热门有意思的技术点,怎能错过深入分析一波呢?大概你也已经听说了,造成漏洞的"罪魁祸首"是JNDI,今天我们就聊它. JNDI,

  • Java中JDBC连接池的基本原理及实现方式

    目录 一. 应用程序直接建立数据库连接模型 二.使用数据库连接池优化模型 1.关于连接池中的连接数量的一些规定: 2.编写数据库连接池 创建数据库连接池: 进一步封装一些相关数据库的类的方法 三.两个开源的数据库连接池 1.dbcp连接 (1)导入相关jar包 (2)在项目根目录增加配置文件dbcp.properties (3)程序实现dbcp连接 2.c3p0连接池 (1)导入相关的jar包 (2)在项目根目录下增加配置文件 (3)编写类文件,创建连接池 3.dbcp和c3p0不同之处 一.

  • 搭建java WEB开发环境和应用

    一 使用Tomcat服务器,使用DBCP数据源搭建Web开发环境 1.JDK安装,默认路径即可 2.Tomcat5.5服务器 1)配置Tomcat的服务器端口: 打开D:\apache-tomcat-5.0.18\conf\server.xml, 查看如下代码: <!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 --> <Connector port="8080" maxThreads="

随机推荐