Injeção de Dependência EJB 3

2 respostas
MauNunes

Bom, estava conversando com um amigo meu aqui do trabalho e o mesmo me fez uma pergunta que não soube responder.

Eu tenho um EJB de exemplo da seguinte forma

@EJB
private ClienteComponent clienteComponent;

@EJB
private  EnderecoComponent enderecoService;

@Stateless(name = CadastroService.JNDI_NAME)
public class CadastroServiceBean implements CadastroService, CadastroServiceLocal {
  
    // implementação dos métodos de serviço.  
}

O que eu quero saber é o seguinte, os EJBs ClienteComponent e EnderecoComponent são injetados no momento do carregamento da classe ou somente quando são utilizados por um método ?
Pergunto isso porque se em um EJB eu tiver 10 dependencia, ele irá injetar todas as dependecias no carregamento da classe, mesmo que eu não use. Isso não ira consumir muita memória ?

2 Respostas

L

Os componentes não são injetados no carregamento da classe, são injetados após a instanciação do objeto (classe != objeto). Outra, quando o Session Bean é instanciado e depende de outros Session Beans, o que vai ser injetado não é o objeto Session Bean em si, mas um proxy dinâmico (bem mais leve) que “representa” o bean original.

Stateless Session Beans são armazenados em um pool de EJBs (parecido com o pool de Connections). Quando o EJB cliente chamar o método do EJB alvo, na verdade estará chamando o método do proxy. Este chamará pelo skeleton, que é um objeto que pedirá uma instância do bean real pro container, invocará o método real e devolverá a instância do bean pro container pra que seja usado numa próxima invocação. Ou seja, não há desperdício de memória porque há reaproveitamento de EJBs. Na realidade, haverá algumas dezenas de Stateless Session Beans instanciados e não há garantia que um cliente chame sempre o mesmo bean, mesmo que para o cliente pareça sempre estar referenciando o mesmo objeto.

Clareei ou confundi?

MauNunes
Olá Leonardo3001, tudo bom ?
O "classe", foi modo de dizer !

Acho que deu para entender, mais ou menos. O fato dos EJBs ficarem em um pool de conexões, eu entendi.  não entendi direito essas chamadas. Eu tenho um livro aqui de EJB, vou dar uma olhada e ve se acho alguma coisa. Mesmo assim, obrigado, deu para dar uma clareada.

Abraços

Olá Leonardo3001, tudo bom ?
O “classe”, foi modo de dizer !

Acho que deu para entender, mais ou menos. O fato dos EJBs ficarem em um pool de conexões, eu entendi. Só não entendi direito essas chamadas. Eu tenho um livro aqui de EJB, vou dar uma olhada e ve se acho alguma coisa. Mesmo assim, obrigado, deu para dar uma clareada.

Abraços

Criado 21 de janeiro de 2009
Ultima resposta 21 de jan. de 2009
Respostas 2
Participantes 2