Hibernate的JNDI绑定分析
Hibernate的JNDI名称绑定:从SessionFactory的创建到动态绑定流程
在Hibernate框架中,JNDI(Java Naming and Directory Interface)名称的绑定是在SessionFactory的创建过程中实现的。让我们深入这一过程。
我们通常通过以下方式获得SessionFactory实例:
```java
Configuration conf = new Configuration().addClass(Cat.class);
SessionFactory sf = conf.buildSessionFactory();
```
创建Configuration实例时,它会读取配置文件(如hibernate.properties),并将配置信息保存在Properties对象中。与JNDI相关的关键属性是`hibernate.session_factory_name`。
接下来调用`buildSessionFactory()`方法,该方法首先验证配置信息,然后调用`SessionFactoryImpl`的构造器。在这个构造器中,关键的两行代码是获取属性并调用`SessionFactoryObjectFactory.addInstance()`方法,将自己(即SessionFactory的实例)作为参数传递。
进入`SessionFactoryObjectFactory.addInstance()`方法后,我们可以看到以下代码:
```java
Context ctx = NamingHelper.getInitialContext(properties);
NamingHelper.bind(ctx, name, instance);
```
这里的`instance`就是SessionFactory的实例。通过源代码的阅读,我们可以清晰地看到Hibernate在调用`conf.buildSessionFactory()`时,通过一系列的类方法调用,将创建的SessionFactory实例绑定到配置文件中由`hibernate.session_factory_name`属性指定的名称上。这表明Hibernate自身具备JNDI的动态绑定功能。
要绑定一个SessionFactory实例,首先需要创建它。确保这个创建过程在所有其他需要从JNDI获取SessionFactory实例的程序之前完成。对于App Server环境,我们无需关心JNDI名称的绑定过程的具体细节,只需确保预先创建出一个SessionFactory实例即可。剩下的工作将由Hibernate自动完成。
在Servlet环境中,可以通过配置一个初始化Servlet来预先创建SessionFactory实例。只需将以下代码加入到Servlet初始化过程中:
```java
Configuration conf = new Configuration().addClass(Cat.class);
SessionFactory sf = conf.buildSessionFactory();
```
对于包含EJB的复杂J2EE应用,可能需要依赖App Server的功能来确保SessionFactory实例的预创建。这通常由App Server的配置或部署描述符来实现,确保在应用程序启动时自动创建SessionFactory实例。通过这种方式,Hibernate能够无缝地与各种J2EE应用服务器集成,并利用JNDI进行数据源的绑定和管理。
编程语言
- Hibernate的JNDI绑定分析
- asp.net下Cache 缓存操作类代码
- PHP信号处理机制的操作代码讲解
- mysql中影响数据库性能的因素讲解
- mysql 8.0.12 安装配置方法并修改密码
- vue forEach循环数组拿到自己想要的数据方法
- JavaScript中BOM对象原理与用法分析
- 把无限级分类生成数组
- jQuery获取父元素节点、子元素节点及兄弟元素节
- jQuery复合事件结合toggle()方法的用法示例
- .NET实现文件跨服务器上传下载的方法
- ajax传送参数含有特殊字符的快速解决方法
- 使用jQuery动态设置单选框的选中效果
- PHP中的事务使用实例
- 使用AjaxFileUpload.js实现异步文件上传示例
- 浅谈VUE监听窗口变化事件的问题