As novidades da JEE 6

15ago10

fonte da imagem: http://www.taranfx.com

Acredito que nenhuma outra versão da especificação Java Enterprise Edition tenha causado tanto rebuliço quanto a 6. Também não é difícil de entender com tantas novidades que surgiram nos últimos tempos: novas tecnologias e arquiteturas, a simplificação de uso de ferramentas e, enfim, paradigmas inovadores de tudo que se possa imaginar. Com a evolução das plataformas de desenvolvimento e da maneira de construir sistemas, não era de se esperar nada menos do que esta grande curiosidade em torno da nova JEE 6. A nova especificação melhorou a experiência de uso da plataforma e agregou diversas soluções difundidas no mercado. Agora é oficial. Confira!

Breve histórico

Para quem não sabe como funciona, as JEE (Java Enterprise Edition) nascem de JSR (Java Specification Request), bem como todas as outras funcionalidades oficiais do Java. As JSR são formadas por um grupo de experts (Expert Group), composto por pessoas e empresas, e organizadas pelo líderes da especificação (Specification Leads). Durante meses a equipe debate sobre as especificações, liberando rascunhos periodicamente para que a comunidade possa acompanhar e se manifestar à respeito das decisões.

Voltemos então o foco para a JEE. A iniciativa que podemos considerar a versão 1 chama-se, na realidade, JPE (Java Professional Edition), lançada pela Sun Microsystems em 1998. É preciso minerar bastante o Google para encontrar materiais consistentes sobre a JPE, mas isso é trabalho para historiadores. Em 1999 foi lançada a versão 2, denominada J2EE 1.2. Fazendo uma busca na base de JSRs não consegui encontrar nada à respeito da J2EE 1.2 (nem ao menos no Google). Isso significa que… esse é o seu primeiro dever de casa!

A versão 3 foi lançada em 2001. Conhecida como J2EE 1.3, esta especificação agregou, dentre outras, a especificação JAAS (Java Authentication and Authorization Service). Em 2003 surgiu a J2EE 1.4, a versão 4 da plataforma, englobando a especificação de Web Services em Java (e outras mais). Em 2006 foi lançada a versão 5, agora conhecida como JEE 5. Isso mesmo, não tem mais o “2”! A JEE 5 trouxe como principal novidade a especificação para tratamento de XML, o JAXB (Java Architecture for XML Binding), além do uso de Generics e Annotations introduzidos na JSE 5.

Pois bem, cada nova versão da plataforma JEE incorporou diversas novas especificações. O modelo foi inchando… inchando… inchando. Na versão 6, a equipe deu um basta!

As novidades da JEE 6

Antes de mais nada, o link para o site da espeficicação JEE 6 (JSR-316) é este: http://jcp.org/en/jsr/detail?id=316. Não há nada místico lá, então vença o medo (ou a preguiça) e baixe a especificação para dar uma olhada. Eu te garanto que ela não morde! A primeira grande ação tomada nesta especificação foi fazer uma limpa na lixarada antiga, tais como o JAX-RPC e o EJB 2. Quem estiver mais interessado neste assunto, leia a seção EE.6.1.3 da especificação.

O que há de novo? Não vou alongar a discussão com exemplos, à depender do feedback de vocês, posso detalhar algumas funcionalidades em um novo post. Basicamente, as novidades mais relevantes para nós, usuários finais, englobam:

Servlet 3.0

[JSR-315: http://jcp.org/en/jsr/detail?id=315]

Declaração via anotações: A novidade mais comentada desta especificação é o uso de anotações para declarar Servlets, Listeners e ServletContextListeners (dentro outros). Este novo recurso possibilitará que fornecedores de frameworks, como kits JSF (PrimeFaces, RichFaces, ICEFaces, etc), já tragam as configurações anotadas nas classes compiladas no seu próprio arquivo JAR. O que você ganha com isso? Facilidade na configuração de ferramentas, além do mais o seu web.xml ficar bem limpo.

Fragmentos web.xml: Agora será possível espalhar o web.xml pelo classpath de sua aplicação. Como? Vou explicar… Voltando ao exemplo dos fornecedores de kits JSF, agora o fornecedor poderá colocar fragmentos de web.xml dentro do seu JAR, deixando o web.xml da aplicação final muito mais limpo. Daí você diz: “mas as vantagens são as mesmas da declaração via anotações!” A resposta é: nem tudo que você pode fazer no web.xml é possível fazer via anotações. 😉

Chamadas assíncronas: Agora sim, suporte nativo às chamadas assíncronas! Quem nunca enfrentou problemas com a falta deste recurso ao usar AJAX em suas aplicações? Aliás, vocês lembram o significado da sigla AJAX, não é? Asynchronous Javascript And XML.

Caso você queira testar estas novas funcionalidades, você pode usar o Apache Tomcat 7 ou servidores de aplicações JEE 6 (tais como o JBoss AS 6 e o Glassfish 3).

JSF 2.0

[JSR-314: http://jcp.org/en/jsr/detail?id=314]

Declaração via anotações: Esta é, sem dúvidas, a novidade mais esperada no JavaServer Faces (JSF) 2.0. Seguindo o exemplo do Servlet 3.0, agora é possível declarar os seus ManagedBeans através de anotações, proporcionando um faces-config.xml bem enxuto!

Facelets nativo: Quem nunca utilizou o velho e bom Facelets? Muito gente já usou templates de tela sem nem saber que aquilo é Facelets, um recurso que não era nativo na versão anterior do JSF. “O quê?! O Facelets não era nativo?” A resposta é: não! O Facelets foi um projeto tão bem sucedido, e tão utilizado com aplicações JSF, que a nova especificação juntou tudo em uma coisa só. Agora sim, Facelets é um recurso nativo do JSF!

Outcome sem rodeios: Quem conhece a versão anterior sabe exatamente o que é isso: quando um botão invoca um método que retorna uma String, o valor de retorno (outcome) deve estar devidamente mapeado no faces-config.xml, identificando a página de destino. Agora, na versão 2, a coisa é bem mais direta: o retorno do método já é o endereço da página. Isso mesmo, não é mais preciso declarar os outcomes. Mas, se mesmo assim você quiser mapeá-los, pode também!

Tratamento de exceções: Para quem já penou com o tratamento de exceções no JSF, uma boa notícia: seus problemas se abacaram-se! E melhor: não é uma solução Tabajara. Agora é possível criar o seu próprio ExceptionHandler para tratar as falhas na aplicação (e convertê-las em mensagens, por exemplo) antes mesmo que aquela tela bizarra apareça para o usuário.

EL Resolver melhorado: Uma das novidades que não listei aqui, mas que é um novo recurso da JEE 6, é a especificação Expression Language (EL) 2.2, que trouxe muitos benefícios para o JSF. Você não sabe o que é EL? Vou dar um exemplo prático: #{seuManagedBean.metodo}. Lembrou? Uma das melhores novidades: agora é possível passar parâmetros nas invocações de métodos. E mais… outra boa novidade: agora virou padrão, antes cada kit usava um EL Resolver diferente, gerando conflito uns com os outros na maioria dos casos.

JAX-RS 1.1

[JSR-311: http://jcp.org/en/jsr/detail?id=311]

Serviços Web de forma fácil: Quem já precisou criar um Web Service sabe que não é uma tarefa trivial. Quem precisou consumir Web Services sabe que não é tão simples. Existem diversas ferramentas que facilitam o trabalho, gerando o código-fonte de forma automática. Contudo, mesmo com a geração automática, é preciso manter dezenas de arquivos. A espeficicação Java API for RESTful Web Services (JAX-RS) 1.1 tem como objetivo padronizar a implementação de serviços REST, que já viraram moda!

JPA 2.0

[JSR-317: http://jcp.org/en/jsr/detail?id=317]

Criteria Queries: Quem nunca sentiu falta do recurso Criteria do Hibernate? Eu já! Quem nunca teve que abrir mão da especificação Java Persistence API (JPA) para amarrar o seu código ao Hibernate só por causa do Criteria? Eu já! Agora não é mais preciso pular a cerca, o recurso Criteria Queries faz parte da nova JPA 2. É fácil de usar? É trivial? Tá 100% bacaninha? Não, não e não.

Cache de segundo nível: Muita gente fala mal da JPA, argumentando sua baixa performance, servindo isso de justificativa para fazer as queries na mão :P. Fala sério! Muitos fornecedores oferecem o recurso de cache de segundo nível para resolver o problema. Quem aí já usou algum? Pois bem, isso agora faz parte da especificação também!

Bean Validation 1.0

[JSR-303: http://jcp.org/en/jsr/detail?id=303]

Validadores personalizados: Eu diria que aqui não há nenhuma novidade em relação ao conhecido Hibernate Validator. Na realidade a especificação foi baseada nele. Ainda mais… ele é a implementação de referência da especificação Bean Validation, o que é uma ótima notícia. Pronto, já disse tudo!

Agora é padrão: Como o recurso de validação agora é padrão, outras especificações (como JSF e JPA) estão nativamente integradas ao Bean Validation. O que você precisa fazer para configurar o JSF (ou JPA) para utilizar a Bean Validation? Nada! É tudo integrado mesmo, estilo plug-and-play!

CDI 1.0

[JSR-299: http://jcp.org/en/jsr/detail?id=299]

Injeção de dependência: Deixa eu esclarecer uma coisa antes de mais nada: a Context and Dependency Injection (CDI) é a antiga especificação Web Beans, mas com um novo nome. Explicando a injeção de dependência (DI) de forma bem rápida: é a funcionalidade de disponibilizar um objeto em sua classe sem o uso da palavra reservada new. Isso mesmo, você não dá um new, o mecanismo de injeção fará isso para você! Não tenho a pretensão de definir DI em um parágrafo. Se você quiser conhecer mais sobre isso, dê uma olhada nos frameworks Spring e JBoss Seam, que motivaram a criação da especificação CDI. Agora é padrão, foi-se o tempo que cada um criava o seu!

Contextos (ou escopos): Não se comenta sobre instância gerenciada sem falar do seu contexto. Imagine os famosos escopos da plataforma Web (aplicação, sessão…), agora imagine isso em aplicações Desktop. Como o CDI não foi concebido exclusivamente para Web, ele promove o conceito de escopos em aplicações em geral, de forma completamente independente de plataforma. Mas espere, ainda tem mais… você pode criar seu próprio escopo. Tudo isso é muito bom!

Fábricas: Fazer fábricas de objetos agora ficou muito fácil. Basta utilizar o recurso Producer para controlar a criação de sua instância associada ao contexto.

Interceptadores: Quem aqui já usou AspectJ? Quem gostou? Humm… Muito polêmico isso heim? Tem gente que ama, tem gente que odeia. Então experimente o recurso Interceptor e me diga o que você achou. Ficou simples ou não? É melhor ou não é?

Estereótipos: Com este recurso, você pode criar anotações para estereotipar suas classes. Os estereótipos podem conter informações de escopo, pontos de intercessão e muitos outros recursos que o CDI tem para oferecer.

EJB 3.1

[JSR-318: http://jcp.org/en/jsr/detail?id=318]

EJB Lite: Muita gente usa EJB, mas saberiam me dizer o porquê (rimou)? Pois é, muita gente não sabe responder isso. Outros dirão que usam por causa do controle de transação nativo. Outros dirão que é para distribuir componentes. A verdade é que pouquíssimos casos precisariam realmente dos recursos do EJB. Foi pensando nisso que a especificação Enteprise JavaBeans (EJB) 3.1 criou o EJB Lite: o EJB sem diversos penduricalhos. O EJB Lite oferece recursos como controle transacional nativo e outras firulas mais.

Interfaces opcionais: Mas que pé-no-saco ficar criando interfaces remotas (e locais) para usar EJB. Agora isso é opcional, você só cria se realmente precisar delas.

Deploy em arquivos WAR: Na versão anterior, EJB só poderia existir em deployments no formato EAR. Agora você pode empacotar seus EJBs com sua aplicação WAR.

Enquete rápida

Preparei uma enquete bem objetiva, para levantar as novidades mais interessantes da JEE 6. Não importa se você é leigo ou se é um expert no assunto, sua opinião é muito importante. Sim! Pode marcar mais de uma opção.

Conclusão

A especificação JEE 6 trouxe uma série de novidades, muitas delas oriundas de soluções já consolidadas no mercado. O mais legal de tudo é que as “sub-especificações” estão cada vez mais interligadas (porém desacopladas), reduzindo bastante o esforço para integração. Fica cada vez mais claro o foco na facilidade de uso, proporcionada pelas anotações, fragmentos de arquivos de configuração e simplificação da arquitetura. Talvez por todos estes pontos as especificação JEE estejam se tornando alvo dos curiosos, estudiosos e profissionais da área.

Espero que, com a compra da Sun pela Oracle, este processo não desande. Mas isso só o tempo poderá revelar. Na minha opinião, o Java e todo seu ecossistema deveriam ser tombados como patrimônio open source da humanidade!

ATENÇÃO!!! Acesse o código-fonte dos experimentos que fiz em: http://github.com/zyc/lab/tree/master/jee6/examples

Anúncios


14 Responses to “As novidades da JEE 6”

  1. 1 Fábio

    Te agradeceria muito se você fizesse um tutorial de uso de Criteria no JPA 2.0. Ô trocinho complicado…

  2. Muito bom teu artigo! Linguagem simples e direta nos principais pontos.
    Realmente o JEE6 tende a simplificar bastante o desenvolvimento de aplicações, principalmente pela facilidade de auto-configuração de bibliotecas.

    Um ponto polêmico que vc tocou é o EJB… tenho receio que torna-lo tão simples fará com que pessoas o usem sem a menor necessidade! 🙂

  3. 3 Abraao

    Que nada sou mais nem usar o criteria do JPA, lixo! velho se nós desenvolvedores nos unirmos contra isso e não usarmos neguinho vai se tocar e mudar esse lixo, pq n copiar integralmente o criteria do hibernate? Qual a dificuldade nisso? 😀

  4. 4 Marlon

    Não lembro onde li, mas me parece que o Gavin King, do Hibernate, pegou todas as coisas que não foram aprovadas para a parte de Criteria do JPA2 e aplicou no Hibernate. Não posso falar muito, pois até agora não trabalhei com JPA2, nem sei como funciona a Criteria dele.

  5. 5 Jader

    Ótimo artigo. Realmente um resumo que pode dar uma visão geral da JEE6. No meu ponto de vista o mais interessante foi pegar muitas coisas que já estavam presentes nos frameworks, integrá-las à especificação e torná-las padrão. Assim diminui o velho problema de aprender a usar um framework e não saber nada sobre o outro.

  6. 6 Adelar

    Muito bom o artigo. Já está nos meus favoritos 😀

  7. 7 Fabrício

    O artigo está ótimo. Foi suficiente para dar uma visão geral das novidades do JEE 6. No LinguÁgil tem mais =)

  8. 8 Paulo

    Bem intereçante
    Gostaria que no linguagil o teor fosse pratico tambem , para que no final, principalmente para os novatos na JEE como eu possam saber os caminhos para desenvolver uma aplicação nessa plataforma

  9. Atenção!

    Disponibilizei publicamente os fontes dos experimentos que fiz aqui: http://zyc.googlecode.com/svn/lab/jee6/

  10. fala zyc;) jee6 é legal, estou estudando


  1. 1 Tweets that mention As novidades da JEE 6 « Cleverson Sacramento -- Topsy.com
  2. 2 Aula 4 – Pós-graduação « Cleverson Sacramento
  3. 3 Facilitando a colaboração com o GitHub « Cleverson Sacramento

E aí, o que você achou? Comenta aí...

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s