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实例。
下一篇:如何才算掌握Java
↓相关文章:
- · 如何才算掌握Java
- · Java还能走多远 四大趋势决定前景
- · 国内不谈Java--硅谷有感
- · CORBA对象生命周期之实现和内存管理
- · 为什么Java中继承多数是有害的
- · 初学Java的备忘录
- · 为Java应用程序添加退出事件响应
- · JBuilder 2005单元测试之慨述
- · JBuilder2005单元测试之业务类介绍
- · Java中对HashMap的深度分析
- · Java语言的接口与类型安全
- · 基于JNDI的应用程序开发
- · 掌握JDK1.5枚举类型
- · Java数据库编程中的技巧
- · Java动态代理实现AOP
- · Hibernate获得成功的十大理由
- · JDO 2.0查询语言的特点
- · Hibernate的JNDI绑定分析
- · Java2下Applet数字签名
- · Eclipse插件开发之新手入门
- · 跨平台Java程序
- · Hibernate分页查询原理解读
- · Java使用全屏幕模式
- · Java程序与C语言的接口
- · 基于Java的IDEA加密算法
- · 性能、规模、风险 初评hibernate
- · Java程序设计中的接口应用
- · Java中ThreadLocal的设计与使用
- · J2SE5.0新特性之ProcessBuilder
- · EJB 3.0开发指南之依赖注入
- · EJB 3.0开发指南之消息驱动Bean
- · Java串行端口技术协议
- · JDBC 2.0中的高级数据类型
- · 开发线程安全的Spring Web应用
- · J2EE应用应遵循的几点原则
- · Java多线程编程精要之基础
- · Java多线程编程精要之实现线程
- · Java多线程编程之不提倡的方法
- · JavaBeans 与 Ejb 的区别
- · 谈谈J2SE中当序列化遭遇继承
- · JBuilder2005+JBOSS+Oracle9i环境配置
- · CORBA技术探索起步
- · Eclipse 3.0 上配置JSP开发环境
- · CORBA对象生命周期
- · Eclipse开发Hibernate应用程序

