Hibernate Session Close [Resolvido]

Bom dia Pessoal,

estou tendo o seguinte problema

HTTP Status 500 - An exception occurred processing JSP page /p01.jsp at line 39
________________________________________
type Exception report
message An exception occurred processing JSP page /p01.jsp at line 39
description The server encountered an internal error that prevented it from fulfilling this request.
exception 
org.apache.jasper.JasperException: An exception occurred processing JSP page /p01.jsp at line 39

36:     </head> 
37:     <body>
38:            <% MenuView menu = new MenuView();%>
39:            <%=menu.getMenu(vLogin,vMachine,"S")%>
40:     
41:            <% 
42:      


Stacktrace:
        org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause 
org.hibernate.AssertionFailure: possible non-threadsafe access to the session
        org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:100)
        org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:854)
        org.hibernate.loader.Loader.doQuery(Loader.java:729)
        org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
        org.hibernate.loader.Loader.doList(Loader.java:2220)
        org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
        org.hibernate.loader.Loader.list(Loader.java:2099)
        org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
        org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
        org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
        org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
        org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
        org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:65)
        com.br.dao.MenuDao.consultar(MenuDao.java:147)
        com.br.dao.MenuDao.select(MenuDao.java:170)
        com.br.view.MenuView.geraMenu(MenuView.java:30)
        com.br.view.MenuView.getMenu(MenuView.java:161)
        org.apache.jsp.p01_jsp._jspService(p01_jsp.java:123)
        org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
HTTP Status 500 - An exception occurred processing JSP page /qry01.jsp at line 50
________________________________________
type Exception report
message An exception occurred processing JSP page /qry01.jsp at line 50
description The server encountered an internal error that prevented it from fulfilling this request.
exception 
org.apache.jasper.JasperException: An exception occurred processing JSP page /qry01.jsp at line 50

47:         Query_Controle    controle    = new Query_Controle();    
48:         Query_ControleDao controleDao = new Query_ControleDao();
49:     
50:         listaControle = controleDao.select(vColunas,vValores);
51:         
52:         
53:            if (listaControle.size() == 0){


Stacktrace:
        org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause 
javax.persistence.PersistenceException: org.hibernate.SessionException: Session is closed!
        org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:637)
        org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:74)
        com.br.dao.Query_ControleDao.consultar(Query_ControleDao.java:45)
        com.br.dao.Query_ControleDao.select(Query_ControleDao.java:87)
        org.apache.jsp.qry01_jsp._jspService(qry01_jsp.java:131)
        org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause 
org.hibernate.SessionException: Session is closed!
        org.hibernate.impl.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:49)
        org.hibernate.impl.SessionImpl.getBatcher(SessionImpl.java:260)
        org.hibernate.loader.Loader.getResultSet(Loader.java:1801)
        org.hibernate.loader.Loader.doQuery(Loader.java:674)
        org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
        org.hibernate.loader.Loader.doList(Loader.java:2220)
        org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
        org.hibernate.loader.Loader.list(Loader.java:2099)
        org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
        org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
        org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
        org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
        org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
        org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:65)
        com.br.dao.Query_ControleDao.consultar(Query_ControleDao.java:45)
        com.br.dao.Query_ControleDao.select(Query_ControleDao.java:87)
        org.apache.jsp.qry01_jsp._jspService(qry01_jsp.java:131)
        org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.50 logs.
HTTP Status 500 - An exception occurred processing JSP page /index.jsp at line 29
________________________________________
type Exception report
message An exception occurred processing JSP page /index.jsp at line 29
description The server encountered an internal error that prevented it from fulfilling this request.
exception 
org.apache.jasper.JasperException: An exception occurred processing JSP page /index.jsp at line 29

26:            session.setAttribute("session","ativa");
27:            
28:            ControlUser control = new ControlUser();
29:            String vUsuarioLogado = control.getUser(vLogin,vMachine);
30:            
31:            if (vUsuarioLogado.equals("invalid")){
32:                    response.sendRedirect("eacess.jsp");


Stacktrace:
        org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause 
javax.persistence.PersistenceException: org.hibernate.SessionException: Session is closed!
        org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:637)
        org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:74)
        com.br.dao.UsuarioDao.consultar(UsuarioDao.java:119)
        com.br.dao.UsuarioDao.select(UsuarioDao.java:137)
        com.br.control.ControlUser.getUserLogon(ControlUser.java:30)
        com.br.control.ControlUser.getUser(ControlUser.java:61)
        org.apache.jsp.index_jsp._jspService(index_jsp.java:101)
        org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause 
org.hibernate.SessionException: Session is closed!
        org.hibernate.impl.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:49)
        org.hibernate.impl.SessionImpl.getBatcher(SessionImpl.java:260)
        org.hibernate.loader.Loader.doQuery(Loader.java:726)
        org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
        org.hibernate.loader.Loader.doList(Loader.java:2220)
        org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
        org.hibernate.loader.Loader.list(Loader.java:2099)
        org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
        org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
        org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
        org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
        org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
        org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:65)
        com.br.dao.UsuarioDao.consultar(UsuarioDao.java:119)
        com.br.dao.UsuarioDao.select(UsuarioDao.java:137)
        com.br.control.ControlUser.getUserLogon(ControlUser.java:30)
        com.br.control.ControlUser.getUser(ControlUser.java:61)
        org.apache.jsp.index_jsp._jspService(index_jsp.java:101)
        org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.50 logs.
________________________________________
Apache Tomcat/7.0.50

O meu arquivo hibertate xml

<?xml version="1.0" encoding="UTF-8"?>
<hibernate-configuration>
    <session-factory name="Portal">
        <property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>
        <property name="hibernate.connection.password">xxxxx</property>
        <property name="hibernate.connection.url">xxxx</property>
        <property name="hibernate.connection.username">xxxx</property>
   <!--
        <property name="hibernate.dialect">org.hibernate.dialect.Oracle9iDialect</property>
   		<property name="dialect">org.hibernate.dialect.OracleDialect</property>
        
        <property name="hibernate.cache.use_second_level_cache">false</property>
        
        <property name="connection.useUnicode">true</property>
        <property name="connection.characterEncoding">UTF-8</property>
   -->
    </session-factory>
</hibernate-configuration>

A Minha classe de Manager

package com.br.dao;

//import java.io.IOException;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
//import javax.servlet.FilterChain;
//import javax.servlet.ServletException;
//import javax.servlet.ServletRequest;
//import javax.servlet.ServletResponse;

//import org.hibernate.Filter;

public class ManagerEntityManager {
	
	private static EntityManagerFactory factory;
	private static EntityManagerFactory factoryMobile;
    private static EntityManager entityManager;
    private static EntityManager entityManagerMobile;
	
    /**
     * Cria uma entity manager factory única e o retorna em todas as demais chamadas
     */
    private static EntityManagerFactory  getFactory() {

    	try{
    		if (factory == null || !factory.isOpen()) {        	
    			factory = Persistence.createEntityManagerFactory("Portal");
    		}
    	}catch(Exception e){    
    		System.out.println("Conexão Fechada");
    		factory = Persistence.createEntityManagerFactory("Portal");
    		System.out.println("Abrindo nova conexão");
        }
        return factory;
    }
    
    private static EntityManagerFactory  getFactoryMobile() {

    	try{
    		if (factoryMobile == null || !factoryMobile.isOpen()) {        	
    			factoryMobile = Persistence.createEntityManagerFactory("PortalMobile");
    		}
    	}catch(Exception e){    
    		System.out.println("Conexão Fechada");
    		factoryMobile = Persistence.createEntityManagerFactory("PortalMobile");
    		System.out.println("Abrindo nova conexão");
        }
        return factoryMobile;
    }    
    
    /**
     * Cria um entity manager único (se criar = true) para a thread e o retorna em todas as demais chamadas
     */
    private static EntityManager geraEntityManager() {

    	getFactory();
   	
    	try{
    		if (entityManager == null || !entityManager.isOpen()) {
    			entityManager = getFactory().createEntityManager();
    		}
    	}catch(Exception e){  
    		entityManager = getFactory().createEntityManager();
    	}
        return entityManager;
    }
    
    private static EntityManager geraEntityManagerMobile() {

    	getFactoryMobile();
   	
    	try{
    		if (entityManagerMobile == null || !entityManagerMobile.isOpen()) {
    			entityManagerMobile = getFactoryMobile().createEntityManager();
    		}
    	}catch(Exception e){  
    		entityManagerMobile = getFactoryMobile().createEntityManager();
    	}
        return entityManagerMobile;
    }

    /**
     * Cria um entity manager único
     */
    public EntityManager getEntityManager(){
		return geraEntityManager();
	}

    public EntityManager getEntityManagerMobile(){
		return geraEntityManagerMobile();
	}
    
	/* Metodo de Criação do Entity Manager 
	private EntityManager geraEntityManager(){
		
		try{
			entityManager = factory.createEntityManager();
			System.out.println("Factory já aberta");
		}catch(NullPointerException e){
			System.out.println("Criou Factory");
			factory = Persistence.createEntityManagerFactory("Portal");
		}
		
		if (entityManager == null){
			entityManager = factory.createEntityManager();
		}
		
		if (!factory.isOpen()) {
			System.out.println("Nova conexão");
			
			entityManager = factory.createEntityManager();
			
			return entityManager;
		}else{
			System.out.println("Utilizando conexão já aberta");
			return entityManager;
		}
	}*/
	/*
	public EntityManager getEntityManager(){
		return geraEntityManager();
	}*/
}

Minha Classe de Dao

package com.br.dao;

import java.util.List;
import java.util.logging.Logger;

import javax.persistence.EntityManager;
//import javax.persistence.EntityManagerFactory;
//import javax.persistence.Persistence;
import javax.persistence.Query;
import com.br.model.Menu;

public class MenuDao {
	
	Logger logger      = Logger.getLogger("MenuDao");
	StringBuilder vSQL = new StringBuilder(); 
	
	/* Metodo de Cria&#65533;&#65533;o do Entity Manager */
	private EntityManager getEntityManager(){
		
		ManagerEntityManager manager = new ManagerEntityManager();
		return manager.getEntityManager();
	}
	
	/* Metodo de adi&#65533;&#65533;o de Dados ao Banco de Dados */	
	private Menu gravar(Menu menu){
		
		EntityManager entityManager = getEntityManager();
		
		try{			
			entityManager.getTransaction().begin();
			logger.info("Incluindo Menu");
			if (menu.getDSC_MENU() != null){
				menu = entityManager.merge(menu);
			}else{
				entityManager.persist(menu);
			}	
			entityManager.getTransaction().commit();
		}finally{
			entityManager.close();
		}
		return menu;
	}
	
	/* Metodo de altera&#65533;&#65533;o de Dados ao Banco de Dados */
	private Menu atualizar(Menu menu){
		
		EntityManager entityManager = getEntityManager();
		
		try{
			entityManager.getTransaction().begin();
			logger.info("Atualizando Menu");
			if(menu.getDSC_MENU() != null){
				menu = entityManager.merge(menu);
			}else{
				entityManager.merge(menu);
			}
			entityManager.getTransaction().commit();
		}finally{
			entityManager.close();
		}
		
		return menu;
	}
	
	/* Metodo de Remo&#65533;&#65533;o de Dados ao Banco de Dados */
	private void remover(Menu menu){
		
		EntityManager entityManager = getEntityManager();
		
		try{
			entityManager.getTransaction().begin();
			logger.info("Removendo menu codigo : " + menu.getCOD_MENU());
			Object objRemove = entityManager.merge(menu);
			entityManager.remove(objRemove);
			entityManager.getTransaction().commit();
		} finally{
			entityManager.close();
		}
	}	
	
	/* Metodo de consulta no banco de dados */
	private List<Menu> consultar(List<String> pColunas, List<String> pValores){
	  	
		EntityManager entityManager = getEntityManager();
		vSQL.append( "from Menu as menu");
		
		if (pColunas != null){
			vSQL.append( " WHERE ");
			
			for (int i = 0; i < pColunas.size(); i++){
				if (i==0){
					vSQL.append( " " + pColunas.get(i).toString() + " = '" + pValores.get(i).toString() + "'");
				}else{
					vSQL.append( " AND " + pColunas.get(i).toString() + " = '" + pValores.get(i).toString() + "'");
				}
			}
		}
		
		vSQL.append( " ORDER BY DSC_MENU");
		logger.info("Consulta executada : " + vSQL);
		Query vQuery = entityManager.createQuery(vSQL.toString());		
		@SuppressWarnings("unchecked")
		
		List<Menu> listaMenu = vQuery.getResultList();
		entityManager.close();
		vSQL.delete(0, vSQL.length());
	  return listaMenu;		
	}	
	
	/* Metodo de consulta no banco de dados */
	private List<Menu> consultar(List<String> pColunas, List<String> pValores, String pOrder){
		
		EntityManager entityManager = getEntityManager();
		vSQL.append( "from Menu as menu");
		
		if (pColunas != null){
			vSQL.append( " WHERE ");
			
			for (int i = 0; i < pColunas.size(); i++){
				if (i==0){
					vSQL.append( " " + pColunas.get(i).toString() + " = '" + pValores.get(i).toString() + "'");
				}else{
					vSQL.append( " AND " + pColunas.get(i).toString() + " = '" + pValores.get(i).toString() + "'");
				}
			}
		}
		
		vSQL.append( " ORDER BY "+pOrder);
		logger.info("Consulta executada : " + vSQL);
		Query vQuery = entityManager.createQuery(vSQL.toString());		
		@SuppressWarnings("unchecked")
		List<Menu> listaMenu = vQuery.getResultList();
		entityManager.close();
		vSQL.delete(0, vSQL.length());
		return listaMenu;		
	}	
	
	public Menu add(Menu menu){
		return gravar(menu);
	}
	
	public Menu alter(Menu menu){
		return atualizar(menu);
	}
	
	public void delete(Menu menu){
		remover(menu);
	}
	
	public List<Menu> select(List<String> pColunas, List<String> pValores){
		return consultar(pColunas,pValores);
	}	
	
	public List<Menu> select(List<String> pColunas, List<String> pValores, String pOrder){
		return consultar(pColunas,pValores,pOrder);
	}		
}

Alguem poderia me ajudar com este problema que está causando impacto no sistema ?

Grato.

Seu EntityManager não deve ser static.

Ele deve ser um por requisição, sempre. Não reutilize esse cara nunca.

Hebert Coelho, alterei o meu metodo para está maneira.

package com.br.dao;

//import java.io.IOException;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
//import javax.servlet.FilterChain;
//import javax.servlet.ServletException;
//import javax.servlet.ServletRequest;
//import javax.servlet.ServletResponse;

//import org.hibernate.Filter;

public class ManagerEntityManager {
	
	private EntityManagerFactory factory;
	private EntityManagerFactory factoryMobile;
    private EntityManager entityManager;
    private EntityManager entityManagerMobile;
	
    /**
     * Cria uma entity manager factory única e o retorna em todas as demais chamadas
     */
    private EntityManagerFactory  getFactory() {

    	try{
    		if (factory == null || !factory.isOpen()) {        	
    			factory = Persistence.createEntityManagerFactory("Portal");
    		}
    	}catch(Exception e){    
    		System.out.println("Conexão Fechada");
    		factory = Persistence.createEntityManagerFactory("Portal");
    		System.out.println("Abrindo nova conexão");
        }
        return factory;
    }
    
    private EntityManagerFactory  getFactoryMobile() {

    	try{
    		if (factoryMobile == null || !factoryMobile.isOpen()) {        	
    			factoryMobile = Persistence.createEntityManagerFactory("PortalMobile");
    		}
    	}catch(Exception e){    
    		System.out.println("Conexão Fechada");
    		factoryMobile = Persistence.createEntityManagerFactory("PortalMobile");
    		System.out.println("Abrindo nova conexão");
        }
        return factoryMobile;
    }    
    
    /**
     * Cria um entity manager único (se criar = true) para a thread e o retorna em todas as demais chamadas
     */
    private EntityManager geraEntityManager() {

    	getFactory();
   	
    	try{
    		//if (entityManager == null || !entityManager.isOpen()) {
    		entityManager = getFactory().createEntityManager();
    		//}
    	}catch(Exception e){  
    		entityManager = getFactory().createEntityManager();
    	}
        return entityManager;
    }
    
    private EntityManager geraEntityManagerMobile() {

    	getFactoryMobile();
   	
    	try{
    		//if (entityManagerMobile == null || !entityManagerMobile.isOpen()) {
    			entityManagerMobile = getFactoryMobile().createEntityManager();
    		//}
    	}catch(Exception e){  
    		entityManagerMobile = getFactoryMobile().createEntityManager();
    	}
        return entityManagerMobile;
    }

    /**
     * Cria um entity manager único
     */
    public EntityManager getEntityManager(){
		return geraEntityManager();
	}

    public EntityManager getEntityManagerMobile(){
		return geraEntityManagerMobile();
	}
    
	/* Metodo de Criação do Entity Manager 
	private EntityManager geraEntityManager(){
		
		try{
			entityManager = factory.createEntityManager();
			System.out.println("Factory já aberta");
		}catch(NullPointerException e){
			System.out.println("Criou Factory");
			factory = Persistence.createEntityManagerFactory("Portal");
		}
		
		if (entityManager == null){
			entityManager = factory.createEntityManager();
		}
		
		if (!factory.isOpen()) {
			System.out.println("Nova conexão");
			
			entityManager = factory.createEntityManager();
			
			return entityManager;
		}else{
			System.out.println("Utilizando conexão já aberta");
			return entityManager;
		}
	}*/
	/*
	public EntityManager getEntityManager(){
		return geraEntityManager();
	}*/
}

Devo também sempre criar a factory ?

Grato

Não. (:

Dê uma lida nesse material: http://uaihebert.com/jpa-mini-livro-primeiros-passos-e-conceitos-detalhados/

Ele vai te ajudar muito.

Hebert Coelhop,

Após ler o seu guia.
Fiz a seguinte alteração

package com.br.dao;

//import java.io.IOException;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;


public class ManagerEntityManager {
	
	private static EntityManagerFactory entityManagerFactory;
	
	private ManagerEntityManager() {
        }

	public static EntityManager getEntityManager(){
        if (entityManagerFactory == null){
            entityManagerFactory = Persistence.createEntityManagerFactory("Portal");
        }
 
        return entityManagerFactory.createEntityManager();
    }

}

E Alterei minha classe de Dao, da seguinte maneira.

package com.br.dao;

import java.util.List;
import java.util.logging.Logger;

import javax.persistence.EntityManager;
//import javax.persistence.EntityManagerFactory;
//import javax.persistence.Persistence;
import javax.persistence.Query;
import com.br.model.Menu;

public class MenuDao {
	
	Logger logger      = Logger.getLogger("MenuDao");
	StringBuilder vSQL = new StringBuilder(); 
	
	/* Metodo de Cria&#65533;&#65533;o do Entity Manager */
	private EntityManager getEntityManager(){
		return ManagerEntityManager.getEntityManager();
	}
	
	/* Metodo de adi&#65533;&#65533;o de Dados ao Banco de Dados */	
	private Menu gravar(Menu menu){
		
		EntityManager entityManager = getEntityManager();
		
		try{			
			entityManager.getTransaction().begin();
			logger.info("Incluindo Menu");
			if (menu.getDSC_MENU() != null){
				menu = entityManager.merge(menu);
			}else{
				entityManager.persist(menu);
			}	
			entityManager.getTransaction().commit();
		}finally{
			//entityManager.close();
		}
		return menu;
	}
	
	/* Metodo de altera&#65533;&#65533;o de Dados ao Banco de Dados */
	private Menu atualizar(Menu menu){
		
		EntityManager entityManager = getEntityManager();
		
		try{
			entityManager.getTransaction().begin();
			logger.info("Atualizando Menu");
			if(menu.getDSC_MENU() != null){
				menu = entityManager.merge(menu);
			}else{
				entityManager.merge(menu);
			}
			entityManager.getTransaction().commit();
		}finally{
			//entityManager.close();
		}
		
		return menu;
	}
	
	/* Metodo de Remo&#65533;&#65533;o de Dados ao Banco de Dados */
	private void remover(Menu menu){
		
		EntityManager entityManager = getEntityManager();
		
		try{
			entityManager.getTransaction().begin();
			logger.info("Removendo menu codigo : " + menu.getCOD_MENU());
			Object objRemove = entityManager.merge(menu);
			entityManager.remove(objRemove);
			entityManager.getTransaction().commit();
		} finally{
			//entityManager.close();
		}
	}	
	
	/* Metodo de consulta no banco de dados */
	private List<Menu> consultar(List<String> pColunas, List<String> pValores){
	  	
		EntityManager entityManager = getEntityManager();
		vSQL.append( "from Menu as menu");
		
		if (pColunas != null){
			vSQL.append( " WHERE ");
			
			for (int i = 0; i < pColunas.size(); i++){
				if (i==0){
					vSQL.append( " " + pColunas.get(i).toString() + " = '" + pValores.get(i).toString() + "'");
				}else{
					vSQL.append( " AND " + pColunas.get(i).toString() + " = '" + pValores.get(i).toString() + "'");
				}
			}
		}
		
		vSQL.append( " ORDER BY DSC_MENU");
		logger.info("Consulta executada : " + vSQL);
		Query vQuery = entityManager.createQuery(vSQL.toString());		
		@SuppressWarnings("unchecked")
		
		List<Menu> listaMenu = vQuery.getResultList();
		//entityManager.close();
		vSQL.delete(0, vSQL.length());
	  return listaMenu;		
	}	
	
	/* Metodo de consulta no banco de dados */
	private List<Menu> consultar(List<String> pColunas, List<String> pValores, String pOrder){
		
		EntityManager entityManager = getEntityManager();
		vSQL.append( "from Menu as menu");
		
		if (pColunas != null){
			vSQL.append( " WHERE ");
			
			for (int i = 0; i < pColunas.size(); i++){
				if (i==0){
					vSQL.append( " " + pColunas.get(i).toString() + " = '" + pValores.get(i).toString() + "'");
				}else{
					vSQL.append( " AND " + pColunas.get(i).toString() + " = '" + pValores.get(i).toString() + "'");
				}
			}
		}
		
		vSQL.append( " ORDER BY "+pOrder);
		logger.info("Consulta executada : " + vSQL);
		Query vQuery = entityManager.createQuery(vSQL.toString());		
		@SuppressWarnings("unchecked")
		List<Menu> listaMenu = vQuery.getResultList();
		//entityManager.close();
		vSQL.delete(0, vSQL.length());
		return listaMenu;		
	}	
	
	public Menu add(Menu menu){
		return gravar(menu);
	}
	
	public Menu alter(Menu menu){
		return atualizar(menu);
	}
	
	public void delete(Menu menu){
		remover(menu);
	}
	
	public List<Menu> select(List<String> pColunas, List<String> pValores){
		return consultar(pColunas,pValores);
	}	
	
	public List<Menu> select(List<String> pColunas, List<String> pValores, String pOrder){
		return consultar(pColunas,pValores,pOrder);
	}		
}

Seria isso o que se referia ?

Chefe, foi mal. Seu código ta grande e agora ñ tenho como olhar.

Mas se vc seguir as dicas que eu falei, você não terá mais problema de acesso concorrente no mesmo EntityManager

Hebert Coelho,

Creio que consegui resolver os problemas, seguindo as dicas que me indicou.

grato,

[quote=aszarael]Hebert Coelho,

Creio que consegui resolver os problemas, seguindo as dicas que me indicou.

grato,[/quote]Tranquilo chefe.

Qualquer coisa, poste aí. (: