Relatório de 50000 registros com Hibernate/Jasper [Resolvido]  XML
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Autor Mensagem
dancas
Entusiasta Java

Membro desde: 09/10/2007 11:00:00
Mensagens: 23
Localização: São José dos Campos - SP
Offline

Boa tarde a todos!!

Preciso gerar um relatório com aproximadamente 50000 registros. Estou usando banco Oracle 9g, PL/SQL na query e a tabela consultada não tem relacionamentos.

O cache de segundo nível do hibernate está configurado da seguinte forma:



Mesmo com cache o hibernate não consegue trazer os dados.

Alguma sugestão?

This message was edited 2 times. Last update was at 21/01/2008 10:40:04


Danilo Alves
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

JDBC??? hehehehehe

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
Sergio Lopes
Moderador
[Avatar]

Membro desde: 17/11/2003 00:22:10
Mensagens: 1368
Localização: São Paulo - SP
Offline

ola!

o que quer dizer com 'nao consegue trazer os dados'?

se vc nao precisa ter todos os dados em memoria ao mesmo tempo, pode ir simplesmente pegando de pouco em pouco.

da uma procurada sobre StatelessSession e ScrollableResults. podem te ajudar...

sergio

Sérgio Lopes - twitter: @sergio_caelum - blog pessoal: sergiolopes.org
Curso Java | Apostilas Java | Arquitetura Java | Curso Rails
dancas
Entusiasta Java

Membro desde: 09/10/2007 11:00:00
Mensagens: 23
Localização: São José dos Campos - SP
Offline

Ele literalmente não consegue, dá uma olhada no código:



Vou dar uma pesquisada sobre StatelessSession e ScrollableResults.

Danilo Alves
Giulliano
GUJ Master
[Avatar]

Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline

Tenta jogar a consult numa thread separada...provavelmente ambos (JDBC e Hibernate) vão demorar muito. Não vejo necessidade de trazer 50000 registros de uma só vez...se for para alguém ler ninguém tem essa capacidade e ainda q seja para outros objetivos vc poderia dar um select count(*) from tabela...dividir o total de registro e trazer em pedaços.

Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi




<UnTouChAbLe>
[Email] [WWW] [MSN]
dancas
Entusiasta Java

Membro desde: 09/10/2007 11:00:00
Mensagens: 23
Localização: São José dos Campos - SP
Offline

Com scrollable results eu consegui obter os registros e passá-los para uma collection mas agora eu tenho que mandar esta collection para um relatório que é um jasper (JRBeanDataSource). Se eu mandar a collection inteira de uma vez ocorre o famoso: java.lang.OutOfMemoryError: Java heap space.

Vou procurar alternativas... se alguém tiver alguma sugestão, por favor habilite-se.

Muito obrigado Sérgio, obrigado a todos.

This message was edited 1 time. Last update was at 17/01/2008 14:20:15


Danilo Alves
qmx
JavaGuru
[Avatar]
Membro desde: 14/02/2007 10:49:14
Mensagens: 212
Localização: Sampa
Offline

vc fez o finetune da jvm ??

exemplo

1Gb de heap

java -Xmx1024GB....


[WWW]
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

Relatório com 50 mil registros com Hibernate e Jasper?
Será que essa não é uma solução inviável?

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

http://www.javalobby.org/articles/hibernatequery103/
[WWW]
nbluis
GUJ Master
[Avatar]

Membro desde: 27/05/2006 01:31:51
Mensagens: 1531
Localização: Porto Alegre - RS
Offline

danieldestro wrote:Relatório com 50 mil registros com Hibernate e Jasper?
Será que essa não é uma solução inviável?

Ou melhor....
Quem é que vai ler/averiguar/analisar um relatório de 50 mil registros ?
Não seria chuncho tecnológico sem fins de usabilidade ?

Luis Eduardo Bohrer

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
[WWW]
dancas
Entusiasta Java

Membro desde: 09/10/2007 11:00:00
Mensagens: 23
Localização: São José dos Campos - SP
Offline

nbluis wrote:
danieldestro wrote:Relatório com 50 mil registros com Hibernate e Jasper?
Será que essa não é uma solução inviável?

Ou melhor....
Quem é que vai ler/averiguar/analisar um relatório de 50 mil registros ?
Não seria chuncho tecnológico sem fins de usabilidade ?


Na hora que o responsável pelo projeto me pediu esse relatório eu também estranhei... mas ordens são ordens, ele disse que quer.

Vou experimentar o finetune como o qmx sugeriu e vou dar uma lida nesse artigo:

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

This message was edited 2 times. Last update was at 17/01/2008 13:53:26


Danilo Alves
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

O tal artigo que lhe passei do JavaLobby indica que você pode usar o Hibernate para recuperar os registros de forma paginada, de forma que você não precise ficar com os 50000 registros de uma vez na memória. Ele deu um exemplo com o JasperReports, mas a maneira de fazer sugere o que deve ser feito para sua solução de relatórios.
[WWW]
dancas
Entusiasta Java

Membro desde: 09/10/2007 11:00:00
Mensagens: 23
Localização: São José dos Campos - SP
Offline

thingol wrote:O tal artigo que lhe passei do JavaLobby indica que você pode usar o Hibernate para recuperar os registros de forma paginada, de forma que você não precise ficar com os 50000 registros de uma vez na memória. Ele deu um exemplo com o JasperReports, mas a maneira de fazer sugere o que deve ser feito para sua solução de relatórios.


Vou ler este artigo, muito obrigado Thingol
dancas
Entusiasta Java

Membro desde: 09/10/2007 11:00:00
Mensagens: 23
Localização: São José dos Campos - SP
Offline

Implementei as soluções oferecidas pelo Hibernate (StatelessSession e Scrollable Results) utilizando a arquitetura sugerida no artigo. O autor propõe um acoplamento do Hibernate com o Jasper.. bem interessante.

A carga dos dados e o processamento do relatório realmente ficaram mais performáticos. Mas mesmo aumentando o heap da VM, ela não aguenta um relatório desse tamanho...

Estou estudando o "virtualizador de relatórios" do Jasper, se alguém souber de mais uma alternativa por favor manifeste-se.


Danilo Alves
dancas
Entusiasta Java

Membro desde: 09/10/2007 11:00:00
Mensagens: 23
Localização: São José dos Campos - SP
Offline

Com o JRFileVirtualizer foi possível gerar o relatório mas vou fazer mais testes para ver se é estável.

Danilo Alves
 
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Ir para:   
Powered by JForum 2.1.8 © JForum Team