Conheça as principais novidades no JavaEE 7
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:
//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()); } }
Também foi incluído o suporte a operações de update e delete em lote usando criteria, além de outras funcionalidades.
CDI 1.1 (JSR-346)
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{ ... }
JSF 2.2 (JSR-344)
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
JAX-RS 2.0 (JSR-339)
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.
JMS 2.0 (JSR-343)
JMS foi uma das especificações que mais sofreram alterações, removendo a maior parte do código desnecessário para enviar mensagens:
@Stateless public class EnviadorDeMensagens @Resource(lookup = "jms/connectionFactory") ConnectionFactory connectionFactory;
@Resource(lookup="jms/fila") Queue fila;
public void sendMessageNew (String msg) { try (JMSContext context = connectionFactory.createContext();){ context.send(fila,msg); } } }
Além de outras alterações e novas funcionalidades, como o suporte a Paas, melhorias nos Message Driven Beans e envio de mensagens com hora marcada.
Bean Validation 1.1 (JSR-349)
As anotações de validação agora podem ser utilizadas em parametros de métodos:
public void login (@NotNull String login, @NotNull String pass){ ... }
Componentes como ConstraintValidator
agora são integrados ao CDI, além de outras pequenas mudanças.
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?