O InfoQ.com ouviu Anil Gaur, vice-presidente de desenvolvimento da Oracle, sobre o suporte a cloud computing no Java EE 7, incluindo o cronograma geral do projeto, e novas APIs e ferramentas. A especificação do Java EE 7 (JSR 324) inclui suporte à computação em nuvem para apoiar o desenvolvedores de aplicações que sejam portáveis entre diferentes plataformas PaaS (plataforma como serviço) baseadas no Java EE. Serão fornecidas APIs para desenvolver aplicações baseadas em PaaS e dar suporte a múltiplos clientes (multi-tenancy). Outras características previstas são ajustes de capacidade sob demanda e o provisionamento automático de serviços.
Anil Gaur é responsável pelas equipes de desenvolvimento do Java EE e do Glassfish. Também liderou a entrega do SDK e da Plataforma do Java EE 6.
InfoQ: Quais são os principais componentes da especificação Java EE 7?
Anil: O Java EE 7, assim como as versões anteriores da especificação, fornece uma plataforma que atende às necessidades de uma vasta gama de aplicações corporativas. Ela é formada por modelos de programação, APIs e frameworks, sendo cada parte útil em seu respectivo domínio. Por exemplo, a Java Persistence API (JPA) fornece Mapeamento Objeto/Relacional; o JavaServer Faces (JSF) é um framework web baseado em componentes; e o JMS fornece mensageria corporativa. Outros são mais abrangentes, como o Bean Validation e o Contexts and Dependency Injection (CDI).
Todos esses componentes são integrados estreitamente dentro da especificação da Plataforma Java, que define um conjunto padronizado de contratos para instalação e execução, oferecendo uma experiência integrada para desenvolvimento de aplicações corporativas. No Java EE 7, estamos planejando adicionar alguns componentes novos, por exemplo JSON (JSR 353), WebSockets (JSR 356), Batch (JSR 352), Gerenciamento de Estado (State Management, JSR 350), JCache (JSR 107) e os Utilitários de Concorrência para o Java EE (JSR 236). Em resumo, fica visível que os desenvolvedores não dependem mais de frameworks proprietários para serem produtivos e construírem aplicações corporativas de alta qualidade.
InfoQ: Na conferência JavaOne 2011, a equipe da Oracle destacou o suporte à computação em nuvem no Java EE 7. Você poderia falar mais especificamente sobre a extensão do suporte à nuvem nesta versão?
Anil: Um dos principais elementos arquiteturais introduzido pela plataforma foi a abstração do container Java EE, que permite desacoplar o ambiente de execução de uma aplicação dos serviços necessários para ela. O próximo passo lógico é transformar o próprio Java EE em um serviço e tirar proveito de metadados das aplicações juntamente com a infraestrutura de deployment e os serviços do container, para simplificar o provisionamento e o gerenciamento da execução de aplicações de nuvem. Especificamente no Java EE 7, estamos formalizando os elementos de serviços da plataforma, de modo que usuários possam construir aplicações portáveis entre várias plataformas de PaaS compatíveis com o Java EE.
InfoQ: Qual o cronograma e previsão para a entrega final do Java EE 7?
Anil: Planejamos entregar a versão final do Java EE 7 no meio do primeiro semestre de 2013. Os primeiros rascunhos das especificações dos componentes já começaram a ser publicados, e outros estão por vir. A maioria das especificações deverá estar no estágio de Revisão Pública neste no meio deste ano.
Esta será a versão mais transparente do Java EE até hoje. Todas as JSRs lideradas pela Oracle serão desenvolvidas abertamente. Estamos estimulando os desenvolvedores a seguir o progresso das especificações e manifestar suas opiniões. Uma ótima maneira de se ambientar é visitar a página da especificação Java EE para obter mais informações sobre como participar.
InfoQ: Poderia nos falar sobre a infraestrutura de PaaS e os serviços voltados a aplicações, que fazem parte do Java EE 7?
Anil: Os fornecedores de produtos Java EE e os provedores de serviços de nuvem serão responsáveis pela infraestrutura. O usuário ou cliente verá apenas um serviço de nuvem sobre o qual aplicações Java EE podem ser instaladas e executadas, sem necessidade de configurar e operar o hardware e o software subjacentes. A aplicação descreve quais serviços adicionais necessita para funcionar (um servidor de bancos de dados ou de mensagens, por examplo), e o produto Java EE 7 rodando na nuvem provisiona automaticamente estes serviços para a aplicação.
InfoQ: Haverá uma API para o gerenciamento de serviços em nuvem, por exemplo início e término de instâncias de servidores, e para monitoração?
Anil: Estamos criando APIs e contratos que permitirão aos usuários pensar além de instâncias isoladas do servidor e seu ciclo de vida, passando a pensar em termos de serviços e SLAs (acordos de níveis de serviço). Certamente haverá necessidade dos usuários monitorarem aplicações; mas gerenciar o ciclo de vida de servidores de aplicações, bancos de dados e outros aspectos da infraestrutura de nuvem será responsabilidade do provedor de serviços de nuvem.
InfoQ: Que tipo de melhorias serão feitas sobre as especificações já existentes do Java EE, por exemplo JPA, Servlets, EJB e Web Services, para adequa-las à especificação de nuvem do Java EE 7?
Anil: A maioria das especificações do Java EE já são bem adequadas ao ambiente de serviços de nuvem. Temos várias novas funcionalidades interessantes nas JSRs individuais. Por exemplo, o JPA 2.1 irá trazer suporte ao isolamento de inquilinos, muitas melhorias sobre mapeamentos e consultas (incluindo suporte a procedimentos armazenados) e contextos de persistência não-sincronizados. A Servlets 3.1 será capaz de negociar conexões Web Sockets baseadas no NIO 2 do Java SE 7. A comunidade também está entusiasmada com os trabalhos do JMS 2.0; ela está realizando um grande esforço para tornar mais fácil do que nunca construir aplicações baseadas em mensageria. Estão sendo feitas melhorias incrementais sobre as JSRs existentes, mas o Java EE 7 também trará novas especificações.
Além disso, estamos planejando fornecer metadados para que aplicações possam descrever suas necessidades em relação a outros serviços da nuvem.
InfoQ: E sobre o suporte a outras APIs como REST e JAX-RS 2.0?
Anil: Estamos percebendo uma ampla adoção de aplicações no estilo REST usando JAX-RS. No JAX-RS 2.0, será fornecida uma API padrão de cliente e supote a hipermídia, entre outras coisas. Outra adição interessante é a capacidade de se utilizar a JSR Bean Validation em POJOs que são expostos como serviços REST via JAX-RS, deixando o JAX-RS ainda mais produtivo.
InfoQ: Como os novos padrões web, por exemplo HTML5 e Web Sockets, serão integrados na especificação?
Anil: Temos um grande investimento nesta área. Durante o JavaOne 2011 anunciamos o projeto Avatar, que é um guarda-chuva para projetos cujo alvo é garantir que Java continue sendo o ambiente mais produtivo para se construir aplicações HTML 5. Este trabalho está bem adiantado. Iniciamos os trabalhos sobre a JSR do Web Sockets para definir um modelo de programação para Web Sockets dentro da plataforma Java EE. Além disso, como mencionado anteriormente, também começamos a cuidar dos impactos sobre APIs existentes, como a API de Servlet.
InfoQ: Aspectos de sergurança são ainda mais importantes em soluções hospedadas em nuvem. Qual o suporte da especificação Java EE para segurança, nas áreas de autenticação, controle de acesso, auditoria e monitoramento?
Anil: O Java EE sempre ofereceu um modelo de segurança muito forte, mas há desafios únicos que surgem quando se desenvolve aplicações para a nuvem. A JSR 196 [Java Authentication Service Provider Interface for Containers - Interface de Serviço de Provedores de Segurança para Containers Java] foi bem longe ao oferecer plugabilidade, mas se os prazos permitirem esperamos tornar mais fácil o gerenciamento de chaves [de criptografia] dentro da plataforma Java EE, quando em ambiente de PaaS. Também estamos considerando quais metadados adicionais de segurança devem ser fornecidos por uma aplicação quando instalada em um ambiente de nuvem.
InfoQ: Como a modularidade ou o OSGi se encaixam neste modelo, em termos de provisionamento e de-provisionamento de aplicações na nuvem, assim como em termos de gerenciamento de dependência entre as aplicações?
Anil: A modularidade é obviamente uma parte importante de qualquer ambiente orientado a serviços, e podemos imaginar OSGi ou uma solução similar tendo um papel importante na implementação de um container Java EE 7. Isto é especialmente verdadeiro quando relacionado ao subsistema de provisionamento, para distribuição e fornecimento de bibliotecas Java. Estamos planejando, como parte do Java SE 8, que o projeto Jigsaw forneça a solução de modularidade para a plataforma Java, e esperamos que na versão 8 do Java EE a comunidade defina como esta modularidade será utilizada por aplicações e containers Java EE.
InfoQ: Como será o suporte de ferramentas em termos de codificação, teste (de desenvolvedor e de integração) e instalação de aplicações em nuvem?
Anil: Um dos problemas atuais dos fornecedores de ferramentas é a falta de um modelo padrão de desenvolvimento para sistemas PaaS. O Java EE traz alguns padrões muito necessários para a nuvem e oferecerá um alvo padrão para as ferramentas. À medida que o modelo de nuvem se tornar mais comum nas empresas, imaginamos que serão vistas mais ferramentas de desenvolvimento de licenciados do Java EE e da Oracle. O Java EE 7 deverá permitir aos fornecedores de ferramentas e ambientes de execução fornecer ferramentas completas para o ciclo de vida e infra-estrutura de suporte completa desde a depuração de código-fonte, passando pelo provisionamento de aplicações, até a promoção do teste para produção.