3.8.2. JNDI-bound SessionFactory
A JNDI bound Hibernate SessionFactory
can simplify the lookup of the factory and the creation of new Session
s. Note that this is not related to a JNDI bound Datasource
, both simply use the same registry!
If you wish to have the SessionFactory
bound to a JNDI namespace, specify a name (eg. java:hibernate/SessionFactory
) using the property hibernate.session_factory_name
. If this property is omitted, the SessionFactory
will not be bound to JNDI. (This is especially useful in environments with a read-only JNDI default implementation, e.g. Tomcat.)
When binding the SessionFactory
to JNDI, Hibernate will use the values of hibernate.jndi.url
, hibernate.jndi.class
to instantiate an initial context. If they are not specified, the default InitialContext
will be used.
Hibernate will automatically place the SessionFactory
in JNDI after you call cfg.buildSessionFactory()
. This means you will at least have this call in some startup code (or utility class) in your application, unless you use JMX deployment with the HibernateService
(discussed later).
If you use a JNDI SessionFactory
, an EJB or any other class may obtain the SessionFactory
using a JNDI lookup.
We recommend that you bind the SessionFactory
to JNDI in a managend environment and use a static
singleton otherwise. To shield your application code from these details, we also recommend to hide the actual lookup code for a SessionFactory
in a helper class, such as HibernateUtil.getSessionFactory()
. Note that such a class is also a convenient way to startup Hibernate - see chapter 1.