Artigo do tipo Tutorial
Recursos especiais neste artigo:
Conteúdo sobre boas práticas.
Problemas comuns na utilização de EJBs
Este artigo apresenta alguns dos principais problemas encontrados durante a implementação de EJBs. Muitos dos problemas enfrentados com esta tecnologia podem estar relacionados com código, mas também temos diversos outros que podem estar relacionados com processos e decisões de arquitetura. Abordaremos também as suas causas e algumas formas de resolvê-los ou atenuá-los.

Em que situação o tema é útil
Por vezes, gastamos um tempo valioso tentando solucionar problemas com EJBs, mas que podem possuir soluções simples e de fácil adoção. Este artigo ajudará o desenvolvedor a checar alguns pontos importantes antes de se preocupar efetivamente com implementações funcionais do negócio, evitando desperdício de tempo e erros nos diferentes ambientes (desenvolvimento, testes, produção, etc.).

EJBs já possuem alguns bons anos de estrada no ecossistema Java. Entretanto, às vezes ainda nos deparamos com problemas que acabam atravancando a implementação, fazendo com que o desenvolvedor perca horas a fio tentando resolver um problema que muitas vezes nem está relacionado com a finalidade de sua implementação. Alguns destes problemas poderiam ser evitados tomando-se alguns cuidados preliminares antes de iniciar o desenvolvimento, ou até mesmo, antes de construir a arquitetura para atender determinada funcionalidade do sistema.

O intuito deste artigo é mostrar alguns dos problemas enfrentados no dia a dia relacionados à implementação de EJBs, além de algumas formas de solucioná-los. Algumas das soluções aqui apresentadas podem não refletir a melhor forma de resolver determinados problemas, haja vista que melhores soluções podem estar relacionadas com padrões arquiteturais de cada empresa e de cada negócio. De qualquer maneira, identificar a causa de um problema já será um excelente começo para determinar qual a melhor solução de acordo com as necessidades e padrões da sua empresa.

Vamos começar falando um pouco sobre arquitetura e estrutura de projetos e depois abordaremos alguns problemas de implementação. Mas antes de abordarmos o real conteúdo do artigo, será necessário fazer alguma preparação mínima para que seja possível evidenciar na prática os problemas aqui apresentados. Esta preparação é necessária para que o leitor faça um acompanhamento e análise mais detalhado do artigo.

Em primeiro lugar, vamos listar os itens que precisamos para acompanhar o artigo. Vale lembrar que dependendo da experiência do leitor, qualquer um dos itens abaixo pode ser substituído por outro de sua preferência (ou mesmo versões mais novas), mas que podem afetar os resultados ou a implementação de alguns dos testes:

· IDE Eclipse Java EE (Indigo);

· Servidor de Aplicação JBoss 5.1.0 GA.

As devidas instalações e configurações não serão abordadas neste artigo. No entanto, o leitor poderá encontrar inúmeros tutoriais a respeito na internet que abordam estes assuntos específicos.

Alguns dos problemas apresentados aqui estão relacionados com o modo conceitual de como os EJBs funcionam. Portanto, dependendo do nível de conhecimento do leitor nesta tecnologia, é muito provável que alguns dos problemas apresentados já sejam pontos de verificação e/ou preocupação no momento da implementação. Entretanto, mesmo programadores mais experientes por vezes caem em algumas armadilhas de código ou conceitos que acabam prejudicando o trabalho ou prazos de entrega, trazendo algum atraso para o projeto.

O artigo consistirá de um projeto EJB completo no Eclipse, simulando alguns problemas que serão tratados no artigo e também algumas simulações de seus possíveis efeitos. Procuraremos detalhar e, principalmente, tornar da forma mais clara possível cada problema abordado, para que o leitor obtenha o máximo de entendimento possível, logo na primeira leitura. Deste modo, vamos primeiro discorrer sobre como montar o projeto no Eclipse. Na sequência e depois de tudo funcionando, abordaremos os seguintes problemas relacionados à implementação de projetos com EJBs:

· Montando o ambiente – Entendendo a arquitetura utilizada;

· Dificuldades relacionadas com a estrutura dos projetos;

· Problemas com a publicação de arquivos (Deploy);

· Exceções na inicialização de atributos de EJBs;

· Utilização de atributos em construtores antes da Injeção de Dependência;

· Concorrência em collections;

· Utilização de atributos em EJBs Stateless;

· Overhead de chamadas em classes utilitárias;

· Ganho de performance com @Local e @Remote.

Montando o ambiente – Entendendo a arquitetura utilizada

Nosso sistema de teste para este estudo de caso está dividido em quatro projetos no Eclipse:

· artigo-base: contém classes e interfaces comuns para os demais projetos. Este projeto serve de base (como o nome sugere) para todos os projetos que precisarem efetuar algum tipo de chamada ou implementação entre si, via interfaces e classes comuns;

· artigo-ejb: contém a implementação dos nossos EJBs e será o mais utilizado para análise dos problemas de implementação e configuração apresentados no artigo;

· artigo-client: possui as classes que serão executadas para validar nossas análises dos estudos de caso e demonstrar as possíveis condições testadas. A intenção deste projeto é simular, da forma mais próxima possível, situações de chamadas de EJBs que podem ocorrer em sistemas rodando em produção;

· artigo-ear: projeto utilizado para gerar nosso Enterprise Archive que será publicado no servidor.

Estes projetos devem ser importados dentro do seu workspace no Eclipse. Na opinião de muitos profissionais, esta é uma das formas mais claras e objetivas de se estruturar este tipo de projeto. Aliás, é justamente falando sobre simplicidade na estrutura dos projetos que começaremos a analisar nossos problemas com EJBs.

Dificuldades relacionadas com a estrutura dos projetos

Frequentemente, temos a oportunidade de presenciar diversas arquiteturas para projetos de código com EJBs na empresa que trabalhamos. Além disso, na internet encontramos inúmeros grupos de discussões com informações a respeito. Cada empresa pode ter diferentes arquiteturas e organização de arquivos de acordo com o negócio, além de diferentes abordagens de gerenciamento de equipes e estratégias de forma geral. No entanto, a experiência nos mostra que a simplicidade deve ser considerada como fator preponderante ante outras premissas, ou seja, mesmo que sua empresa demande uma configuração de projeto absolutamente fora do comum, evite reinventar a roda e tente sempre manter a simplicidade e a clareza dos projetos, para facilitar futuras manutenções e ajudar no entendimento para novos integrantes do grupo de desenvolvimento (ainda mais hoje em dia com o alto turnover na área de TI). ...

Quer ler esse conteúdo completo? Tenha acesso completo