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.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.