企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 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,参见第一章。