当前位置:  编程技术>java/j2ee

Hibernate的JNDI绑定分析

    来源: 互联网  发布时间:2014-10-15

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

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实例。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java将类序列化并存储到mysql(使用hibernate)
  • linux图形模式下shutdown里有Hibernate这个选项。怎么man shutdown里找不到hibernate这个选项呢。
  • java 框架Hibernate的generator属性的七种class介绍
  • Hibernate搜索框架 Hibernate Search
  • struts+spring+hibernate+jquery实现分页功能的几个基本类介绍(异步加载)
  • Hibernate Shards
  • Eclipse添加xml文件提示及Hibernate配置学习
  • 数据持久层框架 Hibernate
  • Eclipse的Hibernate插件 HiberClipse
  • Hibernate EntityManager
  • Bean验证框架 Hibernate Validator
  • hibernate能用在C++开发上吗?
  • Hibernate POJO Generator
  • Hibernate泛型DAO层 SwiftDAO
  • Hibernate Synchronizer
  • Hibernate映射文件生成工具 hbm2java
  • Hibernate-SQLite
  • NoSQL的持久层框架 Hibernate OGM
  • hibernate-memcached
  • 解析Hibernate + MySQL中文乱码问题
  • 解决hibernate+mysql写入数据库乱码


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3