Pular para o conteúdo principal

Injeção de dependências em Java EE usando @Inject, @EJB e @Resource ?

Olá pessoal, hoje iremos analisar o uso das annotations @Inject, @EJB @Resource, na injeção de componentes gerenciados.

Componentes Gerenciados 


Componentes gerenciados são objetos que possuem seu ciclo de vida gerenciado por um ambiente, ou seja, nos desenvolvedores não temos que se preocupar com lógicas de criação, infraestrutura e destruição dos objetos.

Na plataforma Java, é muito comum o trabalho com objetos gerenciados, um exemplo são os famosos EJBs, estes objetos possuem seu ciclo de vida controlado pelo Contêiner Java EE, os EJBs possuem uma infraestrutura complexa, com Segurança, Acesso Distribuído, Thread Safe, Transações, entre outras funcionalidades.

Além dos EJBs, temos vários outros objetos e componentes que são gerenciados pelo Contêiner, vamos listar alguns exemplos:

  • JMS:  A trabalhar com fila de mensagens em um ambiente Java EE, temos a fila disponibiliza e gerenciada pelo Contêiner, e nós somos responsáveis por criar os produtores e consumidores de mensagens;
  • CDI: Uma das grandes novidades do Java EE 6 com certeza foi o CDI (Context Dependency Injection), antes para ter um objeto gerenciado, tínhamos que criar um EJB, mas não é sempre que precisamos de um objeto tão robusto, a momentos que precisamos criar um simples POJO, que terá seu ciclo de vida gerenciado, e irá ser associado em algum escopo como: Request, Session ou Application;
  • DataSource: Um DataSource é um exemplo de componente gerenciado que acompanha o Java EE há muito tempo, é uma forma de criamos uma conexão com uma fonte de dados e deixar o Contêiner gerenciar a abertura e fechamento das conexões, muito comum em aplicações que usam persistência através de JDBC.

Injeção de Dependência


Uma dependência é quando um objeto precisa de outro para existir, ou seja, precisa de outro para funcionar e executar uma funcionalidade.

Mas como podemos injetar uma dependência dentro das nossas classes ?


De várias formas, mas cada uma delas pode deixar o código com alto ou baixo acoplamento, para seguir as boas práticas de Orientação a Objetos, uma boa classe deve focar na alta coesão e baixo acoplamento.

Onde entra a Injeção de Dependência ? 


 A Injeção de Dependência é uma forma de Inversão de Controle que visa deixar sua classe desacopladas de suas dependências, ou seja, ao invés de criar explicitamente o objeto ou chamar uma Factory, ela apenas recebe as dependências já inicializadas e prontas para o uso.

Injeção de Objetos Gerenciados


Quando utilizar @Inject ?


A annotation @Inject pode ser usada para os seguintes tipos de objetos:
  • POJO (CDI);
  • EJBs (@Local, @LocalBean e no-interface EJB);
  • Aplicações rodando em Contêiner Web Profile.
Exemplo do uso de @Inject para injetar um POJO gerenciado.

Mesmo os EJBs tendo sua própria annotation de injeção, nos casos acima, podemos usar o @Inject, visando deixar o código mais simples e de fácil migração entre POJO e EJB.

Quando utilizar @EJB ?


annotation @EJB pode ser usada para os seguintes tipos de objetos:
  • EJBs (@Local, @LocalBean e no-interface EJB);
  • EJBs (@Remote).
Exemplo do uso de @EJB para injetar um EJB Remote ou Local.

Esta annotation diferente do @Inject é de uso exclusivo de EJBs, não sendo válido o uso com POJO gerenciados.

Quando utilizar @Resource ?


A annotation @Resource é utilizada para objetos que não se enquadram nos itens anteriores, vamos analisar alguns exemplos:
  • DataSource (Conexão com fonte de dados);
  • SessionContext (Contexto de execução dos EJBs);
  • MessageDrivenContext (Contexto de execução dos MDBs);
  • UserTransaction (Manipular transações de EJBs com tipo BMT);
  • JMS (Manipular filas Queue ou Topic).
Exemplo do uso de @Resource para injetar recursos gerenciados.

Há ainda várias outras aplicações para a annotation @Resource, ela pode também injetar referências para EJBs, Sessões de envio de e-mails, e valores de entrada de ambiente, entre outras coisas, ela é sem dúvida uma das mais importantes da plataforma Java EE.

Agora sabemos como, onde, e quando, aplicar as principais annotations da Plataforma Java EE.

Até a próxima.

Comentários

Postagens mais visitadas deste blog

Utilizando LocalDate, LocalDateTime e LocalTime na Prática

Tudo bem pessoal, hoje iremos avaliar e analisar operações de manipulação de Datas envolvendo a JavaTime API introduzida no Java 8.

Exemplos da java.time API
Já se passaram alguns anos desde o lançamento do Java 8 e mesmo após este período, há empresas que desconhecem o poder da java.time API, esta foi uma nova API de datas introduzida no Java 8 visando resolver problemas que tínhamos com as velhas classes Date e Calendar.

Vamos mostrar vários exemplos práticos do uso da API:
Criação de objetos No exemplo abaixo, estamos criando os objetos para manipulação de datas, perceba que temos 3 tipos, sendo LocalDate para manipular datas, LocalDateTime para manipular data/hora e LocalTime para horas:
LocalDate localDate = LocalDate.now(); LocalDateTime localDateTime = LocalDateTime.now(); LocalTime localTime = LocalTime.now();
Utilizando formatação Aqui realizamos a operação de formatação, perceba que não foi necessário utilizar a classe SimpleDateFormat, que usaríamos em conjunto com D…

Lendo e Manipulando arquivos CSV com Java

Olá hoje veremos como realizar a leitura e manipulação de arquivos CSV com Java, mostrando que as novas versões da plataforma Java deixaram algumas tarefas simples de serem realizadas.

Exemplo de Arquivo Hoje em dia é comum ao realizar integrações ou carga de dados o uso de arquivos CSV, isto porque, este arquivo possui uma estrutura de fácil entendimento e simples de manipular na maioria das plataformas de desenvolvimento.

Para realizar a leitura dos dados vamos manipular um arquivo com as seguintes colunas: namecpfagephone address:

name;cpf;age;phone;address caio;123456789;20;1145223643;AvenidaPaulista vinicius;147852369;18;1125253625;AvenidaManoel sandra;963258741;30;1174587858;RuaTeixeira regina;125478522;40;1145254536;RuaFernando fernando;785245563;42;1145253669;RuaPereira augusto;456123014;50;1125363633;AvenidaPaulinia maria;456123789;10;1125455525;AvenidaNossaSenhora
Para representar os dados em objetos Java iremos utilizar a seguinte classe:

importlombok.AllArgsConstruc…

Versionamento de Banco Dados com Flyway

Olá pessoal, hoje iremos analisar e aprender como realizar o versionamento e gerenciamento das bases de dados relacionais utilizando o framework Flyway.

Versionamento de Banco Dados Ao trabalhar com desenvolvimento de sistemas é comum realizarmos o versionamento, isso porque uma aplicação pode necessitar de correções, novas funcionalidades e evoluções, onde para garantir a compatibilidade e cuidar do seu ciclo de vida, geramos versões onde é especificado quais itens estão presentes em cada release.
Vamos imaginar seguinte cenário: Sistema ERP1.0.0: Entrega dos módulos Financeiro e RH;1.1.0: Entrega do módulo Contas a Receber. Perceba que a ideia é controlar o que cada versão possui de diferente, e para controlar essas mudanças no lado da aplicação existem várias técnicas e ferramentas, mas e para controlar as mudanças no lado do Banco de dados ? 
Para isso podemos utilizar ferramentas de versionamento que ajudam a realizar este controle, a ferramenta que iremos utilizar é o Flyway.
Con…