No dia 12 de Julho foi liberada a versão 7 do servidor de aplicações Java EE da comunidade JBoss, o JBoss Application Server (AS), que muitos ainda chamam apenas de “JBoss”. A nova versão é anunciada como sendo ainda mais leve e performática do que as versões anteriores.
A versão 7 não é apenas uma evolução incremental das versões 5 e 6. Segue uma arquitetura substancialmente diferente em vários aspectos-chave, como modularização, gerência de dependências e carregamento de classes (classloading). Portanto, desenvolvedores e administradores precisarão se preparar para mudanças nos procedimentos operacionais, como aconteceu na transição da versão 4.2 para a 5.
Mas tanto desenvolvedores como administradores ficarão felizes com a retomada do ritmo acelerado de evolução do servidor de aplicações, depois da velocidade menor com que evoluiu o AS depois da versão 5. O AS 7, provavelmente em uma futura versão 7.1, será a base para o EAP 6, a versão do JBoss AS suportada mediante assinatura pela Red Hat, que está prevista para início de 2012.
Novidades do AS 7
Entre as novidades da nova versão do JBoss AS, podemos destacar:
- Ativação de serviços sob demanda, de modo que serviços não utilizados não consumam tempo na inicialização do servidor nem ocupem memória ou CPU até que sejam demandados por alguma aplicação;
- Isolamento de classloaders, evitando vários problemas relacionados com conflitos entre JARs inclusos nas aplicações e os fornecidos pelo servidor de aplicações. É o fim das “brigas” com o Unified Class Loader (UCL) das versões anteriores;
- Configurações de serviço agora seguem sintaxes enxutas e customizadas, baseadas em XML Schema, em vez de estarem inseridas no meio de configurações genéricas de AOP. Ou seja, configurações estão separadas da amarração entre beans do próprio servidor e das definições de pointcuts dos aspectos;
- Não apenas servidores isolados, mas também grupos de servidores (chamados de "domínios"), podem ser administrados via um console web ou por ferramentas de linha de comando;
- Integração com o Arquilian para execução de testes diretamente pelo seu IDE ou servidor de Integração Contínua;
- Suporte ao TorqueBox para execução de aplicações Ruby e a plataformas de nuvem, em especial o OpenShift;
- Novas versões do Hibernate (persistência objeto-relacional), HornetQ (messageria), RESTeasy (Web Services REST e JAX-RS), IronJacamar (nova implementação do JCA para integração com EIS), JBoss TS (Gerencia de transações distribuídas XA e WS-Transactions), Mojarra (implementação de referência do JSF) e Apache CXF, que é a implementação preferencial de Web Services SOAP e JAX-WS desde o JBoss AS 6.
Arquitetura e Modularidade
Embora o JBoss AS 7 ainda utilize fortemente os recursos do JBoss AOP, ele substitui o Microcontainer utilizando as versões 5 e 7 por um novo kernel baseado no JBoss Modules, que também é a base para o suporte a OSGI dentro do servidor de aplicações. Espera-se que o JBoss Modules evolua de forma compatível com o sistema de módulos definido pelo projeto Jigsaw (JSR 294) para o JDK 8.
É graças ao JBoss Modules que é possível ativar serviços do servidor de aplicações apenas quando são requisitados por uma aplicação, em vez de ter que ativar todos durante o inicialização do servidor. Ele também permite um controle mais fino sobre o classpath de cada aplicação, o que deverá diminuir problemas de conflitos entre classes e bibliotecas (arquivos JAR) de diferentes aplicações.
Agora o JBoss AS trabalha com classloaders isolados por deployment como padrão, sem com isto se tornar mais pesado. Sub-deployments, por exemplo pacotes WAR e EJB-JAR dentro de um EAR, também são isolados entre si.
Cada deployment ou sub-deployment enxerga apenas os módulos (dependências) que ele solicitar explicitamente (ou implicitamente pelo uso das APIs do Java EE). Será possível utilizar, em aplicações, versões do Hibernate, do parser XML e de outras bibliotecas diferentes das usadas internamente pelos serviços do JBoss AS.
Administração Centralizada
O administrador que prefere editar manualmente seus arquivos de configuração, ou que é adepto da gerência de configuração automatizada via ferramentas como Puppet, irá encontrar no AS 7 uma plataforma ainda mais amigável do que as versões anteriores, graças à separação dos arquivos de configuração das definições de AOP e aos novos comandos de administração. Também são fornecidas APIs Java e REST para integração com outras ferramentas de automação.
O console de administração web também recebeu várias melhorias, com novos fluxos de trabalho e recursos para configuração mais abrangente do servidor. O console agora pode administrar não apenas servidores isolados mas também grupos de servidores em um “domínio”, facilitando tarefas como deploy de aplicações em clusters ou em farms de servidores. Estes recursos, que antes eram parte de um projeto separado, o JOPR ou RHQ, agora estão embutidos no novo AS.
Na opção pela administração em domínio, uma instância do JBoss AS 7, chamada de Domain Controller, deve ser reservada exclusivamente para a administração das outras instâncias. Em cada servidor físico ou virtual em que forem rodar instâncias do AS 7, deve haver também uma instância adicional, chamada Host Controller, dedicada a intermediar as ações do Domain Controller sobre as instâncias, permitindo operações remotas como reinicialização destas instâncias. Este modelo é semelhante ao utilizado por servidores de aplicações proprietários como o Webspbere da IBM.
JBoss AS na Nuvem
Vários dos recursos do recém-lançado AS 7, ou prometidos para a próxima versão “ponto 1”, são voltados para ambientes em nuvem. Alguns exemplos são disso são administração via linha de comando ou via APIs REST, e a administração de servidores em domínio. Além disso, JBoss Modules permite que mais cenários de atualização sejam feitos à quente (hot deployment). E recursos estáticos embutidos em pacotes podem ser atualizados sem reinício da aplicação e consequente perda de estado dos usuários em memória.
A nova versão do JGroups, o framework de comunicação multiponto que é a base de um cluster JBoss AS desde a versão 3, permite configurar clusters virtuais, que são distribuídos geograficamente, realizando sincronização e failover entre clusters locais localizados em diferentes Data Centers.
Por sobre o novo JGroups, o Infinispan é o gerenciador de replicação para sessões HTTP e caches JPA, substituindo o JBoss Cache (antigo TreeCache) usado nas versões anteriores. O Infinispan é a base de uma nova JSR que visa padronizar recursos de cache na plataforma Java EE e oferecer recursos para manipulação de grandes volumes de dados em ambientes de grid.
Esta nova infraestrutura de cluster baseada no Infinispan ainda é um trabalho em andamento. Alguns recursos que estavam disponíveis em versões anteriores do JBoss AS, por exemplo a replicação de estado de SFSBs, ainda não funcionam na nova versão, mas estão prometidos para o AS 7.1.
A versão do Infinispan inclusa no AS 7 oferece ainda suporte ao algoritmo MapReduce para computação distribuída e suporte a bases de dados colunares e outros tipos de bancos de dados noSQL, que vêm se tornando populares em aplicações Web 2.0 e na nuvem.
Certificação Java EE
O novo release, assim como o AS 6 (liberado no final de 2010), só foi certificado para o Java EE 6 Web Profile, apesar das promessas feitas no início deste ano de que o “próximo release” teria a certificação Java EE Full. A certificação full foi adiada para o AS 7.1.
Por isso, o desenvolvedor Java não irá perceber em um primeiro momento grandes diferenças entre o AS 6 e o novo AS 7, exceto em termos de desempenho. São suportados basicamente os mesmos padrões e frameworks, mesmo entre aqueles que não fazem parte do Java EE (o Infinispan já era fornecido como parte do AS 6). É importante destacar que alguns dos recursos Java EE disponíveis no AS 7 não foram certificados, então pode haver questões de interoperabilidade com outros servidores de aplicações.
O AS 7, assim como o AS 6, traz alguns recursos do Java EE que vão além do Web Profile, por exemplo o suporte a JMS, JCA e JAX-RS, mas não inclui suporte a tecnologias "legadas" como EJB2 e JAX-RPC. Alguns administradores poderão sentir a falta dos MBeans de monitoração definidos pela JSR-77, que é outro recurso legado não incluso no AS 7.
O JBoss AS não é o único servidor de aplicações que seguiu a linha de se certificar apenas no Web Profile. Os servidores open source JOnAS e Resin também estão seguindo o mesmo caminho – sendo que o Resin já obteve a certificação, enquanto que o Geronimo busca a certificação completa para a versão 3.0 (ainda em desenvolvimento). E, é claro, o Glassfish, sendo a implementação de referência do Java EE 6 já está certificado no Full Profile.
No mundo proprietário, o Websphere da IBM já está certificado no Java EE 6 Full, enquanto que a Oracle prevê a certificação do WebLogic para o final de 2011.
AS 6 e 7, EAP e a Comunidade
O JBoss AS é o projeto open source que fornece a base de código para o JBoss EAP, que é o produto vendido pela Red Hat em regime de assinatura. O relacionamento é semelhante ao que existe entre o Fedora Linux e o RHEL. Mas não exatamente. Enquanto que o Fedora e o RHEL têm a maior parte do seu código importado de outras comunidades open source, por exemplo Apache HTTP, Samba, Firefox e PostgreSQL, muitos deles com seus próprios patrocinadores corporativos, ou mantidos por fundações independentes, a comunidade JBoss hoje controla a maior parte dos projetos open source que formam o AS, e a própria Red Hat é a principal patrocinadora da maioria deles.
Isto vem levando a alguns atritos entre a comunidade de usuários do JBoss AS e a empresa Red Hat. Um exemplo foi a reação da comunidade ao fato de o JBoss AS 6 ser certificado apenas no Web Profile. Outro foi a pressão da comunidade por um release 6.1, com correções de bugs sobre a implementação do Java EE 6, enquanto que a empresa preferiu dedicar seus recursos a acelerar o desenvolvimento do AS 7 e sua nova arquitetura. A empresa reabriu o desenvolvimento do AS 6 mas manteve seus funcionários focados no AS 7, de modo que ainda é incerto se haverá ou não um AS 6.1.
Obtenção e Aprendizado
O servidor de aplicações pode ser baixado trazendo apenas os recursos do Web Profile ou como um “preview” não-certificado do Java EE 6 Full. A diferença entre os dois é de apenas 6MB, mas é surpreendente a diferença de tamanho entre o AS 7 e o AS 6: 72MB contra 181MB. Para comparação, o AS 5.1 (que é a base do JBoss EAP suportado atualmente) tem 130MB.
A comunidade JBoss disponibiliza uma série de webinars em inglês sobre os novos recursos do JBoss AS 7 e sobre desenvolvimento para Java EE 6 (cujo conteúdo é útil também para usuários do JBoss AS 6 ou de outros servidores compatíveis).