Relatório de 50000 registros com Hibernate/Jasper [Resolvido]

[quote=urubatan]OK, mas ninguem vai ler este relatório todo, ou pelo menos eu acho muito pouco provável …
e se ninguem for ler, ele é inútil …
Exceto no caso de ser um demonstrativo para enviar para alguma coisa …
Acho que antes de implementar valeria primeiro perguntar se alguem vai ler esta porquera :D[/quote]

Com certeza ninguem vai ler. Isso todo mundo ja percebeu.
No minimo e pra efeito de arquivamento mesmo, mas nao vai ser o rapaz que esta com o problema do topico, nem eu nem vc que vai convencê-lo do contrário.

Determinadas situações nao demandam “a solução certa”, mas simplesmente o que “o cliente quer”. E se o cliente paga bem, entao nao tem discussão. Vc pode:

  • Ficar ai esperneando de que a solução é porca, que o cliente esta errado e perder o lugar pra outra pessoa que queira fazer a “porqueira”.
  • Fazer a porqueira, e embolsar grana

Eu fico com a opção 2.

[quote=fabiocsi][quote=urubatan]OK, mas ninguem vai ler este relatório todo, ou pelo menos eu acho muito pouco provável …
e se ninguem for ler, ele é inútil …
Exceto no caso de ser um demonstrativo para enviar para alguma coisa …
Acho que antes de implementar valeria primeiro perguntar se alguem vai ler esta porquera :D[/quote]

Com certeza ninguem vai ler. Isso todo mundo ja percebeu.
No minimo e pra efeito de arquivamento mesmo, mas nao vai ser o rapaz que esta com o problema do topico, nem eu nem vc que vai convencê-lo do contrário.

Determinadas situações nao demandam “a solução certa”, mas simplesmente o que “o cliente quer”. E se o cliente paga bem, entao nao tem discussão. Vc pode:

  • Ficar ai esperneando de que a solução é porca, que o cliente esta errado e perder o lugar pra outra pessoa que queira fazer a “porqueira”.
  • Fazer a porqueira, e embolsar grana

Eu fico com a opção 2.[/quote]

Exatamente.

ja que o cara não vai nem tentar dizer pro cliente que ele ta botando dinheiro fora,
então sugiro para este relatório tirar o hibernate da jogada e fazer via JDBC mesmo, desta forma mantendo apenas um registro na memória por vez.
e não jogar tudo em uma collection antes de passar para o jasper e sim usar o jrresultsetdatasource …

Mas ainda acho que se ele simplesmente fizer isto ele não vai estar fazendo nada mais do que a obrigação dele, agora se ele levantar e questionar o gerente/cliente/qualquer um, questionar se o relatório vai realmente ser lido, se realmente vale a pena a implementação.
ai ele vai em pouco tempo, merecer ganhar mais do que ganha hoje.

[quote=urubatan]ja que o cara não vai nem tentar dizer pro cliente que ele ta botando dinheiro fora,
então sugiro para este relatório tirar o hibernate da jogada e fazer via JDBC mesmo, desta forma mantendo apenas um registro na memória por vez.
e não jogar tudo em uma collection antes de passar para o jasper e sim usar o jrresultsetdatasource …

Mas ainda acho que se ele simplesmente fizer isto ele não vai estar fazendo nada mais do que a obrigação dele, agora se ele levantar e questionar o gerente/cliente/qualquer um, questionar se o relatório vai realmente ser lido, se realmente vale a pena a implementação.
ai ele vai em pouco tempo, merecer ganhar mais do que ganha hoje.[/quote]

Se existe uma maneira melhor, é mais que obrigação contra-argumentar a solução.
Mas acredite em mim: existem clientes que, sem nem ao menos saber o que é Java, ou Ruby, ou Banco de Dados, entendem mais de OO do que Martin Fowler.

E ai de vc se disser que não.

[quote=urubatan]ja que o cara não vai nem tentar dizer pro cliente que ele ta botando dinheiro fora,
então sugiro para este relatório tirar o hibernate da jogada e fazer via JDBC mesmo, desta forma mantendo apenas um registro na memória por vez.
e não jogar tudo em uma collection antes de passar para o jasper e sim usar o jrresultsetdatasource …

Mas ainda acho que se ele simplesmente fizer isto ele não vai estar fazendo nada mais do que a obrigação dele, agora se ele levantar e questionar o gerente/cliente/qualquer um, questionar se o relatório vai realmente ser lido, se realmente vale a pena a implementação.
ai ele vai em pouco tempo, merecer ganhar mais do que ganha hoje.[/quote]

A forma que eu implementei não carrega todos os registros na memória pois adotei esta arquitetura:

http://www.javalobby.org/articles/hibernatequery103/

Resumindo, você acopla o hibernate com o jasper implementando seu próprio JRBeanDataSource. E com ajuda do scrollable results do Hibernate os registros são carregados um a um conforme o Jasper preenche o relatório, evitando absolutamente qualquer estouro de memória (graças ao JRVirtualizer também).