Hibernate的JNDI繫結分析

2021-08-29 13:21:19 字數 1433 閱讀 6525

hibernate的jndi繫結分析

作者blog:

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例項的程式之前完成。

configuration conf = new configuration().addclass(cat.class);

sessionfactory sf = conf.buildsessionfactory();

Hibernate的JNDI繫結分析

hibernate的jndi名稱繫結是在net.sf.hibernate.impl.sessionfactoryobjectfactory程式裡面實現的,我來分析一下hibernate的繫結jndi的過程 我們獲得sessionfactory一般是這樣寫 configuration conf new...

常用的JNDI操作

void bind string sname,object object 繫結 把名稱同物件關聯的過程 void rebind string sname,object object 重新繫結 用來把物件同乙個已經存在的名稱重新繫結 void unbind string sname 釋放 用來把物件從...

Tomcat5 5下的jndi的配置

jndi是j2ee中乙個很重要的標準,通常我們是在j2ee程式設計中用到,tomcat中提供了在jsp和servelt中直接使用jndi的方法,主要是通過dbcp連線池,下面談一下我在tomcat5.5中配置和使用jndi的方法。jndi是j2ee中乙個很重要的標準,通常我們是在j2ee程式設計中用...