O porque dessas empresas adotarem e apoiarem a plataforma JEE, provavelmente, deve-se ao fato de estarmos falando de uma plataforma aberta e robusta, com preocupação principal na compatibilidade entre os servidores e aplicações e as aplicações desenvolvidas para eles. Essa postura de “manter a compatibilidade” entre os softwares desenvolvidos para JEE torna a plataforma uma escolha agradável e acessível para os gerentes de TI, já que, optando pela plataforma JEE eles não ficam amarrados com nenhum vendedor em específico.
No entanto, para que essa compatibilidade, e essa robustez da plataforma fosse alcançada, a Sun e o JCP tiveram, e ainda tem, diversos desafios a vencer. Um deles foi criar a especificação para implementação da plataforma, o que aconteceu na época do lançamento do JPE. De lá para cá a especificação da plataforma tem crescido juntamente com as tecnologias que ela vem agregando ao seu kit de ferramentas. Outro desafio era testar se todas as empresas que usavam a especificação JEE estavam realmente seguindo à risca o que foi especificado. Para isso a Sun lançou sua “implementação de referencia” e o “Kit de testes de compatibilidade” que podem ser usados para assegurar a compatibilidade de um produto com a plataforma JEE de maneira relativamente rápida e fácil. Outro trabalho desenvolvido não só pela Sun, mas por toda comunidade, foi a criação do J2EE Blueprints, que é um catálogo de “boas maneiras” (padrões de projeto) para o desenvolvimento de aplicações JEE.
Especificação JEE
A especificação JEE é um conjunto de documentos que explica como os servidores de aplicação e as implementações de algumas tecnologias (como JSF por exemplo) devem ser desenvolvidas por empresas que o queiram fazer. Essas especificações chegam a nível de “métodos”, ou seja, existem documentos e “interfaces” Java publica que os “implementadores de JEE” devem seguir para que seus produtos sejam considerados compatíveis com JEE.
Esses documentos podem ser encontrados no site da Sun, mais especificamente no seguinte link: http://java.sun.com/javaee/reference/
Implementação de referencia
A Sun, juntamente com as especificações libera as “implementações de referencia”, que são bibliotecas que “concretas” que implementam as interfaces documentadas. Podemos encontrar as implementações de referencia no site da Sun, no seguinte link: http://java.sun.com/javaee/technologies/. Cada tecnologia listada tem sua implementação e os manuais de como utilizá-las. O Glassfish, que é o servidor de aplicação de “referencia” da Sun já traz, no seu download, a maioria das implementações de referencia das demais tecnologias.
Kit de testes de compatibilidade (CTS e AVK)
O CTS (Compatibility Test Suit) é um conjunto de aplicações que servem para testar se um Servidor de Aplicação é compatível com a especificação JEE atual. Se o conjunto de testes for bem sucedido quando executado em um determinado servidor de aplicação, esse servidor pode receber o selo de “J2EE Compatível”, sendo assim, as aplicações que usam as bibliotecas JEE funcionarão perfeitamente nesses servidores.
O AVK (Application Verification Kit) é um kit de testes, semelhantes ao CTS, mas para ser executados nas aplicações. Esse kit garante que a aplicação não tem nenhum código específico, ou seja, nenhum código que fuja da especificação JEE, garantindo assim que a aplicação desenvolvida seja portável entre todos os servidores que passem no teste CTS.
Até a versão 1.4 (J2EE) do AVK, as aplicações que passavam nessa bateria de testes poderiam fazer parte do programa “Java Powered for the Enterprise brand”, mas a partir da versão 1.5 ou 5.0 (JEE) esse programa será descontinuado. Para mais informações acesse: http://java.sun.com/j2ee/verified/program.html
Para saber detalhes de como os testes funcionam, e para baixar os kits de testes, acessem o seguinte link: http://java.sun.com/j2ee/verified/avk_enterprise.html
J2EE Blueprints
O J2EE Blueprints é um catalogo de “padrões de projeto” para o uso com a plataforma J2EE. Os padrões de projeto (design patterns) são soluções para problemas comuns que foram testadas, e, verificando-se sua eficiência e possibilidade de reuso, catalogadas e tomadas como “boas maneiras” para se desenvolver softwares.
Existem diversos “padrões do projetos”, muitos desenvolvidos pelo GoF (Gang of Four), mas o J2EE Blueprints trata de um conjunto de padrões específicos para aplicações J2EE. Esse catálogo pode ser encontrado em (http://java.sun.com/reference/blueprints/) . Existe também a versão impressa, o livro chama: Core J2EE Patterns: Best Practices and Design Strategies, existindo também uma versão em portugês. Na minha opinião, qualquer um que queira trabalhar profissionalmente com JEE deveria conhecer os padrões do livro, e estar atento para utiliza-los no projeto que irá/está desenvolvendo.
Podemos notar que os desenvolvedores da plataforma JEE preocupam-se em fazer algo que siga o principal objetivo do Java: Escreva uma vez, use sempre! Ou seja, Portabilidade! Não a portabilidade entre sistemas operacionais ou entre dispositivos diferentes, mas acima disso, a portabilidade entre servidores e aplicações!!
Quais os benefícios disso?
Pensando como gerente de TI: Utilizando a plataforma JEE podemos criar aplicações que sejam portáveis entre diversos servidores, e que possam se comunicar com outras aplicações de forma padronizada, diminuindo drasticamente o “custo” no que se diz respeito a testes numa possível troca de ambiente (servidores, etc) ou em testes de integração entre aplicações. Temos uma plataforma aberta, sem medo de que derrepente um fabricante suba o preço ou pare de dar suporte a algum produto do qual dependemos. Na pior das hipóteses, temos toda a “receita” de como criar nosso próprio servidor de aplicação.
Pensando como Programador: Temos uma plataforma completamente documentada, sem perigo de encontrar “armadilhas”. Podemos escolher qual servidor usar para desenvolver sem deixar nosso ambiente pesado (optar por desenvolver em servidores lightweight no ambiente de desenvolvimento), podemos compartilhar componentes com pessoas da comunidade JEE sem se preocupar com compatibilidade nem ter que ficar explicando nos mínimos detalhes como nosso componente funciona já que todos estarão falando a mesma linguagem!
Na sequencia da conversa vamos ver como é a estrutura de uma aplicação JEE e vamos entrar em detalhes mais técnicos!
Abraços!