Hospedagem Profissional

Hospedagem Profissional
Clique aqui e ganhe US$ 10,00 para testar durante 1 mês a melhor hospedagem: Digital Ocean!

quarta-feira, 13 de março de 2013

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.

Screen Shot 2013-03-11 at 7.03.58 PM

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.

Fonte: Mário Amaral - Caelum