[RESOLVIDO] - Eclipse Indigo + IReport 4.3.1

Pessoal, boa tarde !!

gostaria de postar um problema que estou passando para saber se alguém já passou por algo parecido…

Meu Ambiente:

Eclipse Indigo (3.7) + JSF 2.0 + JPA 2.0 + Primefaces + Spring-Security 3.1 + Maven 2.2.1

Estou com problemas para gerar meu relatório usando o IReport 4.3.1:

estou recebendo o seguinte erro: javax.servlet.ServletException: java.lang.OutOfMemoryError: PermGen space

Não pode ser o tamanho do meu relatório estar estrapolando a memória porque só tenho 2 campos…

Minha chamada para o relatório é a seguinte:

		try {

			List<UsuarioBean> listaUsuario = new ArrayList<UsuarioBean>();

			UsuarioBean usuario = new UsuarioBean();

			usuario.setEmail("teste@gmail.com");
			usuario.setLogin("login teste");
			
			listaUsuario.add(usuario);

			Map<String, Object> parametros = new HashMap<String, Object>();
			parametros.put("email", "Email");
			parametros.put("nome", "Nome");
			parametros.put("permissao", "Permissao");
			
			
			JRDataSource jrds = new JRBeanCollectionDataSource(listaUsuario);

			String arquivoPDF = "Teste" + ".pdf";

			FacesContext facesContext = FacesContext.getCurrentInstance();
			ServletContext servletContext = (ServletContext) facesContext.getExternalContext().getContext();

			String arquivoJasper = "report2.jasper";
			// recupera path completo da aplicacao
			String pathRel = servletContext.getRealPath(arquivoJasper);
			System.out.println(pathRel);
			
			HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
			ServletOutputStream servletOutputStream = response.getOutputStream();

			byte[] bytes = JasperRunManager.runReportToPdf(pathRel, parametros,jrds);
			 
			if (bytes != null && bytes.length > 0) {
				// Abre no leitor pdf padrão da maquina cliente
				response.setHeader("Content-Disposition","attachment; filename=" + arquivoPDF);
				response.setContentType("application/pdf");
				response.setContentLength(bytes.length);
				servletOutputStream.write(bytes, 0, bytes.length);
				servletOutputStream.flush();
				servletOutputStream.close();

			}

			facesContext.renderResponse();
			facesContext.responseComplete();

		} catch (Exception e) {
			e.printStackTrace();

		}

Eu acredito que o código e o arquivo .jrxml estão corretos, porque eu consegui abrir o mesmíssimo relatório com o IReport 3.7, mas eu gostaria de usar a versão 4.3.1…

Talvez seja algum jar que esteja faltando … eu estou usando estes:

commons-beanutil-1.8.2.jar

commons-digester-1.7.0.jar

iText-2.1.7.jar

jasperreports-4.1.3.jar

Por favor, alguém tem alguma idéia do que possa ser ???

Pessoal problema resolvido !!

eu aumentei o tamanho do meu espaço para PermGen no arquivo eclipse.ini :

–launcher.XXMaxPermSize
512M

e no meu tomcat (botão direito na aba Servers (Tomcat 7) ) -> open -> open lauch configuration ->

Adicionem o parâmetro “-XX:MaxPermSize=256M” na guia “Arguments” -> VM arguments.

Com isso o problema já está resolvido !

Espero ter ajudado ! um abraço pessoal !!

[quote=Lael Santos]Pessoal, boa tarde !!

gostaria de postar um problema que estou passando para saber se alguém já passou por algo parecido…

Meu Ambiente:

Eclipse Indigo (3.7) + JSF 2.0 + JPA 2.0 + Primefaces + Spring-Security 3.1 + Maven 2.2.1

Estou com problemas para gerar meu relatório usando o IReport 4.3.1:

estou recebendo o seguinte erro: javax.servlet.ServletException: java.lang.OutOfMemoryError: PermGen space

Não pode ser o tamanho do meu relatório estar estrapolando a memória porque só tenho 2 campos…

Minha chamada para o relatório é a seguinte:

		try {

			List<UsuarioBean> listaUsuario = new ArrayList<UsuarioBean>();

			UsuarioBean usuario = new UsuarioBean();

			usuario.setEmail("teste@gmail.com");
			usuario.setLogin("login teste");
			
			listaUsuario.add(usuario);

			Map<String, Object> parametros = new HashMap<String, Object>();
			parametros.put("email", "Email");
			parametros.put("nome", "Nome");
			parametros.put("permissao", "Permissao");
			
			
			JRDataSource jrds = new JRBeanCollectionDataSource(listaUsuario);

			String arquivoPDF = "Teste" + ".pdf";

			FacesContext facesContext = FacesContext.getCurrentInstance();
			ServletContext servletContext = (ServletContext) facesContext.getExternalContext().getContext();

			String arquivoJasper = "report2.jasper";
			// recupera path completo da aplicacao
			String pathRel = servletContext.getRealPath(arquivoJasper);
			System.out.println(pathRel);
			
			HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
			ServletOutputStream servletOutputStream = response.getOutputStream();

			byte[] bytes = JasperRunManager.runReportToPdf(pathRel, parametros,jrds);
			 
			if (bytes != null && bytes.length > 0) {
				// Abre no leitor pdf padrão da maquina cliente
				response.setHeader("Content-Disposition","attachment; filename=" + arquivoPDF);
				response.setContentType("application/pdf");
				response.setContentLength(bytes.length);
				servletOutputStream.write(bytes, 0, bytes.length);
				servletOutputStream.flush();
				servletOutputStream.close();

			}

			facesContext.renderResponse();
			facesContext.responseComplete();

		} catch (Exception e) {
			e.printStackTrace();

		}

Eu acredito que o código e o arquivo .jrxml estão corretos, porque eu consegui abrir o mesmíssimo relatório com o IReport 3.7, mas eu gostaria de usar a versão 4.3.1…

Talvez seja algum jar que esteja faltando … eu estou usando estes:

commons-beanutil-1.8.2.jar

commons-digester-1.7.0.jar

iText-2.1.7.jar

jasperreports-4.1.3.jar

Por favor, alguém tem alguma idéia do que possa ser ???

[/quote]