Como esse é um tema bastante procurado, escrevi um novo post com maiores detalhes sobre virtualização: http://bit.ly/aJYhV9

Quando tentamos gerar relatórios muito grandes com o JasperReport / iReport, é muito comum que aconteça erro de estouro de memória: OutOfMemoryException: Java heap space

Para contornar esse problema, podemos “virtualizar” a geração do relatório utilizando um parâmetro pré-definido do jasperReports: REPORT_VIRTUALIZER

Com isso, ao invés do Jasper tentar preencher o relatório totalmente utilizando a memória, para somente depois liberá-la, ele “gerencia” a memória, gerando uma parte do relatório, e passando essa parte para um arquivo de cache, depois volta a gerar outra parte, e assim por diante, até o término da geração.

//Cria uma conexão com o banco
conexao = Conexao.getConexao()
 
//Cria um cache no  C:\tmp
JRFileVirtualizer fileVirtualizer = new JRFileVirtualizer(3, "c:\\tmp");
 
//Seta o parametro REPORT_VIRTUALIZER com o diretório onde será armazenado o cache
HashMap parametros = new HashMap();
parametros.put(JRParameter.REPORT_VIRTUALIZER, fileVirtualizer);
 
//Preenche o relatório
JasperFillManager.fillReportToFile("MeuRelatorio.jasper", parametros,conexao)

Com isso, by by OutOfMemoryException…

Compartilhe:
  • Twitter
  • LinkedIn
  • Facebook
  • Live
  • MySpace
  • Technorati
  • del.icio.us
  • StumbleUpon
  • Digg
  • Sphinn
  • Mixx
  • Rec6
  • Reddit
  • Suggest to Techmeme via Twitter
  • Ping.fm
  • Socialogs
  • SphereIt
  • co.mments
  • DotNetKicks
  • Blogosphere News
  • LinkArena
  • Upnews
  • Google Bookmarks
  • Yahoo! Bookmarks
  • PDF
  • Print
  • email

Posts relacionados:

  1. Usando virtualização para gerar grandes relatórios no JasperReports
  2. iReport 3.5.3
  3. Usando o componente Table do iReport
  4. iReport – Componente Table: Como mesclar células