Tecnologias JAVA J2EE para servidores O Java possui três edições: J2SE, J2EE e J2ME. O J2SE, Java 2 Standard Edition, é a edição básica principal e contém a máquina virtual que roda as aplicações Java. O J2ME é uma edição à parte para programação de dispositivos móveis. Já o J2EE, Java 2 Enterprise Edition, é uma "extensão" da J2SE para desenvolvimento de aplicações corporativas. Mais precisamente, o J2EE provê uma série de serviços, que juntos estabelecem uma infraestrutura que visa facilitar o desenvolvimento e manutenção de aplicações distribuídas, ou seja, aquelas aplicações que estão "espalhadas" pela rede (por exemplo uma aplicação web, onde o browser contém a interface da aplicação e o servidor web, a lógica de funcionamento). Ou seja, se o que você quer é fazer uma agenda de telefones ou uma calculadora, você provavelmente não necessita dos serviços J2EE. Mais: provavelmente você não necessitará utilizar todos os recursos do J2EE para desenvolver sua aplicação, e de fato você não é obrigado a isso. J2EE: um conjunto de textos Um dos pontos principais do J2EE que deve ser esclarecido é que essencialmente ele não é um software, ele é um conjunto de especificações . Ou seja, em vez de você escrever um software, você apenas cria um documento que diz como esse software deve funcionar. Então várias pessoas podem pegar esse documento, implementá-lo e distribuir o resultado depois. Este cenário é o que permite a independência de fornecedores. Ao fazer uma aplicação J2EE você não fica preso a um determinado fabricante. Você pode mudar as implementações dos serviços J2EE na hora que quiser, por exemplo porque encontrou uma opção mais barata ou gratuita, por questão de desempenho etc. Esta questão de independência de fornecedor não é algo restrito ao J2EE, mas uma característica da plataforma Java como um todo. Tecnologias que compõem o J2EE As especificações J2EE definem um conjunto de tecnologias que provêem a intra-estrutura de suporte para as aplicações distribuídas. É importante frisar que todas essas tecnologias são baseadas na J2SE, que inclui a máquina virtual Java, portanto a plataforma J2SE é um requisito para a J2EE. Podemos dividir as tecnologias J2EE em duas grandes áreas: as tecnologias principais ou primárias e as tecnologias de suporte. Tecnologias principais São as tecnologias essenciais, em vez de simplesmente prover serviços, elas são os próprios elementos que compõem a aplicação: • • • Servlets: classes Java que rodam no servidor web para prover conteúdo dinâmico, como por exemplo páginas HTML; JSP: JavaServer Pages, páginas web misturadas com código Java para geração de conteúdo dinâmico, semelhante aos servlets; EJB: Enterprise JavaBeans, para implementação de objetos distribuídos. Tecnologias de suporte São as tecnologias que provêem as funcionalidades disponibilizadas pela infra-estrutura J2EE (o servidor de aplicações), como transação, comunicação, autenticação, persistência etc. Abaixo segue uma lista das mais comuns, pois existem outras mais: • • • • • • • • • JDBC: conexão com banco de dados; JavaMail: envio e recebimento de e-mails; JAXP: acesso a documentos XML; JTA: suporte a transações; JMS: suporte a mensagens entre componentes; JAAS: serviços de autenticação e segurança; JNDI: localização de recursos através de nomes associados; RMI-IIOP: comunicação entre aplicações remotas; JAX-RPC, JAXR, SAAJ: suporte a Web Services. J2EE: que dois é esse? J2EE significa Java 2 Enterprise Edition. O termo Java 2 passou a ser usado a partir do lançamento do Java 1.2, tido como um avanço considerável em relação às versões anteriores. Esse termo é usado até hoje para referenciar as edições J2SE, J2EE e J2ME, porém com a chegada do Java 1.5 (ou simplesmente, Java 5.0), esse “dois” está sendo abandonado. Assim, a partir da versão 1.5, chamamos as edições simplesmente de JSE, JEE e JME. Talvez você ache, como eu, que esse esquema de nomes e versões seja um pouco confuso, mas enfim, esquisitices da Sun... Uma visão resumida da arquitetura J2EE Os contêineres J2EE são os softwares que provêem a infra-estrutura operacional para os componentes da aplicação no lado servidor, representados pelas tecnologias primárias: os Servlets, JSPs e EJBs. O desenvolvedor não precisa se preocupar por exemplo, com o ciclo de vida, o controle de threads, a persistência, o controle de sessões etc., pois tudo isso é gerenciado pelo contêiner. Basicamente existem os contêineres web, que gerenciam servlets e JSPs, e os contêineres EJB, que gerenciam os EJBs. Por exemplo, o servidor de aplicações Tomcat usa o contêiner de Servlet/JSP chamado Catalina (o Tomcat em si não é exatamente o contêiner, ele inclui um servidor HTTP também, por exemplo). Abaixo nós temos uma figura que representa de uma maneira geral a arquitetura J2EE: Veja que no lado cliente podemos ter desde o navegador web simples, comunicando-se com o servidor via protocolo HTTP, passando por applets, até aplicações stand-alone, que comunicam-se com os EJBs via RMI ou mesmo podem se comportar como um browser, usando HTTP para comunicar-se com Servlets e JSPs (apesar disto não estar explícito na figura). Veja que até mesmo aplicações não-Java podem comunicar-se com objetos Java, através do protocolo RMI que é baseado no padrão CORBA que é independente de linguagem. J2EE: com açúcar ou sem açúcar? As especificações J2EE, assim como as outras que compões a plataforma Java, são definidas e mantidas por um órgão chamado JCP, o Java Community Process, que é um grupo formado por empresas e indivíduos que de uma forma comunitária define os rumos da tecnologia Java. A partir dessas especificações, diversos fabricantes criam seus servidores de aplicação J2EE, que são os softwares que as implementam. AS? AS é simplesmente a sigla de Application Server, ou Servidor de Aplicações, no nosso caso aplicações J2EE. Exemplo: Jboss AS, Oracle AS, Geronimo AS etc. Como exemplo podemos citar estas implementações de grandes fornecedores: Sun Java System Application Server , da própria Sun Microsystems • • • • • WebSphere da IBM Oracle Application Server da Oracle WebLogic da BEA Jboss (open-source) Apache Geronimo (open-source) É interessante notar que existem algumas soluções que não constituem por si só uma implementação da arquitetura J2EE, mas sim de uma parte da mesma. Como exemplo podemos citar o Apache Tomcat e o Jetty, que implementam apenas a parte de Servlet/JSP das especificações. Outra coisa interessante a notar é que essas soluções parciais podem compor uma solução mais completa, como acontece com o Jboss que usa o Tomcat na parte de JSP/Servlet.