Este documento fornece dicas de performance em JPA e EJB. As principais dicas incluem usar consultas parametrizadas em JPA para permitir cache de consultas, evitar o problema N+1 com join fetch, usar paginação com lazy loading para relacionamentos 1:N, e marcar atributos como transient para reduzir a serialização em EJB.
O documento discute vários tópicos relacionados ao Hibernate e JPA, incluindo: 1) Uma breve introdução ao Hibernate como framework para mapeamento objeto-relacional; 2) A diferença entre JPA e Hibernate, onde JPA é uma especificação e Hibernate uma implementação; 3) Algumas exceções comuns como LazyInitializationException e como resolvê-las.
O documento discute estratégias para melhorar o desempenho de aplicações que utilizam mapeamento objeto-relacional, como usar fetch lazy em associações, fetch subselect e batch size. Também aborda a criação de Value Objects para transferência de dados entre camadas.
Este documento apresenta um resumo sobre o uso da tecnologia Java Persistence API (JPA) para mapeamento objeto-relacional e persistência de dados em bancos de dados relacionais. Ele descreve como configurar o projeto no NetBeans para utilizar JPA, gerar classes de entidade e controladores a partir de tabelas do banco de dados e testar operações básicas de consulta, inserção e alteração de dados.
Este documento apresenta uma introdução à Java Persistence API (JPA) e ao framework Hibernate. Ele discute como JPA e Hibernate permitem mapear objetos Java para bancos de dados relacionais de forma transparente, simplificando a persistência de dados. O documento também aborda tópicos como mapeamento de entidades, relacionamentos e estratégias de herança.
O documento apresenta o JBoss Developer Framework (JDF), que mostra como escrever aplicações Java EE 6 de forma consistente e integrada. O JDF inclui 54 quickstarts focados em casos de uso e APIs comuns e visa resolver problemas de inconsistência e fragmentação entre frameworks Java EE.
Dicas e Truques sobre Performance em Java EE, JPA e JSFDr. Spock
Este documento apresenta dicas para o desenvolvimento de aplicações web com JSF, Ajax e JPA, discutindo estratégias para recuperação de dados, como lazy vs eager loading e cache, e estratégias de design da interface web, como escopo de conversação e uso de componentes lazy.
Dicas e truques sobre performance em JavaEE, JPA e JSFDr. Spock
O documento apresenta dicas e truques para melhorar o desempenho de aplicações Java EE com JSF, JPA e AJAX, abordando estratégias de recuperação de dados, design de interface web e uso de cache.
Este documento discute a evolução da plataforma Elastic Stack, substituindo navegação multi-etapa por busca. Apresenta as principais atualizações e quebras de compatibilidade na versão 2.3, como limites de campos aninhados e dependências de script.
O documento discute vários tópicos relacionados ao Hibernate e JPA, incluindo: 1) Uma breve introdução ao Hibernate como framework para mapeamento objeto-relacional; 2) A diferença entre JPA e Hibernate, onde JPA é uma especificação e Hibernate uma implementação; 3) Algumas exceções comuns como LazyInitializationException e como resolvê-las.
O documento discute estratégias para melhorar o desempenho de aplicações que utilizam mapeamento objeto-relacional, como usar fetch lazy em associações, fetch subselect e batch size. Também aborda a criação de Value Objects para transferência de dados entre camadas.
Este documento apresenta um resumo sobre o uso da tecnologia Java Persistence API (JPA) para mapeamento objeto-relacional e persistência de dados em bancos de dados relacionais. Ele descreve como configurar o projeto no NetBeans para utilizar JPA, gerar classes de entidade e controladores a partir de tabelas do banco de dados e testar operações básicas de consulta, inserção e alteração de dados.
Este documento apresenta uma introdução à Java Persistence API (JPA) e ao framework Hibernate. Ele discute como JPA e Hibernate permitem mapear objetos Java para bancos de dados relacionais de forma transparente, simplificando a persistência de dados. O documento também aborda tópicos como mapeamento de entidades, relacionamentos e estratégias de herança.
O documento apresenta o JBoss Developer Framework (JDF), que mostra como escrever aplicações Java EE 6 de forma consistente e integrada. O JDF inclui 54 quickstarts focados em casos de uso e APIs comuns e visa resolver problemas de inconsistência e fragmentação entre frameworks Java EE.
Dicas e Truques sobre Performance em Java EE, JPA e JSFDr. Spock
Este documento apresenta dicas para o desenvolvimento de aplicações web com JSF, Ajax e JPA, discutindo estratégias para recuperação de dados, como lazy vs eager loading e cache, e estratégias de design da interface web, como escopo de conversação e uso de componentes lazy.
Dicas e truques sobre performance em JavaEE, JPA e JSFDr. Spock
O documento apresenta dicas e truques para melhorar o desempenho de aplicações Java EE com JSF, JPA e AJAX, abordando estratégias de recuperação de dados, design de interface web e uso de cache.
Este documento discute a evolução da plataforma Elastic Stack, substituindo navegação multi-etapa por busca. Apresenta as principais atualizações e quebras de compatibilidade na versão 2.3, como limites de campos aninhados e dependências de script.
Este documento discute a implementação de acesso a múltiplos bancos de dados no Django 1.1. O autor apresenta uma solução que estende as classes existentes no Django para permitir que modelos acessem mais de um banco de dados, permitindo consultas em bancos legados. Ele demonstra como configurar e usar a extensão e discute limitações e melhorias futuras.
Nestes slides apresento algumas técnicas utilizadas para deixar aplicações Laravel mais rápidas. Muitas destas técnicas precisam ser utilizadas com cuidado.
Existem alguns trechos de código inspirados na palestra de cache do Zizaco
Desenvolvendo aplicações Web escaláveiselliando dias
Este documento resume uma apresentação sobre desenvolvimento de aplicações web escaláveis. Aborda tópicos como terminologia, camadas, servidores web, bancos de dados, PHP, cache, métricas, ferramentas, arquitetura e lições aprendidas para lidar com crescimento rápido.
Este documento discute estratégias para melhorar o desempenho de bancos de dados. Ele resume que a maioria dos problemas de desempenho estão relacionados ao mau uso de consultas SQL e à má modelagem de dados, e discute técnicas como mapeamento objeto-relacional, lazy loading, eager loading e caching para melhorar o desempenho.
Curso de Java Persistence API (JPA) (Java EE 7)Helder da Rocha
Este documento fornece um tutorial sobre a tecnologia Java Persistence API (JPA) de acordo com a especificação Java EE 7. Resume os principais conceitos de JPA como mapeamento objeto-relacional, configuração da camada de persistência e exemplos de mapeamento de entidades usando anotações ou arquivos XML. Também fornece informações sobre exercícios práticos que serão realizados usando diferentes provedores de persistência e bancos de dados.
Joomla Day Brasil 2010: Customizações para grandes portaisrafaelberlanda
Este documento fornece várias customizações e otimizações que podem ser feitas em grandes portais Joomla para melhorar o desempenho, segurança e requisitos diários, incluindo:
1) Melhorias de desempenho como cache, escolha de motores de banco de dados e balanceamento de carga.
2) Aprimoramentos de segurança como ocultação de detalhes do Joomla, captchas e renomeação de pastas.
3) Dicas para atualizações, testes e adaptação às necessidades dos usuários.
O documento discute mapeamento objeto-relacional (MOR) usando Java Persistence API (JPA). Ele explica o problema da diferença entre programação orientada a objetos e bancos de dados relacionais e como JPA resolve isso mapeando classes para tabelas de banco de dados. Também descreve características e implementações de JPA como Hibernate e anotações comuns como @Entity e @Table.
Esta palestra foi apresentada na trilha de Machine Learning do evento TDC 2016 (The Developers Conference) realizado em São Paulo, Brazil. O conteúdo aborda a história da ferramenta Weka e o seu posicionamento atual no mercado de soluções para machine learning.
O documento discute a ferramenta Weka para machine learning, comparando-a com R e Python. Apresenta o Weka como uma coleção de algoritmos de aprendizado de máquina usada principalmente para fins educacionais. Também relata um caso de uso do Weka para prever barreiras de programação com 96% de precisão.
1. O documento discute conceitos e tecnologias para desenvolvimento front-end como estado, APIs, frameworks e conclusões.
2. É apresentada uma comparação entre estilos imperativo e funcional e entre APIs do tipo RPC, REST e GRAPH.
3. Frameworks como Angular, React e Polymer são discutidos e a conclusão é que é importante separar a lógica da aplicação dos frameworks.
Este documento fornece uma introdução ao ORM Doctrine, incluindo suas principais funcionalidades como mapeamento de entidades, relacionamentos, herança, consultas DQL e melhores práticas de uso. O palestrante também discute conceitos importantes como performance e como o Doctrine se compara a outras abordagens.
Palestra feito na PHPConf - 2016
Apresento uma estrutra de escabilidade, passando pelos passos de crescimento de um software web.
Conceitos como cache, concorrências, storage para arquivos estáticos, servidores de busca, sessões em memória e afins.
Este documento apresenta um curso sobre testes automatizados, abordando testes unitários, de integração e funcionais. A unidade III discute testes de integração com ênfase em TestNG, Mockito, testes com banco de dados usando DBUnit e Seam.
O documento apresenta uma introdução ao JBoss Infinispan, uma plataforma open source para distribuição de dados com Java. O Infinispan permite armazenar objetos em memória para melhorar o desempenho de aplicações, além de sincronizar dados com bancos de dados de forma assíncrona. O documento descreve características como clusterização, evicção de dados, cache loaders e diferentes modos de cache como local, replicação e distribuição.
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...Isaac de Souza
A importância de testes de software já deveriam ser um consenso entre times de desenvolvimento. Contudo ainda há profissionais que não compreendem o valor deles, um dos motivos é que de fato muitos softwares possuem testes mas continuam a apresentar bugs a cada entrega. Isso ocorre porque é comum os testes garantirem o funcionamento do código, mas não das funcionalidades como um todo. Na apresentação será abordado como equilibrar testes unitários, de componentes e de integração organizando-os através de uma visão mais direcionada ao negócio, features e histórias do que apenas ao código implementado.
Design Patterns para Tuning Pentaho com Ctoolse-Setorial
Uma "receita de bolo" com os passos comumente seguidos para tunar um dashboard, incluindo boas práticas, ferramentas e configurações. Os fontes do exemplo podem ser baixados livremente de http://www.e-setorial.com.br/pentahoday2017/DesignPatternsPentaho 09-12-57-284.zip
O Este documento apresenta os conceitos básicos de persistência de dados e o framework Hibernate, que implementa a especificação JPA (Java Persistence API). O documento discute os objetivos da persistência, conceitos como mapeamento objeto-relacional e tipos de persistência. Também resume os principais recursos do JPA e Hibernate como configuração, mapeamento de classes e relacionamentos.
O Java Persistence API(JPA) é um framework utilizado para realizar a persistência dos objetos Java, com ele foi possível obter uma padronização na forma de persistir os dados. A implementação mais conhecida atualmente é o Hibernate, onde é possível diminuir a complexidade de uma aplicação Java – baseada no modelo Orientado a Objetos – para banco de dados que utilizam uma abordagem relacional.
O documento discute conceitos de cache, concorrência e sincronização na web, incluindo tópicos como programação assíncrona, semaphoros, deadlock, starvation, disponibilidade, escalabilidade, consistência, ACID vs BASE e arquitetura REST. É apresentado um caso de estudo sobre editores, servidores, recursos, cache e dados.
O documento discute melhorias de performance no MySQL 5.6, incluindo: (1) melhorias no otimizador para lidar com subqueries e ordenação de arquivos; (2) novas funcionalidades como thread pool plug-in e performance schema; (3) dicas de tuning do servidor MySQL, como configuração de hardware e variáveis.
O documento apresenta as principais tecnologias open source da Netflix para desenvolvimento de aplicações na nuvem, como Eureka para descoberta de serviços, Archaius para gerenciamento de configurações e Ribbon/Hystrix para balanceamento de carga e tolerância a falhas.
TDC 2014 - Java 8: Expressões Lambda e API de StreamDanival Calegari
O documento apresenta as principais funcionalidades do Java 8 relacionadas a expressões lambda e Stream API. São descritas interfaces funcionais, expressões lambda, que permitem declarar comportamentos de forma concisa, e a Stream API, que possibilita realizar operações sobre fluxos de objetos de forma encadeada e paralela.
Mais conteúdo relacionado
Semelhante a Polis Hyperlink Dicas e truques de Performance para JPA e EJB
Este documento discute a implementação de acesso a múltiplos bancos de dados no Django 1.1. O autor apresenta uma solução que estende as classes existentes no Django para permitir que modelos acessem mais de um banco de dados, permitindo consultas em bancos legados. Ele demonstra como configurar e usar a extensão e discute limitações e melhorias futuras.
Nestes slides apresento algumas técnicas utilizadas para deixar aplicações Laravel mais rápidas. Muitas destas técnicas precisam ser utilizadas com cuidado.
Existem alguns trechos de código inspirados na palestra de cache do Zizaco
Desenvolvendo aplicações Web escaláveiselliando dias
Este documento resume uma apresentação sobre desenvolvimento de aplicações web escaláveis. Aborda tópicos como terminologia, camadas, servidores web, bancos de dados, PHP, cache, métricas, ferramentas, arquitetura e lições aprendidas para lidar com crescimento rápido.
Este documento discute estratégias para melhorar o desempenho de bancos de dados. Ele resume que a maioria dos problemas de desempenho estão relacionados ao mau uso de consultas SQL e à má modelagem de dados, e discute técnicas como mapeamento objeto-relacional, lazy loading, eager loading e caching para melhorar o desempenho.
Curso de Java Persistence API (JPA) (Java EE 7)Helder da Rocha
Este documento fornece um tutorial sobre a tecnologia Java Persistence API (JPA) de acordo com a especificação Java EE 7. Resume os principais conceitos de JPA como mapeamento objeto-relacional, configuração da camada de persistência e exemplos de mapeamento de entidades usando anotações ou arquivos XML. Também fornece informações sobre exercícios práticos que serão realizados usando diferentes provedores de persistência e bancos de dados.
Joomla Day Brasil 2010: Customizações para grandes portaisrafaelberlanda
Este documento fornece várias customizações e otimizações que podem ser feitas em grandes portais Joomla para melhorar o desempenho, segurança e requisitos diários, incluindo:
1) Melhorias de desempenho como cache, escolha de motores de banco de dados e balanceamento de carga.
2) Aprimoramentos de segurança como ocultação de detalhes do Joomla, captchas e renomeação de pastas.
3) Dicas para atualizações, testes e adaptação às necessidades dos usuários.
O documento discute mapeamento objeto-relacional (MOR) usando Java Persistence API (JPA). Ele explica o problema da diferença entre programação orientada a objetos e bancos de dados relacionais e como JPA resolve isso mapeando classes para tabelas de banco de dados. Também descreve características e implementações de JPA como Hibernate e anotações comuns como @Entity e @Table.
Esta palestra foi apresentada na trilha de Machine Learning do evento TDC 2016 (The Developers Conference) realizado em São Paulo, Brazil. O conteúdo aborda a história da ferramenta Weka e o seu posicionamento atual no mercado de soluções para machine learning.
O documento discute a ferramenta Weka para machine learning, comparando-a com R e Python. Apresenta o Weka como uma coleção de algoritmos de aprendizado de máquina usada principalmente para fins educacionais. Também relata um caso de uso do Weka para prever barreiras de programação com 96% de precisão.
1. O documento discute conceitos e tecnologias para desenvolvimento front-end como estado, APIs, frameworks e conclusões.
2. É apresentada uma comparação entre estilos imperativo e funcional e entre APIs do tipo RPC, REST e GRAPH.
3. Frameworks como Angular, React e Polymer são discutidos e a conclusão é que é importante separar a lógica da aplicação dos frameworks.
Este documento fornece uma introdução ao ORM Doctrine, incluindo suas principais funcionalidades como mapeamento de entidades, relacionamentos, herança, consultas DQL e melhores práticas de uso. O palestrante também discute conceitos importantes como performance e como o Doctrine se compara a outras abordagens.
Palestra feito na PHPConf - 2016
Apresento uma estrutra de escabilidade, passando pelos passos de crescimento de um software web.
Conceitos como cache, concorrências, storage para arquivos estáticos, servidores de busca, sessões em memória e afins.
Este documento apresenta um curso sobre testes automatizados, abordando testes unitários, de integração e funcionais. A unidade III discute testes de integração com ênfase em TestNG, Mockito, testes com banco de dados usando DBUnit e Seam.
O documento apresenta uma introdução ao JBoss Infinispan, uma plataforma open source para distribuição de dados com Java. O Infinispan permite armazenar objetos em memória para melhorar o desempenho de aplicações, além de sincronizar dados com bancos de dados de forma assíncrona. O documento descreve características como clusterização, evicção de dados, cache loaders e diferentes modos de cache como local, replicação e distribuição.
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...Isaac de Souza
A importância de testes de software já deveriam ser um consenso entre times de desenvolvimento. Contudo ainda há profissionais que não compreendem o valor deles, um dos motivos é que de fato muitos softwares possuem testes mas continuam a apresentar bugs a cada entrega. Isso ocorre porque é comum os testes garantirem o funcionamento do código, mas não das funcionalidades como um todo. Na apresentação será abordado como equilibrar testes unitários, de componentes e de integração organizando-os através de uma visão mais direcionada ao negócio, features e histórias do que apenas ao código implementado.
Design Patterns para Tuning Pentaho com Ctoolse-Setorial
Uma "receita de bolo" com os passos comumente seguidos para tunar um dashboard, incluindo boas práticas, ferramentas e configurações. Os fontes do exemplo podem ser baixados livremente de http://www.e-setorial.com.br/pentahoday2017/DesignPatternsPentaho 09-12-57-284.zip
O Este documento apresenta os conceitos básicos de persistência de dados e o framework Hibernate, que implementa a especificação JPA (Java Persistence API). O documento discute os objetivos da persistência, conceitos como mapeamento objeto-relacional e tipos de persistência. Também resume os principais recursos do JPA e Hibernate como configuração, mapeamento de classes e relacionamentos.
O Java Persistence API(JPA) é um framework utilizado para realizar a persistência dos objetos Java, com ele foi possível obter uma padronização na forma de persistir os dados. A implementação mais conhecida atualmente é o Hibernate, onde é possível diminuir a complexidade de uma aplicação Java – baseada no modelo Orientado a Objetos – para banco de dados que utilizam uma abordagem relacional.
O documento discute conceitos de cache, concorrência e sincronização na web, incluindo tópicos como programação assíncrona, semaphoros, deadlock, starvation, disponibilidade, escalabilidade, consistência, ACID vs BASE e arquitetura REST. É apresentado um caso de estudo sobre editores, servidores, recursos, cache e dados.
O documento discute melhorias de performance no MySQL 5.6, incluindo: (1) melhorias no otimizador para lidar com subqueries e ordenação de arquivos; (2) novas funcionalidades como thread pool plug-in e performance schema; (3) dicas de tuning do servidor MySQL, como configuração de hardware e variáveis.
Semelhante a Polis Hyperlink Dicas e truques de Performance para JPA e EJB (20)
O documento apresenta as principais tecnologias open source da Netflix para desenvolvimento de aplicações na nuvem, como Eureka para descoberta de serviços, Archaius para gerenciamento de configurações e Ribbon/Hystrix para balanceamento de carga e tolerância a falhas.
TDC 2014 - Java 8: Expressões Lambda e API de StreamDanival Calegari
O documento apresenta as principais funcionalidades do Java 8 relacionadas a expressões lambda e Stream API. São descritas interfaces funcionais, expressões lambda, que permitem declarar comportamentos de forma concisa, e a Stream API, que possibilita realizar operações sobre fluxos de objetos de forma encadeada e paralela.
Java 8 - Expressões Lambda e Stream API - DevCamp 2014Danival Calegari
O documento apresenta as principais novidades do Java 8 relacionadas a expressões lambda e Stream API. São abordados tópicos como interfaces funcionais, sintaxe de expressões lambda, operações sobre streams de objetos de forma encadeada e paralela, e exemplos de uso destas funcionalidades.
JSR 352 - Processamento Batch na Plataforma Java - JustJava 2013Danival Calegari
Apresentação feita no JustJava 2013 sobre a especificação resultante da JSR 352, que padroniza mecanismos para o desenvolvimento de processos batch dentro da plataforma Java. Esta especificação faz parte do Java EE 7 e foi acompanhada pelo palestrante dentro do programa de Adopt a JSR.
Evitando as armadilhas no projeto de aplicações Java EE para uso eficaz da nuvemDanival Calegari
Apresentação feita no JavaOne Latin America 2012 com o @drspockbr com alguma dicas de como projetar aplicações Java EE que funcionem bem em um provedor de nuvem.
JSR 352 Batch Applications for the Java PlatformDanival Calegari
Apresentação feita no Just Java 2012 sobre o andamento da JSR 352. Compartilhamento da experiência de acompanhar uma JSR na iniciativa de "Adopt a JSR" e como estão as discussões sobre a nova especificação de processamento em Batch em Java, com alguns dos principais pontos do primeiro draft da especificação recém lançada.
2. Dicas e truques de performance em
JPA e EJB
Danival Taffarel Calegari
MATERA Systems
3. Sobre os palestrantes
Danival Taffarel Calegari
Mestre em Ciê
ncia da Computaç ã pela UNICAMP.
o
Trabalha com tecnologia Java EE desde 2002. Atua a mais de 4 anos
com líder té cnico na MATERA Systems.
Atua hámais de 5 anos como instrutor da Globalcode.
Palestras em eventos nacionais e internacionais: JustJava, TCD,
JavaOne.
Participa do programa “Adopt a JSR” do SouJava (JSR 352).
Certificaç õ SCJP, SCWCD, SCBCD.
es:
5. Introduç ão
Performance é um requisito nã funcional chave para
o
conseguirmos os outros.
Serve como “moeda” para “comprar” linguagens mais expressivas,
melhores interfaces com usuá maior nú
rio, mero de funcionalidades,
frameworks gené ricos, etc.
Influenciado pela escolha dos algoritmos, complexidade do
problema, volume de dados manipulados.
Aspectos de programaç ã també m tem grande impacto no
o
desempenho da aplicaç ão.
O uso de mecanismos inadequados ao problema pode prejudicar muito
a performance.
Demo: ordenaç ã de registro em arquivo.
o
6. Introduç ão
“ We should forget about small efficiencies, say about 97% of
the time: premature optimization is the root of all evil”
Donald Knuth
7. Profiling
Dica: Realize mediç õ antes de fazer otimizaç õ
es es.
Procure determinar os pontos de gargalo da aplicaç ão.
Resolver um ponto crítico traz muito benefício com pouco esforç o.
Quando possível, utilize profilers.
VisualVM que vem no JDK desde a versã 6 u7.
o
NetBeans Profiler.
Siga as trê etapas abaixo:
s
Intuiç ão.
Mediç ão.
Correç ão.
8. JPA
Dica: Prefira usar consultas parametrizadas a
concatenar o valor dos parâ metros no JPQL para
permitir cache de consultas.
"select p from Payment p where p.customer.id="+custId
Como cada consulta tem um texto diferente, o cache de
consultas nã se torna eficiente.
o
"select p from Payment p where p.customer.id=:custId"
Esta soluç ã possui desempenho semelhante ao das
o
NamedQuery no EclipseLink.
9. Lazy vs Eager
Estraté gias para recuperar os objetos “do outro lado” de um
relacionamento
Lazy: só recupera um dado quando necessá
rio.
Eager: recupera o dado sempre.
11. Lazy vs Eager
Dica: O JPA permite que a mudanç a de lazy para
eager seja feita no JPQL.
select distinct c from Categoria c join fetch c.produtos
Faz um único SELECT no banco de dados;
O join fetch resolve o problema do N+1;
Deve-se usar distinct para evitar replicaç ã de resultados;
o
Causa problemas com paginaç ã em banco de dados.
o
13. Lazy vs Eager
Dica: Procure fazer paginaç ão em banco de dados
usando estraté gia lazy quando 1:N.
Use os mé todos setFirstResult e setMaxResults da Query.
O provedor JPA vai usar comandos nativos de banco de dados
para limitar a consulta;
O uso de join fetch para relacionamentos 1:N provoca
problemas de desempenho e de memó ria.
WARN: firstResult/maxResults specified with collection fetch; applying in
memory!
15. Lazy vs Eager
Dica: Procure usar eager quando sempre for processar
todos os dados de uma vez.
Uma situaç ã comum é geraç ã de relató rios.
o o
Cuidado com o uso de memó ria;
Faç a uma consulta pré via para recuperar somente os ids e faç a várias
consultas com in;
Chame o mé todo clear do EntityManager para remover os objetos já
utilizados da memó ria.
O Hibernate possui o recurso de “scroll” , onde ele manté m o
ResultSet aberto e consulta um objeto por vez.
16. Cache
First level cache
Enquanto o EntityManager estiver aberto, ele armazena os objetos
carregados por ele;
Este cache é apagado quando o mé todo clear é chamado.
Second level cache
Armazena os objetos por EntityManagerFactory;
Cache “por aplicaç ão”.
18. Cache
Truque: Faç a uma carga pré via das entidades
relacionadas no cache de primeiro nível antes da
consulta principal.
Consultas a objetos que possuem relacionamentos N:1 com entidades
com um nú mero pequeno de instâncias.
Exemplo: Buscar produtos.
Executar um “select c from Categoria c” antes da consulta por
produtos.
Recomendado em caso de entidades com complexidade de carga
grande (pode-se usar join fetch).
20. Cache
Dica: Use cache de segundo nível para diminuir o
consumo de memó ria e melhorar o desempenho.
Procure colocar entidades alteradas com pouca frequê
ncia;
Caso alguma aplicaç ã externa altere o banco de dados, os
o
dados das entidades em cache de segundo nível ficam
desatualizados.
Procure colocar um tempo má
ximo de validade para os dados.
21. Cache
Dica: Use cache de resultado de consultas caso as
consultas sejam feitas com um conjunto restrito de
valores.
Nã é um recurso padrã mas grande parte dos providers JPA
o o,
oferecem um recurso deste.
Armazena os ids dos objetos consultados vinculados com os
parâ
metros.
Quando uma consulta é feita pelos mesmos parâ
metros, játem o
resultado pronto.
Cuidado com a política de exclusã de objetos do cache.
o
Pode levar a problemas de consumo excessivo de memó ria.
22. EJB
Dica: Evite transaç õ desnecessárias usando os
es
atributos de propagaç ão de transaç ão apropriados.
Existem seis formas de propagaç ã de transaç ã
o o:
Required (default)
Requires New
Mandatory
Not Supported
Supports
Never
Caso o mé todo nã utilize recursos transacionais, coloque como
o
“ Not Supported” ou mesmo “ Supports” para evitar iniciar
transaç õ desnecessariamente.
es
23. EJB
Dica: Reduza o custo de serializaç ão de
desserializaç ão de objetos marcando atributos como
transient.
Instâ
ncias de Session Bean que sã Stateful podem ser
o
armazenados no disco e removidos da memó ria quando não
estã em uso.
o
Passivation
Em chamadas remotas os objetos passados como parâ metro e
retornados també m passam por serializaç ão/desserializaç ão.
Procure deixar os atributos simples (evite á
rvores de objetos).
Sempre que possível, coloque os atributos como transientes
(cuidado com valores nulos apó s a desserializaç ão).
24. Referências
Java Performance
Charlie Hunt, Binu John. Prentice Hall. Outubro, 2011.
VisualVM Profiler
http://visualvm.java.net
Apresentaç ão do JavaOne 2010
http://www.slideshare.net/drspockbr/performance-tips-and-tricks-java-ee-
java-persistence-api-and-javaserver-faces
Curso: Introduç ão a Algorítmos MIT (Portal Veduca)
http://www.veduca.com.br/play?v=381&t=0016%20&p=Algoritmos