详细讲述Hibernate绑定JNDI
创始人
2024-06-08 03:31:23
0

学习Hibernate时,经常会遇到Hibernate绑定JNDI问题,这里将介绍Hibernate绑定JNDI问题的解决方法。

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

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

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

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

  1. hibernate.session_factory_name hibernate/session_factory 

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

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

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

  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自身是具有动态绑定功能的。但是Hibernate需要获得一个SessionFactory实例用于绑定,而这个SessionFactory实例需要我们写代码进行预先创建,并且必须保证该过程要在所有其它要从JNDI上获得SessionFactory实例的程序之前完成。

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

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

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

【编辑推荐】

  1. 简单描述Hibernate单元测试
  2. 概括Hibernate多表关联查询
  3. 浅谈Hibernate Session Factory
  4. 浅析Hibernate加载配置文件
  5. 深入剖析Hibernate核心接口

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...