Erro ao incluir IReport no projeto PermGen space

8 respostas
D

Galora, bom dia, estou com um problema que não consigo resolver.
Estou fazendo um projeto financeiro pessoal, e ao incluir o ireport estou recebendo este erro abaixo. Meu projeto está com mais de 30 megas já, não sei se isso influencia pois sou iniciante na área, eu já tentei aumentar a memoria da JVM pelo eclipse(arquivo eclipse.ini) já tentei através de argumentos do TomCat, no proprio eclipse e nada adianta.
Alguém tem alguma idéia do q eu possa fazer pra consertar isso?
Se precisar de algum código meu só pedir q eu posto aqui, mas n acho que seja problema com isso.

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.lang.OutOfMemoryError: PermGen space

Estou meio desesperado, agradeço qualquer dica.
Muito obrigado.

8 Respostas

R

Com certeza não é culpa do Ireport…

Tem algo ‘comendo’ recurso demais ai…

D

Olá, raf4ever, obrigado pela resposta.
Ao ler seu post, eu decidi excluir e importar o projeto novamente
E agora o server iniciou, mas to tento problema com filenotfound =\

Valeu!

FernandoFranzini

PermGen quer dizer que a area de memória da JVM de carga de classes estouro…muito normal de acontecer quando um container JEE tem muita classes dentro própria aplicação + os jar’s para carregar.
Mais comum ainda quando o container JEE tem varios wars sendo executado simultaneamente.
Para corrigir isso, aumente essa area de memoria nos parâmetros do inicio do seu container.
Veja que isso não é um erro, é muito normal uma vez que cada container JEE deve ser devidamente configurado para o determinado ambiente/cenario a ser usado.

OBS - alterar o eclipse.ini muda os parâmetros para o eclipse e não para o tomcat!!!

No ambiente de produção vc tem alterar os parâmetros de inicialização do tomcat diretamente no arquivo dele.
No ambiente de desenvolvimento, o tomcat esta sendo executado direto do eclipse, e sendo assim vc consegue acrescentar os parametros no seguinte menu:

  • Abra as propriedades do server clicando 2 vezes em cima do sevidor na aba “Servers”
  • Abra as configurações chamada de “Open launch configuration”
  • Selecione a aba “Arguments”, no campo VM arguments acrescente todos os seus parâmetros que customizam a memoria: Exemplo: -XX:MaxPermSize=246m
    Como eu tenho que desenvolver diversos projeto junto costumo usar -XX:MaxPermSize=512m.
R

dennisbf:
Olá, raf4ever, obrigado pela resposta.
Ao ler seu post, eu decidi excluir e importar o projeto novamente
E agora o server iniciou, mas to tento problema com filenotfound =\

Valeu!

Posta o stacktrace.

D

Opa, raf4ever, valeu pela ajuda!!

financeiro.util.UtilException: Não foi possível gerar o relatório. at financeiro.web.util.RelatorioUtil.geraRelatorio(RelatorioUtil.java:88) at financeiro.web.ContaBean.getArquivoRetorno(ContaBean.java:35) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at javax.el.BeanELResolver.getValue(BeanELResolver.java:302) at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) at com.sun.el.parser.AstValue.getValue(AstValue.java:116) at com.sun.el.parser.AstValue.getValue(AstValue.java:163) at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:219) at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) at org.primefaces.component.filedownload.FileDownloadActionListener.processAction(FileDownloadActionListener.java:50) at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88) at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769) at javax.faces.component.UICommand.broadcast(UICommand.java:300) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:312) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:324) at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:324) at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:101) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:324) at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:324) at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:146) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:324) at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:324) at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:324) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:182) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:324) at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:324) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:324) at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:174) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at financeiro.web.filter.ConexaoHibernateFilter.doFilter(ConexaoHibernateFilter.java:20) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:851) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:278) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:680) Caused by: net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: /Users/DennisFaggiani/Documents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/FinanceiroWeb/relatorios/contas.jasper at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:94) at net.sf.jasperreports.engine.util.JRLoader.loadObjectFromFile(JRLoader.java:83) at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:74) at financeiro.web.util.RelatorioUtil.geraRelatorio(RelatorioUtil.java:50) ... 68 more Caused by: java.io.FileNotFoundException: /Users/DennisFaggiani/Documents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/FinanceiroWeb/relatorios/contas.jasper ... 72 more

oq eu to achando estranho é o caminho que ele tá buscando.
O arquivo na verdade tá no package financeiro.relatorios, ele não está puxando o financeiro, parece…
Muito Obrigado

D

putz, cliquei em citar ao invés de editar, perdão.

Polverini

como vc ta pegando o arquivo jasper ?

D
Polverini:
como vc ta pegando o arquivo jasper ?
Olá, Polverini, obrigado pela resposta. No JSF eu puxo através da minha ContaBean
public class ContaBean {

	public StreamedContent getArquivoRetorno() throws financeiro.util.UtilException {
		FacesContext context = FacesContext.getCurrentInstance();
		ContextoBean contextoBean = ContextoUtil.getContextoBean();
		String usuario = contextoBean.getUsuarioLogado().getLogin();
		String nomeRelatorioJasper = "contas";
		String nomeRelatorioSaida = usuario + "_contas";
		RelatorioUtil relatorioUtil = new RelatorioUtil();
		HashMap parametrosRelatorio = new HashMap();
		parametrosRelatorio.put("codigoUsuario", contextoBean.getUsuarioLogado().getCodigo());
		try {
			this.arquivoRetorno = relatorioUtil.geraRelatorio(parametrosRelatorio, nomeRelatorioJasper, nomeRelatorioSaida, this.tipoRelatorio);
		} catch (UtilException e) {
			context.addMessage(null, new FacesMessage(e.getMessage()));
			return null;
		} 
		return this.arquivoRetorno;
	}
e este é o RelatorioUtil
package financeiro.web.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;

import javax.faces.context.FacesContext;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.oasis.JROdtExporter;
import net.sf.jasperreports.engine.util.JRLoader;

import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;

import financeiro.util.UtilException;

public class RelatorioUtil {

	public static final int RELATORIO_PDF = 1;
	public static final int RELATORIO_EXCEL = 2;
	public static final int RELATORIO_HTML = 3;
	public static final int RELATORIO_PLANILHA_OPEN_OFFICE = 4;

	public StreamedContent geraRelatorio(HashMap parametrosRelatorio,
			String nomeRelatorioJasper, String nomeRelatorioSaida,
			int tipoRelatorio) throws UtilException {
		StreamedContent arquivoRetorno = null;

		try {
			FacesContext context = FacesContext.getCurrentInstance();
			Connection conexao = this.getConexao();
			String caminhoRelatorio = context.getExternalContext().getRealPath(
					"relatorios");
			String caminhoArquivoJasper = caminhoRelatorio + File.separator
					+ nomeRelatorioJasper + ".jasper";
			String caminhoArquivoRelatorio = null;

			JasperReport relatorioJasper = (JasperReport) JRLoader
					.loadObject(caminhoArquivoJasper);
			JasperPrint impressoraJasper = JasperFillManager.fillReport(
					relatorioJasper, parametrosRelatorio, conexao);
			JRExporter tipoArquivoExportado = null;
			String extensaoArquivoExportado = "";
			File arquivoGerado = null;

			switch (tipoRelatorio) {
			case RelatorioUtil.RELATORIO_PDF:
				tipoArquivoExportado = new JRPdfExporter();
				extensaoArquivoExportado = "pdf";
				break;
			case RelatorioUtil.RELATORIO_HTML:
				tipoArquivoExportado = new JRHtmlExporter();
				extensaoArquivoExportado = "html";
				break;
			case RelatorioUtil.RELATORIO_EXCEL:
				tipoArquivoExportado = new JRXlsExporter();
				extensaoArquivoExportado = "xls";
				break;
			case RelatorioUtil.RELATORIO_PLANILHA_OPEN_OFFICE:
				tipoArquivoExportado = new JROdtExporter();
				extensaoArquivoExportado = "ods";
				break;
			default:
				tipoArquivoExportado = new JRPdfExporter();
				extensaoArquivoExportado = "pdf";
				break;
			}
			caminhoArquivoRelatorio = caminhoRelatorio + File.separator
					+ nomeRelatorioSaida + "." + extensaoArquivoExportado;
			arquivoGerado = new java.io.File(caminhoArquivoRelatorio);
			tipoArquivoExportado.setParameter(JRExporterParameter.JASPER_PRINT,
					impressoraJasper);
			tipoArquivoExportado.setParameter(JRExporterParameter.OUTPUT_FILE,
					arquivoGerado);
			tipoArquivoExportado.exportReport();
			arquivoGerado.deleteOnExit();

			InputStream conteudoRelatorio = new FileInputStream(arquivoGerado);
			arquivoRetorno = new DefaultStreamedContent(conteudoRelatorio,
					"application/" + extensaoArquivoExportado,
					nomeRelatorioSaida + "." + extensaoArquivoExportado);
		} catch (JRException e) {
			throw new UtilException("Não foi possível gerar o relatório.", e);
		} catch (FileNotFoundException e) {
			throw new UtilException("Arquivo do relatório não encontrado.", e);
		}
		return arquivoRetorno;
	}

	private Connection getConexao() throws UtilException {
		java.sql.Connection conexao = null;
		try {
			Context initContext = new InitialContext();
			Context envContext = (Context) initContext
					.lookup("java:/comp/env/");
			javax.sql.DataSource ds = (javax.sql.DataSource) envContext
					.lookup("jdbc/FinanceiroDB");
			conexao = (java.sql.Connection) ds.getConnection();
		} catch (NamingException e) {
			throw new UtilException(
					"Não foi possível encontrar o nome da conexão do banco.", e);
		} catch (SQLException e) {
			throw new UtilException("Ocorreu um erro de SQL.", e);
		}
		return conexao;
	}
}
Muito Obrigado.
Criado 23 de setembro de 2011
Ultima resposta 23 de set. de 2011
Respostas 8
Participantes 4