Java.lang.OutOfMemoryError: Java heap space

Galera,

estou enfrentando este problema
e não consegui entender
alguem poderia me ajudar

HTTP Status 500 - javax.servlet.ServletException: java.lang.OutOfMemoryError: Java heap space
________________________________________
type Exception report
message javax.servlet.ServletException: java.lang.OutOfMemoryError: Java heap space
description The server encountered an internal error that prevented it from fulfilling this request.
exception 
org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.OutOfMemoryError: Java heap space
        org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
        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.servlet.ServletException: java.lang.OutOfMemoryError: Java heap space
        org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:912)
        org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:841)
        org.apache.jsp.p01_jsp._jspService(p01_jsp.java:201)
        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 
java.lang.OutOfMemoryError: Java heap space
        java.util.Arrays.copyOf(Unknown Source)
        java.lang.AbstractStringBuilder.expandCapacity(Unknown Source)
        java.lang.AbstractStringBuilder.ensureCapacityInternal(Unknown Source)
        java.lang.AbstractStringBuilder.append(Unknown Source)
        java.lang.StringBuffer.append(Unknown Source)
        org.hibernate.sql.SelectFragment.toFragmentString(SelectFragment.java:114)
        org.hibernate.persister.entity.AbstractEntityPersister.concretePropertySelectFragment(AbstractEntityPersister.java:1164)
        org.hibernate.persister.entity.AbstractEntityPersister.concretePropertySelectFragment(AbstractEntityPersister.java:1136)
        org.hibernate.persister.entity.AbstractEntityPersister.generateSnapshotSelectString(AbstractEntityPersister.java:1178)
        org.hibernate.persister.entity.AbstractEntityPersister.postConstruct(AbstractEntityPersister.java:2951)
        org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:409)
        org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:55)
        org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:226)
        org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)
        org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
        org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
        org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)
        javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)
        javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
        com.br.dao.MenuDao.getEntityManager(MenuDao.java:22)
        com.br.dao.MenuDao.consultar(MenuDao.java:115)
        com.br.dao.MenuDao.select(MenuDao.java:155)
        com.br.view.MenuView.geraMenu(MenuView.java:30)
        com.br.view.MenuView.getMenu(MenuView.java:137)
        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)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.50 logs.

Pode ser que seu código não esteja dando “close” nas connections ou statements. O pool vai aumentando até estourar a memória.

Essa mensagem diz qual é falha que está ocorrendo:

ou seja, em algum momento, o seu sistema esgota a memória disponível para a JVM. Analisando melhor a sua stack trace, percebemos que esse esgotamente ocorre durante a criação de um EntityManagerFactory:

        org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)  
        org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)  
        javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)  
        javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)

e olhando o código que chama a criação do EntityManagerFactory:

        com.br.dao.MenuDao.getEntityManager(MenuDao.java:22)  
        com.br.dao.MenuDao.consultar(MenuDao.java:115)  
        com.br.dao.MenuDao.select(MenuDao.java:155)  
        com.br.view.MenuView.geraMenu(MenuView.java:30)  
        com.br.view.MenuView.getMenu(MenuView.java:137)  

eu vejo que você não se preocupou em criar o EntityManagerFactory uma única vez, ou seja, pela maneira que você organizou o seu código, eu me arrisco a dizer que você cria um EntityManagerFactory toda vez que você precisa ir ao banco. Isso significa que cada vez que você vai ao banco de dados você constrói um novo pool de conexões, um novo map de propriedades e toda uma infra-estrutura que você precisa criar uma única vez para toda a sua aplicação.

Enfim, isso é só uma suposição, para fazer uma análise melhor seria interessante se você postasse a JSP, e as classes MenuView e MenuDao.

Realment rmendes08,

Estou criando uma entity, para cada classe.

veja

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("br.com.log"); 
	
	/* Metodo de Cria&#65533;&#65533;o do Entity Manager */
	private EntityManager getEntityManager(){
		
		EntityManagerFactory factory;
		EntityManager entityManager = null;
		
		factory = Persistence.createEntityManagerFactory("Portal");
		
		if (factory.isOpen()) {
			factory.close();
			entityManager = factory.createEntityManager();
		}else{
			entityManager = factory.createEntityManager();
		}
		
		return entityManager;
	}
	
	/* 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();
		String vSQL = "from Menu as menu";
		
		if (pColunas != null){
			vSQL += " WHERE ";
			
			for (int i = 0; i < pColunas.size(); i++){
				if (i==0){
					vSQL += " " + pColunas.get(i).toString() + " = '" + pValores.get(i).toString() + "'";
				}else{
					vSQL += " AND " + pColunas.get(i).toString() + " = '" + pValores.get(i).toString() + "'";
				}
			}
		}
		
		vSQL += " ORDER BY DSC_MENU";
		logger.info("Consulta executada : " + vSQL);
		Query vQuery = entityManager.createQuery(vSQL);		
		@SuppressWarnings("unchecked")
		List<Menu> listaMenu = vQuery.getResultList();
		return listaMenu;		
	}	
	
	/* Metodo de consulta no banco de dados */
	private List<Menu> consultar(List<String> pColunas, List<String> pValores, String pOrder){
		
		EntityManager entityManager = getEntityManager();
		String vSQL = "from Menu as menu";
		
		if (pColunas != null){
			vSQL += " WHERE ";
			
			for (int i = 0; i < pColunas.size(); i++){
				if (i==0){
					vSQL += " " + pColunas.get(i).toString() + " = '" + pValores.get(i).toString() + "'";
				}else{
					vSQL += " AND " + pColunas.get(i).toString() + " = '" + pValores.get(i).toString() + "'";
				}
			}
		}
		
		vSQL += " ORDER BY "+pOrder;
		logger.info("Consulta executada : " + vSQL);
		Query vQuery = entityManager.createQuery(vSQL);		
		@SuppressWarnings("unchecked")
		List<Menu> listaMenu = vQuery.getResultList();
		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);
	}		
}

No caso, como devo fazer para criar uma ??

removido duplicado

removido duplicado

Bom dia Pessoal,

Para resolver este problema fiz o seguinte,

criei uma classe de gerenciamento

package com.br.dao;

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

public class ManagerEntityManager {
	
	EntityManagerFactory factory;
	EntityManager entityManager;

	/* Metodo de Criação do Entity Manager */
	private EntityManager geraEntityManager(){
		
		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();
	}
}

Onde nas minhas classes
utilizo desta 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("br.com.log"); 
	
	/* Metodo de Cria&#65533;&#65533;o do Entity Manager */
	private EntityManager getEntityManager(){
		/*
		EntityManagerFactory factory;
		EntityManager entityManager = null;
		
		factory = Persistence.createEntityManagerFactory("Portal");
		
		if (factory.isOpen()) {
			factory.close();
			entityManager = factory.createEntityManager();
		}else{
			entityManager = factory.createEntityManager();
		}
		
		return entityManager;
		*/
		
		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();
		String vSQL = "from Menu as menu";
		
		if (pColunas != null){
			vSQL += " WHERE ";
			
			for (int i = 0; i < pColunas.size(); i++){
				if (i==0){
					vSQL += " " + pColunas.get(i).toString() + " = '" + pValores.get(i).toString() + "'";
				}else{
					vSQL += " AND " + pColunas.get(i).toString() + " = '" + pValores.get(i).toString() + "'";
				}
			}
		}
		
		vSQL += " ORDER BY DSC_MENU";
		logger.info("Consulta executada : " + vSQL);
		Query vQuery = entityManager.createQuery(vSQL);		
		@SuppressWarnings("unchecked")
		List<Menu> listaMenu = vQuery.getResultList();
		return listaMenu;		
	}	
	
	/* Metodo de consulta no banco de dados */
	private List<Menu> consultar(List<String> pColunas, List<String> pValores, String pOrder){
		
		EntityManager entityManager = getEntityManager();
		String vSQL = "from Menu as menu";
		
		if (pColunas != null){
			vSQL += " WHERE ";
			
			for (int i = 0; i < pColunas.size(); i++){
				if (i==0){
					vSQL += " " + pColunas.get(i).toString() + " = '" + pValores.get(i).toString() + "'";
				}else{
					vSQL += " AND " + pColunas.get(i).toString() + " = '" + pValores.get(i).toString() + "'";
				}
			}
		}
		
		vSQL += " ORDER BY "+pOrder;
		logger.info("Consulta executada : " + vSQL);
		Query vQuery = entityManager.createQuery(vSQL);		
		@SuppressWarnings("unchecked")
		List<Menu> listaMenu = vQuery.getResultList();
		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);
	}		
}

Isso resolveria o problema ?