Previsto para abril de 2013, a nova versão do JavaEE vem com atualizações para as principais especificações, além da adição de várias outras focadas em facilitar o desenvolvimento de aplicações para nuvem no modelo PAAS.
Vejamos as principais novidades:
JPA 2.1 (JSR-338) Agora a JPA irá suportar chamadas a procedures de maneira transparente, sem a necessidade de usar código específico de nenhuma implementação:
Autor(a)
mario.amaral
Inscreva-se em nossa Newsletter
Fique por dentro de conteúdos, insights e oportunidades do universo tech. Receba novidades e lançamentos direto no seu e-mail.
//prepara a procedure StoredProcedureQuery query = EntityManager.createStoredProcedureQuery("processaBoletos"); //registra os parametros da procedure query.registerStoredProcedureParameter(1, String.class, ParameterMode.OUT); //saída query.registerStoredProcedureParameter(2, Integer.class, ParameterMode.IN); //entrada query.setParameter(2, 001); //seta o parametro query.execute(); String resposta= query.getOutputParameterValue(1);
Podemos também invocar qualquer função que esteja disponível no banco de dados, através do novo comando FUNCTION da JPQL:
SELECT c FROM Cliente c WHERE FUNCTION(‘EhClienteEspecial’, c.id)
Os EntityListeners da JPA agora também estão integrados com o CDI, permitindo receber por injeção qualquer dependência usando o @Inject:
class PedidoListener{ @Inject private GeredorDeNumero gerador;
@PrePersist public void geraNumero (Object o){ Pedido p = (Pedido) o; P.setNumero(gerador.novoNumero()); } }
Apenas pequenas mudanças e melhorias serão incluídas nessa versão. Entre algumas das novidades esperadas estão permitir a ordenação de Interceptors e Decorators, uma API para criação de contextos personalizados, injeção de objetos estáticos e criação de eventos relacionados a API de Servlets, como inicio/fim de um HTTPServletRequest por exemplo.
EJB 3.2 (JSR-345) Aqui o foco é continuar facilitando cada vez mais a configuração e o uso de EJBs. Agora teremos suporte a transações dentro de callbacks do ciclo de vida dos beans:
@Stateful public class CarrinhoBean{ @PersistenceContext private EntityManager em;
@TransactionAttribute @PrePassivate public void armazenaNoBanco(){ // algum código transacional } ... }
As configurações sobre quais interfaces serão expostas nos beans também foram simplificadas:
public interface Agendador{} public interface Executador{} //todas as interfaces são locais @Stateless public class AgendadorBean implements Executador, Agendador{ ... }
//todas as interfaces são remotas @Remote @Stateless public class AgendadorBean implements Executador, Agendador{ ... }
Caso deseje que apenas uma das interfaces seja exposta, é só adicionar a anotação desejada:
@Remote public interface Agendador{}
//apenas a interface Agendador é exposta como remota @Stateless public class AgendadorBean implements Executador, Agendador{ ... }
Algumas features que antes só estavam disponíveis através do Seam3 agora fazem parte da especificação. Isso acontece com a tag viewAction e a possibilidade de receber injeção de dependências via CDI em qualquer componente do JSF, como Validator, Converters e até mesmo em componentes customizados.
Uma nova annotation@ViewScoped foi criada em substituição a atual para permitir integração do CDI com ManagedBeans neste escopo. E falando em escopos, o @FlowScoped foi adicionado para ajudar na criação de fluxos pré-definidos, como wizards, sequências de passos em algum fluxo de negócio, etc.
Além destas, ainda há uma integração melhor com HTML5, suporte a configuração programática, um novo componente para upload de arquivos usando ajax, e muitas outras, como é possível ver na lista de novidades no JSF 2.2
Agora com suporte a uma API de cliente, é possível implementar chamadas a um serviço rest de maneira portável entre os servidores sem a necessidade de bibliotecas externas:
Client client = ClientFactory.newClient();
//Dispara uma requisição GET para a url http://.../produtos?nome=Caneta Produto p = client.target("http://.../produtos") .queryParam("nome", "Caneta") .request().get(Produto.class);
Outras novidades são a integração com Bean Validation, suporte a requisições assíncronas tanto na API cliente quanto na servidor, filtros e interceptors.
Outras especificações foram adicionadas ao JavaEE, como JCACHE para gerenciamento de cache de objetos, Batch para execução de tarefas em lote, similar ao Spring Batch, JSON-P com as mesmas funcionalidades do JAX-B, mas para Json. Na lista completa de funcionalidades do JavaEE 7 você pode acompanhar todas as JSRs e conhecer mais sobre as novas especificações e evoluções da plataforma Java.
O que acha das novidades? O que você sente falta no desenvolvimento Java EE?