A Fundação Apache anunciou em final de abril a liberação do TomEE 1.0 final. O Apache TomEE (se pronuncia "Tommy") é a fusão do popular container web Tomcat com outros projetos Apache. O projeto é coordenado pela comunidade OpenEJB, resultando em um servidor de aplicações certificado no Java EE 6 Web Profile.
Em comparação com as versões beta disponibilizadas anteriormente, o TomEE 1.0 final tem um tempo de inicialização e consumo de memória bastante reduzidos, provavelmente os menores de qualquer servidor Java EE. As melhorias foram obtidas otimizando-se os classloaders e o processamento de anotações e TLDs (descritores para Tag Libraries do JSP). Aplicações reais como o Confluence e o Lift foram usadas para se determinar quais otimizações teriam o maior efeito.
Outras novidades da versão final incluem suporte ao Arquiliam e um plugin experimental para provisionamento direto de um repositório Maven.
TomEE versus Tomcat
A versão final do TomEE 1.0 é baseada no Tomcat 7.0.27, que entre outras coisas acrescentou ao container web suporte a WebSockets.
Um dos objetivos do projeto é que o TomEE pareça, para todos os propósitos práticos, ser apenas um servidor Tomcat contendo APIs adicionais. Uma instalação do Tomcat 7.0.x pode ser substituída por uma instalação do TomEE 1.0 sem afetar aplicações e scripts administrativos.
Assim sendo, o administrador de sistemas já sabe como instalar, iniciar e parar um servidor TomEE, e também como configurar coisas como domínios de segurança (Realms) e Datasources.
Já o desenvolvedor pode usar o suporte ao Tomcat presente nos IDEs Eclipse e NetBeans, não necessitando de um conector específico para o TomEE. É claro, o desenvolvedor deverá adicionar ao seu projeto no IDE as referências a APIs do Java EE não suportadas pelo Tomcat, por exemplo JSF, EJB e JPA. Mas não será necessário adicionar nenhum JAR ao projeto em si, muito menos ao pacote WAR gerado para deployment, pois eles já são parte do TomEE.
Edições do TomEE
o TomEE é na verdade a evolução do sub-projeto OpenEJB + Tomcat Integration da comunidade OpenEJB e substitui este projeto daqui em diante. Ele é fornecido em duas edições: o TomEE "simples" e o TomEE+ ("plus").
A edição "simples" é certificada no Java EE 6 Web Profile, mas ao contrário de outros servidores open source certificados neste padrão, não se limita a oferecer o EJB Lite. São suportados também EJBs com interfaces Remotas e pacotes EAR. E a clusterização não se limita a sessões HTTP, mas inclui também o estado de SFSBs.
Já a edição "plus" acrescenta um servidor JMS, serviços web JAX-WS e JAX-RS, e conectores JCA. Para a maioria dos desenvolvedores, ela oferece um servidor Java EE Full Profile, embora não tenha sido certificado como tal. A certificação não seria possível porque o TomEE+ não suporta funcionalidades legadas, por exemplo EJB 1 e 2, JAX-RPC e IIOP.
Componentes do TomEE
O TomEE reúne vários projetos da Apache Foundation, alguns dos quais já são bastante populares por si só, e também toma emprestado alguns componentes do Geronimo, outro servidor de aplicações mantido pela Fundação. Vale notar aqui que, embora o Geronimo 3.0 tenha sido certificado no Full Profile do Java EE 6, ele ainda é considerado beta pela sua comunidade.
Eis os principais componentes do TomEE "simples":
- OpenWebBeans (CDI)
- OpenEJB (EJB)
- OpenJPA (JPA)
- MyFaces (JSF)
- Geronimo Transaction (JTA)
- Geronimo JavaMail (Javamail)
- Apache Bean Validation (Bean Validation)
É claro, os interessados em utilizar outro provedor de persistência para o JPA, como o Hibernate, podem fazê-lo seguindo as normas do padrão Java EE. Já o uso de implementações alternativas para outras APIs, por exemplo o JSF, é mais complicado e não é recomendado pela comunidade.
O TomEE+ acrescenta:
- Apache CXF (JAX-WS, JAX-RS)
- Active MQ (JMS)
- Geronimo Connector (JCA)
O desenvolvedor encontra no site do projeto OpenEJB uma tabela indicando quais APIs são suportadas em cada edição do TomEE. Já o administrador irá apreciar a relação de arquivos acrescentados pelo TomEE em comparação com uma instalação do Tomcat 7.0.
TomEE em nuvem
As características do TomEE, especialmente a compatibilidade com o Tomcat e baixos requerimentos de memória e processador, o tornam bastante atrativo para ambientes de nuvem/cloud.
Uma feature do TomEE concebida especialmente para a nuvem é o arquivo de configuração scan.xml, que permite controle fino sobre quais pacotes JAR serão analisados em busca de anotações e TLDs. Também é possível configurar listas globais de pacotes JAR que não devem ser escaneados. Sem estas configurações, a inicialização de aplicações pode demorar demais, e a infraestrutura de nuvem pode abortar a instância, acreditando que está com problemas.
O TomEE já está, desde o beta, certificado para instâncias EC2 do Amazon AWS. Na verdade a infraestrutura do AWS foi utilizada para rodar o TCK do Java EE 6 Web Profile, trazendo assim duas certificações de uma tacada só.
Ainda não há planos para o suporte ao TomEE no Amazon Elastic Beanstalk, mas ele é bastante aguardado pela comunidade. Alguns usuários reportam sucesso na criação de imagens customizadas, transformando em um TomEE o Tomcat fornecido pelo serviço de nuvem.
Download e instalação
O TomEE pode ser baixado do site do projeto OpenEJB. Ambos os formatos zip e tar.gz fornecem scripts e arquivos bat para Windows, Mac, e Linux e outros Unixes. Ao contrário do que acontece para o Tomcat, não são fornecidos executáveis prontos para a instalação do TomEE como serviço do Windows, mas esta instalação pode ser feita manualmente usando-se os arquivos bat inclusos.
Também é possível baixar apenas os componentes do OpenEJB (e demais projetos), pré-empacotados em um único arquivo WAR, para acrescentar a uma instalação padrão do Tomcat. Neste caso, também será necessário editar o arquivo de configuação server.xml do Tomcat para acionar componentes do OpenEJB.
Conheça mais sobre o TomEE na sua página oficial de documentação.