Novidades do EJB 3.1 do futuro Java EE 6
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.