3.8.2. JNDI绑定的SessionFactory
与JNDI绑定的Hibernate的SessionFactory
能简化工厂的查询,简化创建新的Session
. 需要注意的是这与JNDI绑定Datasource
没有关系, 它们只是恰巧用了相同的注册表!
如果你希望将SessionFactory
绑定到一个JNDI的名字空间, 用属性hibernate.session_factory_name
指定一个名字(如, java:hibernate/SessionFactory
). 如果不设置这个属性, SessionFactory
将不会被绑定到JNDI中. (在以只读JNDI为默认实现的环境中,这个设置尤其有用, 如Tomcat.)
在将SessionFactory
绑定至JNDI时, Hibernate将使用hibernate.jndi.url
, 和hibernate.jndi.class
的值来实例化初始环境(initial context). 如果它们没有被指定, 将使用默认的InitialContext
.
在你调用cfg.buildSessionFactory()
后, Hibernate会自动将SessionFactory
注册到JNDI. 这意味这你至少需要在你应用程序的启动代码(或工具类)中完成这个调用, 除非你使用HibernateService
来做JMX部署 (见后面讨论).
假若你使用JNDI SessionFactory
,EJB或者任何其它类都可以从JNDI中找到此SessionFactory
。
我们建议,在受管理的环境中,把SessionFactory
绑定到JNDI,在其它情况下,使用一个static(静态的)
singleton。为了在你的应用程序代码中隐藏这些细节,我们还建议你用一个helper类把实际查找SessionFactory
的代码隐藏起来,比如HibernateUtil.getSessionFactory()
。注意,这个类也就可以方便地启动Hibernate,参见第一章。