Open JPA - demora no load de Entidades

4 respostas
Fernanda_Rodrigues

Olá!
Estou começando a trabalhar com Openjpa em um projeto que possui uma base de dados antiga (e compartilhada com outros módulos do projeto, portanto não pode ser normalizada). :frowning:

Hoje, com a quantidade de aproximadamente 200 entidades, o sistema leva cerca de 5 minutos para carregá-las.

Pesquisando, eu vi que o relacionamento @ManyToOne, que por default é Eager, atrasa o load das entidades. Passei para Lazy (sei que não é o ideal, mas foi uma tentativa… ), o que reduziu o tempo de load, mas ainda está alto.

Agora, lendo outros artigos, verifiquei que a implementação de Enhancing pode melhorar minha situação. Que a nova geração do .class permitiria uma leitura mais rápida dessas entidades.

Minhas dúvidas seriam:

  • O relacionamento @ManyToOne realmente atrasa o load de entidades?
  • A implementação de Enhancing realmente está relacionada a performance? E ela é possível na versão 1.1.0 do OpenJPA?

Bom foram apenas pesquisas, a chance de eu estar escrevendo alguma besteira é grande heheh… se puderem me ajudar agradeço!!

Obrigada,
Fernanda.

4 Respostas

CintiaDR

Fernanda,

Tudo depende.

200 entidades seriam 200 registros ou 200 ‘tabelas’/objetos?
Eager é legal SE você sempre precisar dos dados, mas sempre é bom mudar o @Fetch para algo como join.

Para analisar a performance, veja a quantidade de selects gerados, e execute no banco diretamente para ver quanto tempo leva. Aí vc pode ir pro lado de mudar o select (ou não).

Faça isto, mas a gente só consegue te dar mais dicas se vc postar uns trechos dos objetos e a construção da Query e Criteria.

Fernanda_Rodrigues

Olá CintiaDR,

Quando falo de entidades, falo de tabelas…

Instalei o ferramenta OpenJPA for Bytecode Enhancement no meu projeto. Como havia mencionado, ele gera novamente os .class levando em conta classes que possuam a annotation @Entity por exemplo, de forma que sejam carregadas mais rapidamente.

Se for de interesse, o site é:
http://openjpa.apache.org/entity-enhancement.html

Para realizar o update da ferramenta:
http://people.apache.org/~dwoods/openjpa/devtools/updatesite/

Resultado: de 5 minutos de load, passou para 3 segundos…

É evidente que com o tempo terei que analisar melhor como são gerados os selects, e a qualidade das queries… acredito que o tempo ainda possa ser reduzido com isso…

Agradeço a ajuda,
Fernanda.

CintiaDR

Eu tinha entendido que a PESQUISA demorava, e não para ligar o sistema! Desculpe a desatenção.

Bom, eu nunca me preocupei com o tempo de load, mas também nunca demorou tanto. O que acontecia (e acontece) no hibernate (outro vendor, né) é que se pode ligar a ‘validação’ das tabelas na inicialização, e isto costuma demorar bastante para ‘subir’. Desconheço se OpenJPA tem isto, ou se está ligado por padrão, etc.

Fernanda_Rodrigues

Vou verificar so o OpenJpa tem essa propriedade de validação.

Muito obrigada pela ajuda!

Criado 25 de agosto de 2011
Ultima resposta 26 de ago. de 2011
Respostas 4
Participantes 2