Bom dia, estamos desenvolvendo um erp na web utilizando jsf com hibernate e banco postgres, servidor tomcat 7.
Atualmente usamos esse arquivo de configurações:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="GestaoPU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost/AtualyGestao"/>
<property name="javax.persistence.jdbc.password" value="atg4747"/>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
<property name="javax.persistence.jdbc.user" value="AtualyGestao"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
<property name="hibernate.format_sql" value="false"/>
<property name="hibernate.connection.encoding" value="UTF-8"/>
</properties>
</persistence-unit>
</persistence>
Do jeito que está atualmente, cada vez que preciso fazer uma requisição seja ajax ou não, que precise de uma conexão com o banco de dados, estou abrindo uma sessão e trabalhando ela através de um bloco try/catch/finally. Pra mim essa é a melhor abordagem.
A questão é que, o sessionFactory será inicializado quando o primeiro usuario fizer uma conexão com o banco, e essa sessionFactory será compartilhada por todas as sessões do sistema, e nunca será fechada.
Utilizava esse mesmo arquivo programando em desktop com swing, porém lá, quando o usuario fechava o sistema, eu chamava o método close do EntityManagerFactory.
Na web não tem como fazer isso, já que todos os usuarios compartilham a mesma sessionFactory/entityManagerFactory, correto?
Se não, existe algum configuração que deixe o sessionFactory restrito a sessão? Assim consigo detectar quando a sessão fecha e fechar o entityManagerFactory.