Vídeo: Módulo EJB - Aula 01 - Introdução e configuração do ambiente 2024
Analisar o desempenho é provavelmente uma das tarefas mais complexas na concepção de qualquer aplicativo. É uma ciência imprecisa porque existem muitos fatores que entram em jogo. Estes são aumentados em aplicativos Enterprise JavaBeans (EJB), onde o desempenho depende em grande parte da implementação do contêiner EJB que você usa. A linha inferior é que você não pode saber se está fazendo as decisões de desempenho corretas até testá-las.
Seguem-se alguns problemas que você deve ter em mente ao considerar problemas de desempenho:
- Nem todos os contêineres EJB são criados iguais. Enquanto cada recipiente EJB deve estar em conformidade com a especificação EJB, os fornecedores têm ampla latitude na implementação do contêiner EJB. Seus requisitos se concentram nos resultados das operações, não na eficiência de uma operação. Alguns fornecedores irão fazer um trabalho melhor com diferentes porções de um contêiner EJB. Você deve determinar onde as eficiências podem ser obtidas em um contêiner EJB e onde os gargalos do desempenho ocorrerão. A única maneira de saber com certeza é tentar antes de comprar. Mesmo depois de comprar uma solução, as principais decisões de design, como usar ou não os beans de entidade EJB, devem ser testadas.
- O desempenho pode depender da eficiência da sua aplicação. Existem regras gerais que você pode usar para ajudar a determinar quais projetos de aplicativos são melhores do que outros. Mas essas diretrizes podem ser facilmente invalidadas com uma implementação desleixada. A melhor maneira de garantir que você evite implementações desleixadas é realizar avaliações de código regulares - é quando você se senta com todos os seus colegas de codificação e faça com que revisem seu trabalho - durante seu projeto EJB. Você deve focar suas avaliações de código em analisar a fonte e garantir que seja bem projetado e eficiente. As revisões de código oferecem uma ótima oportunidade para os programadores aprenderem uns com os outros.
- Desenvolva um protótipo para testar seus pressupostos de desempenho. Aqui está um cenário de exemplo. Como um desenvolvedor de aplicativos EJB, você deve decidir antecipadamente se deve ou não usar beans de entidade para gerenciar a interação com um banco de dados. Suas duas opções básicas são
• Criar beans de entidade para gerenciar a interação do banco de dados. Entity beans podem simplificar a interação do banco de dados a partir de uma perspectiva de programação de aplicativos. Mas eles também podem exigir uma penalidade de desempenho. Algumas dessas penalidades podem ser controladas da maneira que você implementa beans de entidade - ou seja, usando interfaces locais versus interfaces remotas ou fazendo beans de entidade de grãos grosseiros.
• O código de banco de dados JDBC chama diretamente em beans de sessão e evita o uso de beans de entidade completamente. O JDBC pode ser mais difícil de trabalhar do que usar beans de entidade com persistência gerenciada por contêiner. Este curso também pode prejudicar sua capacidade de aproveitar as transações gerenciadas por contêiner EJB.
Para determinar qual dos dois cursos é mais apropriado, você pode executar um teste simples:
1. Crie um bean de entidade e um bean de sessão que executem operações no mesmo conjunto de dados de um banco de dados.
2. Escreva um programa simples que mede o tempo necessário para invocar um conjunto de inserções, atualizações, consultas e alterações no banco de dados.
Este segundo programa deve invocar o bean de sessão para um teste e o bean de entidade para outro teste - executando o mesmo conjunto de operações em cada um.
3. Analise os resultados para determinar se o desempenho será um problema.
Se você quer uma análise de desempenho mais fino, você pode escalar etapas individuais - para identificar a operação mais cara - e depois tentar modificar essas operações para gerar ganhos de desempenho.
Para um bean de entidade, você pode querer medir o desempenho nas seguintes operações:
- Quanto tempo demora para obter uma referência para uma interface remota ou uma interface local?
- Qual a diferença de desempenho entre executar uma atualização em uma interface remota e uma interface local?
- Qual a diferença entre atualizar várias linhas em um banco de dados no JDBC e executar uma atualização em várias linhas usando o método de casa de um bean de entidade?
As respostas a essas perguntas serão diferentes do contêiner EJB para o contêiner EJB e também serão influenciadas por: a) o driver JDBC que você escolher; b) se você usa ou não o pool de conexão de banco de dados; e c) a eficiência das suas implementações do bean da entidade e do bean de sessão. Você provavelmente ficará surpreso com alguns dos resultados obtidos - testes como estes têm uma maneira de desafiar seus pressupostos sobre o desempenho dos beans de entidade.
Quando você está ajustando um EJB para desempenho, não faça alterações aleatórias. Em vez disso, concentre sua atenção nas etapas da aplicação que mais custam em termos de desempenho.
Nota: As medidas de desempenho geralmente revelam que um processo de negócios tem apenas um ou dois pontos, onde melhorias significativas podem ser feitas. Esta observação foi feita com bastante frequência que levou à criação da regra Pareto 80-20. Essa regra afirma que 80 por cento do tempo de execução de um programa é devido a 20 por cento do código. Seu objetivo deve ser identificar quais 20 por cento do código são mais caros em termos de recursos do sistema e se concentrar em otimizar essa parcela.