Hibernate的JNDI一问

Hibernate文档上说,如果在配置文件中设置了hibernate.session_factory_name属性,它会将SessionFactory 绑定到一个名为该属性值的JNDI上,但我看了源码,好象没看到这一绑定过程,请大虾指教

这个问题也一直困扰我,没有彻底解决。

Hibernate的源代码有JNDI SPI的实现,也有绑定的代码(你没有找到),所以按道理来说,只要在hibernate.properties配置了JNDI,那么就应该可以在App Server上lookup到。但是App Server的JNDI树是自己单独实现的,他不可能也不应该被Hibernate的JNDI SPI实现覆盖,所以在App Server环境下,这样配置是无效的。如果想要在App Server的JNDI树上lookup到Hibernate的SessionFactory,从原理上来说,SessionFactory的获得是要自己编写的,然后在App Server环境中把该类绑定到App Server的JNDI上,Hibernate的文档中有在JBoss和Weblogic的JNDI配置,就是按照这样的思路。

我想除非是在没有App Server的JNDI实现的时候,这样的配置大概才有效吧。可能就像是Hibernate的JTA,虽然可以配置,但实际上就像一个摆设,在真实的App Server环境下,是需要从App Server端来配置的。

以上是个人的推测。

Robbin兄,我看了一些源代码,感觉JNDI主要用在JTA,Datasource以及SessionFactory上。对于JTA和Datasource,是不是只要在hibernate.properties中指定了JNDI名,然后在应用服务器中配置该JNDI,那么在hibernate的应用程序中就可以lookup了,而不需要事先调用NamingHelper的bind方法

另外还想问一下,JNDI一般来说是不是一定要在web服务器(如Tomcat)和应用服务器上才能使用呢?Sun的com.sun.jndi.fscontext.RefFSContextFactory能在GUI应用程序中使用吗?
对JNDI还是比较迷惑,望指教

SessionFactory,JTA和DataSource的情况都不同,要一一分析。

由于我对JBoss没有接触过,所以没有怎么看JBoss的配置,但对于Weblogic来说,是比较标准的把SessionFactory绑定到Weblogic的JNDI树上的做法。

JTA就不说了,以前帖子分析过了。

DataSource还是要用App Server的DataSource,JNDI也是App Server的,只不过需要告诉Hibernate,所以需要配置文件里面指名。

JNDI不一定要在App Server中用,如果有中心的目录服务器,也有可能放在在目录服务器中。我对Sun的JNDI实现不懂。

sadfsa

我没用过hibernate的JNDI,其实我认为如果hibernate需要把配置文件中的SF
挂到JNDI树上它只要有JNDI实现的客户端API,直接访问就行了,省得再到appserver上去配置

那个sun的JNDI实现是访问文件系统的吧

dsafa

TO robbin:
使用weblogic的JNDI设置SF,需要进行哪些特殊操作呀