Novidades do EJB 3.1 do futuro Java EE 6

Novidades do EJB 3.1 do futuro Java EE 6
steppat
steppat

Compartilhe

A especificação EJB 3.0 já está no mercado há quase 2 anos e simplificou bastante o desenvolvimento. O uso de anotações (XML opcional) e POJOs/POJIs são as características principais. EJB 3.0 faz parte da Java EE 5.

Ainda esse ano deve sair o Java EE 6 e, com ele, também uma atualização da especificação do EJB. Vamos ver quais são as novidades/melhorias propostas atualmente no rascunho do EJB 3.1:

Facilidades no desenvolvimento

Banner promocional da Alura, com chamada para um evento ao vivo no dia 12 de fevereiro às 18h30, com os dizeres

1) Interfaces locais são opcionais.

Um session bean local pode ficar simples assim:

 @Stateless public class PedidoDAO {

public void cadastra(Pedido pedido) { //código para cadastrar um pedido } } 

Não precisa mais da interface e da anotação @Local.

2) EJB's dentro do war

Será possivel colocar um EJB3 num war, facilitando o packaging. Não é preciso criar um jar e ear separado, tudo pode ser dentro de um unico war. As classes ficam na pasta WEB-INF/classes, e se for usado um ejb-jar.xml, se encontra na pasta WEB-INF.

Novidades

1) Singleton Beans

A ideia é que você pode criar session beans que só existem uma única vez na sua aplicação. Assim é possível criar objetos como o ServletContext na aplicação web. Por exemplo:

 @Singleton @ReadOnly public class ApplicationContextBean implements ApplicationContext {

@PostConstruct public void init() { //initializa o contexto da aplicação }

//métodos, por exemplo getAttribute(String chave) } 

Repare a anotação @ReadOnly, declarando o EJB imutável. Também vai existir uma anotação @ReadWrite para singletons beans que podem ser alterados.

O método init() será executado quando o container inicializa a aplicação. Singleton components também serão EJBs e podem ser injetados, o que é uma grande vantagem em relação a ter de ficar preso ao método estático de lookup de um singleton, e uma boa prática de inversão de controle.

2) EJB Timer

Terá uma nova anotação @Schedule referente ao EJB timer para facilitar o agendamento. Por exemplo:

 //... @Schedule(hour=”13”, dayOfMonth=”1”) public void geraRelatorio() {/\* .... \*/} //... 

executa cada primeiro dia no mes as 13 horas. É um modelo bem superior aos atuais timers do EJB, porém ainda não tão completo quanto aos frameworks open source existentes, como o Quartz.

3) Chamadas assíncronas

Parecidos com Web Services, métodos num session beans também podem ser chamados assincronamente. Para isto serve a anotação @Asynchronous:

 @Stateless @Remote(PedidoFacade.class) public class PedidoFacadeBean implements PedidoFacade{

@Asynchronous public void cadastra(Pedido pedido) { //código para cadastrar um pedido }

@Asynchronous public Future autoriza(Pedido pedido) { //autoriza demora ..... } } 

O segundo método devolve um object do tipo java.util.concurrent.Future que fornece métodos para verificar se o resultado já chegou.

O lançamento da versão 3.1, que teoricamente ocorrerá até o fim deste ano, deve acelerar ainda mais a adoção da plataforma Java EE 5/6 em relação ao uso das versões antigas J2EE.

Veja outros artigos sobre Programação