JDF - O que é o JBoss Developer Framework?

Version 3

    http://design.jboss.org/jbossdeveloperframework/logo/final/jdf_logo_450px.pngA primeira impressão quando ouvimos falar sobre o JDF, é que por se tratar de um Framework encontraremos uma biblioteca, um jar ou qualquer coisa que lembre os demais frameworks mais conhecidos. Entretanto o JDF trata-se de uma base de conhecimento, sem igual, de Java EE 6. Engana-se quem pensa que se trata apenas de um aglomerado de exemplos e por isto vou tentar explicar melhor o seu conceito.

     

    Você sabe que a especificação Java EE 6, é um guarda-chuvas para várias outras tecnologias ( EJB 3.1, JPA 2.0, JSF 2.0, Servlet 3.0, JAX-RS 1.1, etc). Que tal se tivessemos uma base de conhecimento com exemplos e que mesmo sendo desenvolvido por diversas pessoas, sigam uma padronização e uma série de recomendações que você pode aplicar no seus projetos do dia a dia? O JDF possui isto (também)

     

    A primeira coisa que notamos, é que todos os projetos seguem a estrutura do Maven. Ou seja, esta é a forma recomendada de criar seus projetos e guardar os seus fontes. Ah! E por favor. Nada de fazer commit de seus arquivos .project e .classpath no controle de versões (git, svn, cvs), ok ? O Eclipse com o JBoss Tools ou o JBDS suportam projetos Maven e fazem a integração de forma natual com o WTP (Web Tools Project).

     

    1 - Archetypes

     

    Já que toda a base do JDF é Maven, vamos começar pelos Archetypes. Digamos que você queira começar um projeto Java EE 6. O JDF fornece alguns Archetypes Maven para que você comece o seu projeto sem que você tenha que fazer todo o setup do zero. Algumas opções de archetypes fornecidos pelo JDF:

     

    1. Projetos WEB - Projeto (empacotamento WAR) com uma aplicação exemplo
    2. Projetos WEB Blank - Projeto (empacotamento WAR) em branco. (vazio)
    3. Projeto EAR - Projeto (empacotamente EAR com EJB e WAR) com uma aplicação exemplo
    4. Projeto EAR Blank - Projeto (empacotamente EAR com EJB e WAR) em branco (vazio)

     

    Para mais informações sobre como usar Archetypes, dê uma olhada em http://maven.apache.org/archetype/maven-archetype-plugin/usage.html

     

    2 - BOMs (Bill of Materials)

     

    Bill of Materials ou simplesmente BOM é um conceito que está cada vez mais sendo usado dentro do Maven e que tem como finalidade gerenciar as versões de suas dependências. Só quem já passou pela experiência de "mavenizar" um projeto existente, sabe a dificuldade que é, encontrar a versão correta de determinado aterfato.

     

    Você já viu a quantidade de projetos e tecnologias JBoss na página http://www.jboss.org/projects ?

     

    Agora imagine que você tenha que saber qual o "groupId" e "artifactId" de cada um destes projetos? Aumente agora a complexidade de também saber a versão. Aumente agora, ainda mais, a complexidade de saber qual versão funciona com o que. Este é o tipo de preocupação que você não terá se utilizar os BOMs JDF. Todas estas informações estão lá.

     

    Outra grande vantagem é que todos estes artefatos gerenciados pelo BOM possuem a garantia de estarem no repositório central do Maven (exceto pelo artefatos Enterprise)

     

    Algumas opções de BOMs:

     

    1. Java EE 6 com Hibernate
    2. Java EE 6 com Resteasy
    3. Java EE 6 com Infinispan
    4. Java EE 6 com Richfaces
    5. Java EE 6 com ...

     

    São inúmeras opcões. Para saber como usar um BOM, dê uma olhada em http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management

     

    3 - Stacks

     

    Vimos o quanto os BOMs podem ajudar, mas sabemos que as tecnologias JBoss estão em constante evolução e por isto, um BOM ou Archetype pode ser atualizado. Para os clientes que posuem subscrição, existe ainda diversos produtos que às vezes precisam se integrar de forma suportada como é o caso do EAP (Enterprise Application Platform) 6.0.x e WFK (Web Framework Kit) 2.x.

     

    O JDF possui um sub projeto, chamado de Stacks que nada mais é que o gerenciamento do relacionamento entre um Runtime (JBoss AS, JBoss EAP, JDG, etc) e os Archetypes, BOMs e suas versões. Para se ter uma idéia de como este relacionamento é definido, você pode checar o seguinte diagrama: https://github.com/jboss-jdf/jdf-stack/blob/1.0.0.Final/fileformat.png

     

    Este relacionamento é mantido em um arquivo no formato YAML que representa os relacionamentos: https://github.com/jboss-jdf/jdf-stack/blob/1.0.0.Final/stacks.yaml - Este arquivo é consumido online por algumas ferramentas como o JBDS e o plugin JDF para o Forge de forma que ao usar estas ferramentas, você sempre estará usando a última versão recomendada destes archetypes e boms de acordo com o seu runtime.

     

    A página do JDF do projeto JBoss Stacks também foi construida utilizando a mesma informação deste arquivo. Nela é possível navegar por estes Runtimes, Boms, Archetypes e versões. Confira: http://www.jboss.org/jdf/stack/stacks/

     

    Você também pode consumir esta informação sem a necessidade de lidar com o dowload e parse do arquivo. Um client Java é fornecido e você pode utiliza-lo ao seu dispôr: http://www.jboss.org/jdf/stack/stacks-client/

     

    4 - Quickstarts e padronizações

     

    Com aproximadamente 80 quickstarts, mesmo sendo eles desenvolvidos por diversas pessoas, tanto engenheiros da Red Hat, quanto por colaboradores da comunidade, existe algumas padronizações que são seguidas de forma que é possível perceber que entre os diversos quickstarts qual é a solução adota e proposta para situações comuns e outras não tão comuns assim.

     

    Por exemplo, a grande maioria dos projetos não possuem o arquivo web.xml. Os arquivos beans.xml and faces-config.xml são utilizados apenas para ativar o CDI e o JSF respectivamente. Também é possível perceber qual a forma recomendada para a utilização de uma determinada tecnologia (infinispan, deltaspike, etc), bem como o uso de testes usando arquillian (que funcionam integrado ao Maven e também podem ser executados de dentro do Eclipse) e como é possível fazer o deploy da aplicação usando o plugin maven jboss-as-maven-plugin.

     

    Muito mais que exemplos, estes quickstarts também são verdadeiros tutoriais já que todos eles são muito bem documentados e os comentários dos códigos explicam por quê determinada abordagem técnica foi utilizada. Neste ponto, o JDF é uma verdadeira biblioteca de conhecimentos de Java EE 6. É uma das mais ricas que existem atualmente!

     

    Contribua

     

    A grande maioria deste exemplos foram construídos pelos próprios engenheiros da Red Hat, levando em consideração a prática recomendada para o uso de seus projetos. Ou seja, os exemplos do Richfaces, Infinispan,  etc foram construídos pelos engenheiros destes respectivos times. Mas não deixe isto te amedrontar. Você pode contribuir, basta ver a quantidade de contribuidores em http://www.jboss.org/jdf/about/contributors/

     

    Cada página do JDF possui uma seção "Get Involved" com um guia passo a passo de como contribuir. É uma excelente oportunidade para se envolver ainda mais com Opensource e trabalhar com tecnologias bacanas.

     

    Ah! Todos os fontes estão hospedados em: https://github.com/jboss-jdf/ - Não deixe de dar uma olhada. Tem muita coisa legal lá.

     

    Um grande abraço.