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

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