Problemas Projetos EE

Problemas e soluções em Projetos JEE

Dicas essências para gerenciar e tratar riscos em projetos JEE

Entenda alguns cuidados básicos e dicas que podem ajudar a evitar riscos no desenvolvimento de projetos JEE.

Quem conhece as práticas recomendadas pelo PMBOK sabe que os riscos dos projetos de software é uma etapa importante no decorrer do projeto, e que deve acontecer antes, durante e após o desenvolvimento do projeto. Esses riscos estão diretamente ligados ao tamanho, complexidade e importantes estratégias de muitos dos sistemas de informação que estão sendo desenvolvidos atualmente.

Em projetos que utilizam a plataforma JEE não é diferente. Apesar de muitas pessoas incorretamente ainda julgarem os projetos baseados na plataforma JEE como sistemas problemáticos, baixa performance, manutenabilidade difícil, ou mesmo desenvolvimento complexo, é fato o sucesso da adoção em larga escala dessa tecnologia em corporações de todos os tipos. Desde o seu surgimento, a plataforma JEE tem atraído diversas equipes de desenvolvimento, as quais buscam utilizar mecanismos como integração, escalabilidade, performance, segurança, produtividade e interoperabilidade. JEE é uma plataforma madura e inœmeros projetos tem se tornado casos de sucesso em todo o mundo.

Cuidados básicos

Muitos especialistas na plataforma JEE tem auxiliado equipes que estão começando a desenvolver nessa plataforma, evitando assim riscos ao projetos. Com alguns cuidados e estratégias simples, é possível eliminar riscos inerentes a plataforma JEE.

Veja algumas questões que apontam cuidados básicos na adoção da plataforma JEE:

Programação

  • Os desenvolvedores da sua equipe estão familiarizados com programação OO?
  • A sua equipe tem trabalhado com tecnologias de componentes distribuídos anteriormente (CORBA, RPC, RMI, COM+, Web services) ?
  • Os desenvolvedores conhecem Java?
  • Os desenvolvedores sabem programar em JSP?
  • Os desenvolvedores sabem programar em Servlet?
  • Os desenvolvedores sabem programar EJB?
  • Sua equipe ira desenvolver Web Services? Se sim, os desenvolvedores conhecem XML e sabem como usar a API JEE para web services?
  • A aplicação a ser desenvolvida requer invocações assíncronas ou integração com sistemas de mensageria? Se sim, os desenvolvedores conhecem JMS?
  • Existe realmente a necessidade de incluir EJBs (distribuição, escalabilidade, que não são suportadas por servlets?)
  • Os desenvolvedores entendem o suporte transacional do JEE?
  • Os desenvolvedores conhecem JDBC?

Ambiente de desenvolvimento

  • Você possui as ferramentas certas que garantem produtividade?
  • Cada desenvolvedor tem acesso a uma instancia local do servidor de aplicação?
  • O hardware utilizado pelos desenvolvedores está adequado para rodar o ambiente de desenvolvimento por completo?
  • As mesmas versões de servidor de aplicação e frameworks são utilizadas nos ambientes de desenvolvimento, teste e produção?

Infra-estrutura

  • A equipe de suporte tem conhecimento sobre instalação, configuração e administração de servidores de aplicação JEE?
  • O servidor de aplicação que você escolheu oferece ferramenta para monitoração de performance?
  • A versão do servidor de aplicação escolhido contem as tecnologias e serviços que o projeto necessita(é importante lembrar que a especificação esta em evolução constante)?
  • Quais os critérios foram adotados para definir o servidor de aplicação?
  • Já definiu a estratégia de gerencia de configuração e deploy da aplicação?

Projeto

  • O arquiteto do projeto esta familiarizado com os padrões de projetos para JEE?
  • Existe um plano para aprender sobre tecnologias que sua equipe não esteja familiarizada?
  • Caso o seu projeto necessite integração com aplicações externas (ERP, mainframe, etc), existe conectores de qualidade no mercado?
  • A arquitetura definida para seu projeto foi analisada levando em consideração fatores como throughput, latência e concorrência?

Dicas

Não existem regras ou uma unica forma de desenvolver projetos JEE. Podemos observar como todos os dias são publicadas em diversos sites como Java.net, TheServerSide, entre outros, dicas para serem utilizadas no desenvolvimento de projetos JEE. O difícil é saber filtrar quais as dicas realmente são importantes, e quando devem ser aplicadas. Mesmo com tantas dicas publicadas diariamente existem algumas que não podemos abrir mão; exponho aqui algumas das que considero importante.

Ferramentas

Construir bons projetos JEE sem o auxílio de boas ferramentas, é totalmente inviável, por isso, a importância de escolher ferramentas adequadas para o desenvolvimento do projeto. Ferramentas são essenciais para os desenvolvedores obterem produtividade e aumentarem a qualidade do código gerado. A escolha de uma boa IDE (ambiente de desenvolvimento integrado) que suporte a plataforma JEE, possibilita reduzir drasticamente o tempo gasto em desenvolvimento.

O uso de uma IDE com suporte a JEE, oferece diversos recursos, como debug em um servidor local ou remoto, para analisar JSP, Servlet e EJB, além de oferecer aos desenvolvedores convenções de código, padrões de projeto JEE mais utilizados, mecanismo de hot deploy, editores e assistentes para JSP, Servlet e EJB. Essas IDE's exigem da maquina dos desenvolvedores, o que pode tornar o desenvolvimento lento e desagradável, dessa forma, é importante fornecer aos membros da equipe hardware adequado para o uso desse tipo ferramentas.

Nota: Ao analisar qual ferramenta adotar, não esqueça de levar em consideração as características do projeto, possibilidades de extensão(adição de plugins) e integração com o servidor de aplicação e banco de dados adotado no projeto.

Geração de código

Automatizar a geração de código é uma estratégia para garantir consistência e qualidade em diversas partes de código que precisam ser repetidos, ou gerados automaticamente, somente para atender a requisitos da tecnologia (por exemplo, as interfaces locais ou remotas utilizadas pelos Enterprise Java Beans). XDoclet é atualmente o padrão adotado pelos desenvolvedores para geração de código fonte Java. é um framework open source que procura por tags customizadas declaradas em comentários Javadoc e com base nisso, as utiliza para gerar outros arquivos fontes.
XDoclet contém um conjunto de tags Javadoc que podem ser utilizadas para gerar automaticamente códigos que são utilizados na grande maioria dos projetos JEE, como por exemplo interfaces local ou remota para Enterprise JavaBeans, provendo informações específicas para o servidor de aplicação que esteja sendo utilizado (JBoss, WebLogic, WebSphere, entre outros). O XDoclet também oferece suporte a diversos frameworks, como Hibernate e Struts.
Os desenvolvedores quando familiarizados com XDoclet, podem estendê-lo, criando tags customizadas para geração de códigos específicos que atendam a padronização e requisitos da empresa. Através do uso de XDoclet, erros em código podem ser reduzidos, tão como escrever códigos repetitivos.

Adoção de padrões de projetos JEE

Um dos pontos que podem se tornar problemas, é o uso excessivo de padrões de projetos JEE. Tome cuidado, pois não significa qualidade aplicar o maior nœmero possível de padrões em um projeto. Não parta do principio que para fazer uma simples aplicação de "Ola Mundo", é preciso aplicar um Composite View, um Session Facade e um View Helper. Padrões não são obrigatórios, e devem ser aplicados quando são realmente necessários.
é importante que arquitetos de software apliquem somente os padrões essenciais ao projeto, evitando a inclusão de complexidade ao trabalho dos desenvolvedores, pois a ultima coisa que desejamos é perda de produtividade. Projetos JEE precisam ter sua arquitetura o mais simples possível, mas sempre buscando qualidade em sua estrutura. Essa é uma das maiores dificuldades que o arquiteto do projeto pode encontrar.

Padrões de projeto JEE mais comuns

  • Business Delegate
    • Reduz o acoplamento entre a camada Web e os Enterprise JavaBeans
  • Data Access Object
  • Abstrai e encapsula os mecanismos de acesso aos dados
  • Service Locator
  • Simplifica o acesso de clientes a serviços existentes no servidor
  • Session Facade
  • Coordena operações entre vários objetos de negócio em um workflow
  • Transfer Object
  • Transfere dados entre diferentes camadas

Analise de profile

Quanto mais próximo o projeto esteja do fim da fase de construção, desenvolvedores tendem a se preocupar mais com questões de performance. Utilizando um analisador de profile, os desenvolvedores podem diagnosticar e resolver problemas de performance, memory leaks, problemas relacionados a multi-threading e uso incorreto de recursos do servidor de aplicação por parte das aplicações JEE.
Esses analisadores de profile mostram threads, o heap size, heap dump, chamadas a métodos, tempo gasto por cada método, chamadas por pacotes e chamadas a componentes JEE, permitindo cada desenvolvedor verificar onde é gasto tempo e recurso em todo um fluxo de chamada. Os analisadores de profile auxiliam os desenvolvedores entenderem onde estão ocorrendo os gargalos da aplicação, sendo possível resolver esses problemas antes da entrega do projeto para uma bateria de testes.
Atualmente existem diversos analisadores de profile que são distribuídos através de licenças open source ou comercial, oferecendo diversos serviços que a equipe de desenvolvimento necessita para resolver problemas comuns em relação a performance.

Nota: é importante lembrar que os principais ambientes de desenvolvimento integrado (IDE) open source disponibilizam de um analisador de profile.

Testes

Aplicação de testes é fator crítico para o sucesso do projeto, e automatiza-los é uma boa maneira de garantir que o projeto em desenvolvimento esteja funcionando de acordo com os requisitos do projeto. O uso de testes unitários em projetos JEE que possibilitem analisar Servlets, Enterprise JavaBeans, Tag Libs, Filters, JSP e diversos recursos da plataforma JEE torna-se essencial. Com isso, é possível prever problemas em localização de objetos distribuídos, pool de conexão, transação, concorrência, entre outros.
Uma forma interessante e simples de adicionar o uso desses testes no desenvolvimento de projetos JEE, é através do framework JUnit (presente nos principais ambientes de desenvolvimento integrado que suportem JEE) o qual acoplado ao framework Cactus, prove testes unitários a códigos Java que rodam somente na camada do servidor (Servlets, EJBs, Tag Libs, Filters, entre outros), dispensando a necessidade de servidores de aplicação para os testes.

Controle de dependências

é inevitável o uso de dependências internas e externas em projetos JEE, pois qualquer framework que seja utilizado no projeto, ou mesmo para um simples mecanismo externo de LOG (Log4J), será necessário incluir código de terceiros no projeto, por exemplo o uso de arquivos com a extensão jar no classpath do projeto.
Com isso, torna-se comum o uso de dependências binárias (arquivos com a extensão jar). Trabalhar com repositório remoto é uma estratégia importante, possibilitando eliminar completamente a necessidade de armazenamento dessas dependências no controlador de versão (por exemplo Subversion) e evitando problemas de uso incorreto de versão das dependências no projeto, o que geralmente causa problemas somente em tempo de execução, e problemas difíceis de serem localizados e corrigidos.
Através da análise das dependências descritas para cada projeto, pode-se utilizar o framework Maven, sendo o responsável em efetuar automaticamente o download das dependências existentes no repositório remoto, as quais são essenciais ao projeto em desenvolvimento. Quando trazidas as dependências, estas serão armazenados no repositório local, sendo criado em um diretório local na maquina do desenvolvedor, de forma a permitir que o desenvolvedor realize deploy local para testar e efetuar debug da aplicação que esta sendo desenvolvida.
Todo projeto tem o seu próprio diretório no repositório, onde as dependências para o projeto poderão ser armazenados. Dentro do diretório de um projeto, vários tipos de artefatos podem ser armazenados. Atualmente, o mais comum são os arquivos com a extensão jar.

Vantagens

  • Cada desenvolvedor se preocupa com o build do projeto no qual esteja trabalhando, e não precisa atualizar as dependências no CVS para obter todas as dependências e reconstruí-las.
  • Cada desenvolvedor estará sempre utilizando a versão mais atual e correta de cada dependência do projeto.

Controlando a qualidade do código desenvolvido

Ao longo do desenvolvimento do projeto, é interessante acompanhar o código que esta sendo produzido pela equipe, buscando melhorar a qualidade do projeto e evitar bugs inconvenientes. Realizar a tarefa investigativa em código de uma forma manual, linha por linha, é extremamente inviável de ser aplicado em projetos JEE. Por outro lado, podemos utilizar o framework open source Maven, para nos auxiliar nessa tarefa, onde podem ser aplicadas diferentes tipos de métricas para identificar problemas comuns que ocorrem em códigos JEE, informar a qualidade do código que esta sendo produzido, o resultado de baterias de testes unitários ou funcionais, a complexidade ciclomática existente no código, entre outras coisas.
Com a utilização do Maven, podem ser gerados relatórios de métricas aplicadas na analise do código do projeto. Esses relatórios estarão concentrados no site do projeto criado automaticamente pelo Maven. Tais relatórios são importantes ferramentas gerenciais, dada ˆ riqueza das informações neles contida, ficando disponível na intranet da empresa, onde poderão ser acompanhados diariamente pelos responsáveis do projeto.
Dessa forma, o Maven torna-se uma excelente ferramenta para gestão e controle de projetos, fornecendo dados sobre evolução do desenvolvimento, métricas de qualidade e produtividade. A arquitetura do Maven é modular, ou seja, possibilita a adição de diferentes tipos de plugin's, onde estes irão disponibilizar os serviços necessários para controle de qualidade como:

  • Analise de testes unitários
  • Analise de testes funcionais
  • Detectores para copy & paste, exibindo o código copiado e quais módulos apresentam este problema
  • Detectores de problemas no código fonte como laços e selelções desnecessárias, ausência de ações para tratamento de exceções(try, catch, finally vazios), além de apontar classes com alta Complexidade Ciclomática.
  • Verificadores da adesão do projeto a convenções de código padrão, exibindo as classes e linhas de código com problema.
  • Geradores de relatório para medir a qualidade analisando extensibilidade, reutilização, manutenção e dependências.

Equipes novatas na plataforma JEE

Ao adotar uma nova tecnologia, e isto não é diferente na adoção do JEE, precisamos estar preparados para a curva de aprendizado e queda significativa na produtividade dos membros da equipe, por um determinado período de tempo. Isto está diretamente relacionado ao aprendizado necessário para realizar o desenvolvimento das aplicações que irão atender a necessidade da empresa.
Para minimizar este impacto, é recomendável que seja realizado um processo de treinamento, mas que forneça experiência pratica, o que é conhecido como mentoring. Se sua equipe participar somente da fase de treinamento, quando essa fase esta completa, você acha sua equipe está pronta para começar a aplicar os novos conhecimentos obtidos. é nesse ponto que muitas organizações encontram problemas porque elas erroneamente acreditam que sua equipe tem agora as técnicas necessárias para construir softwares JEE sem precisar de nenhum auxílio.
Nada poderia estar mais longe da verdade, você mandaria alguém para duas semanas de cursos em contabilidade e daria a ele o controle de suas finanças? Claro que não! No entanto, porque mandaria alguém para duas semanas de cursos de desenvolvimento e espera que ele desenvolva softwares de "missão crítica" com as suas recém-descobertas técnicas? A verdade é que duas semanas de treinamento são só duas semanas de treinamento.
O objetivo do mentoring é ter alguém que seja experiente em tecnologia orientada a objeto para guiar "novatos" através do processo de aprendizado, mostrando-os como utilizar técnicas de desenvolvimento na plataforma JEE. Os esforços de mentoring deveriam ser executados em um projeto de desenvolvimento, onde o "estagiário" tem a oportunidade para aplicar e evoluir suas habilidades que ele recebeu durante o treinamento. Os melhores mentores têm vários anos de experiência em técnicas e tecnologias na plataforma JEE, tem experiência em mentoring, e tem boas técnicas de comunicação.
Consultores podem auxiliar os gerentes de projetos no processo de mentoring após a fase de treinamentos, e a identificarem os principais riscos e prevenir impasses técnicos que podem impedir o progresso do desenvolvimento. Eles podem prover aos desenvolvedores informações sobre boas práticas na plataforma JEE, recursos e atalhos para evitar problemas. Portanto, um grande desafio é escolher uma empresa de consultoria que aplique taxas de serviço "possíveis" de serem pagas, oferecendo um serviço qualificado. Procure por consultores que realmente tenham experiência prática e que possam oferecer além do que simples conhecimentos em frameworks.

Adotando soluções open source

Uma das grandes vantagens da plataforma Java, e consequentemente do JEE, é o vinculo com o mundo open source, tendo como apoio uma enorme comunidade de desenvolvedores que produzem ferramentas e soluções de altíssimo nível, suportando o desenvolvimento de projetos JEE. Com isso, as empresas podem ter soluções de qualidade totalmente ou parcialmente baseadas em open source.
Com a utilização de frameworks open source nos projetos JEE, é possível diminuir significativamente os custos, aumentar a qualidade do projeto e diminuir o tempo de implementação. O exemplo de serviços simples que utilizamos no dia-a-dia em projetos JEE, que podem ser oferecidos em diversos frameworks open source existentes no mercado: gerenciamento de log, acesso a dados, agendamento de tarefas, entre outros.
Mas nem tudo é simples, atualmente existem centenas de projetos open source hospedados no Java.net, Apache Software Foudation e SourceForge, os principais sites dessa categoria de projetos, e ainda vários outros hospedados em diversos diferentes sites, que poderiam ser utilizadas em seus projetos JEE.
Uma das principais duvidas das empresas que iniciam em JEE, é quais os frameworks open source poderiam ser adotadas? Por isso nunca dispense mão-de-obra especializada para auxilia-lo a encontrar uma solução, reunindo as melhores soluções open source existente no mercado.

Conclusões

Qualquer desenvolvimento de projeto, requer cuidado e atenção. Para projetos JEE, essa premissa não é diferente. Se padrões e boas praticas não forem seguidos, seu projeto correrá sérios riscos em pontos como manutenabilidade, performance, produtividade no desenvolvimento, entre outros.
Antes de iniciar um novo projeto que irá utilizar a plataforma JEE, lembre-se que já foram desenvolvidos milhares de projetos que utilizaram essa plataforma.
Não deixe de consultar foruns especializados em desenvolvimento JEE, o grupo de usuários Java da sua cidade, artigos especializados, ou mesmo um colega de trabalho que já tenha atuado em algum projeto desse tipo, pois todos esses com certeza poderão fornecer dicas, boas praticas e cuidados interessantes.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License