9.28.2017

O Lookup no Java EE 6 

É mais simples, podemos utilizar injeção de dependência e é compatível com as implementações anteriores.
Existe mais de uma maneira de fazê-lo, e aqui tentaremos abordar uma forma considerada boa prática.
Para saber mais sobre o assunto, pesquise por Portable global JNDI name que foi introduzido no Java EE 6 

A imagem abaixo demonstra como é possível fazer o lookup direto e o equivalente utilizando a injeção de dependência.

Importante: Esta é uma forma simples, porém em uma aplicação corporativa não é uma boa prática.

Não deve fazer, segundo as boas práticas de estratégia de implementação.

Mas quais são os problemas desta abordagem?
 
Existem alguns problemas relacionados à portabilidade, e uma limitação em termos de nomes. O lookup JNDI, é possível saber mais detalhes sobre o assunto, no wesbite do Java .

Nas versões mais antigas do Java EE, é possível minimizar este problema adicionando nomes lógicos nos descritores, deployment plan e fazendo lookup utilizando java:comp/env.

No Java EE 6 não é muito diferente, porém existem algumas facilidades:
 
1) Não é necessário adicionar itens aos descritores da aplicação (web.xml e ejb-jar.xml)
2) Alguns lookups são possíveis sem nenhum descritor, outros com apenas o deployment plan.

Abaixo é demonstrado como é feito um lookup a base de dados utilizando os recursos do Java EE 6:
(boa prática)


Em uma aplicação web, o @Resource é o responsável por colocar as informações, as quais você teria que colocar no web.xml

O Deployment plan, continua sendo o mesmo arquivo com o mapeamento entre os nomes lógicos e os nomes físicos. Como varias informações são fornecidas com o uso de annotations, este arquivo acaba sendo um pouco mais enxuto. 

Lookups de EJBs no Java EE 6:

 
Nos casos dos EJBs tem uma diferença, que melhorou no meu ponto de visão. Em lookups locais não é necessário nenhum tipo de descritor. No caso de lookups remotos apenas é necessário o deployment plan para fazer o mapeamento.

Outra diferença é que ficou mais simples de fazer o lookup, bem como é possível utilizar a injeção de dependência:

Object result = context.lookup(CepRepositoryBeanLocal.class.getName());
CepRepositoryBeanLocal service = (CepRepositoryBeanLocal) result;


E o código acima pode ser trocado por

 
@EJB CepRepositoryBeanLocal service;

Utilizando o @EJB, o container irá cuidar de prover uma implementação de CepRepositoryBean para a interface de negócio CepRepositoryBeanLocal.



Download dos exemplos:
Ambiente: JDK 1.6.24, JBoss 6.0, Eclipse 3.6

No comments: