CDI em Enum (Singleton)

9 respostas
palerique

E aew gente, na paz???

Cai na bobeira de criar um singleton utilizando um Enum (Java Efetivo) e agora estou com dificuldade de injetar um EntityManager, tem relação?

Como faço para injetar o EntityManager no enum utilizando o CDI??? Tem como???

Além disso esse enum é um repositório, bem longe do managed bean!!!

managedBean -> service -> repo -> dao

Tem como utilizar CDI nessa arquitetura? Como eu faço???

Thx,
PH

9 Respostas

Hebert_Coelho

Desculpe, mas isso seria o pior pattern possível (assim penso eu).

Enum não foi feito para essas coisas.

Use uma classe, um EJB ou qualquer outra coisa…

Java Efetivo é um livro bom, mas ele trata mundo JSE no caso desse singleton, alguma coisas desse livro devem ser beeeeeem analisadas antes de serem implementadas.

palerique

Mas tem como utilizar?

Tem jeito com o Enum?

Hebert_Coelho

palerique:
Mas tem como utilizar?

Tem jeito com o Enum?

Nunca vi ou ouvi falar disso. Sorry.

Raphael_Lacerda

na real nao entendi a do Enum

Hebert_Coelho

Raphael Lacerda:
na real nao entendi a do Enum
Esse livo Effective Java faz um exemplo de Singleton utilizando enum.

Ele mostra que é uma boa usar enum para isso, mas eu não vejo por que utiliza-lo como factory de entity managed.

palerique

:smiley: :smiley: :smiley: :smiley:

Ou Rapha, o Joshua explica que melhor forma de se fazer singleton, para garantir de fato uma única instância é utilizando enum!

Mas me rendi a outra possibilidade, agora vou gastar a memória à vontade!

Se for pensar direitinho foge totalmente do propósito de um enum utilizá-lo como singleton por causa de suas características.

Mas, para efeito de conhecimento, se alguém souber como se faz e quiser postar eu agradeço.!

Valeu people!

Hebert_Coelho

palerique:
:smiley: :smiley: :smiley: :smiley:

Ou Rapha, o Joshua explica que melhor forma de se fazer singleton, para garantir de fato uma única instância é utilizando enum!

Mas me rendi a outra possibilidade, agora vou gastar a memória à vontade!

Se for pensar direitinho foge totalmente do propósito de um enum utilizá-lo como singleton por causa de suas características.

Mas, para efeito de conhecimento, se alguém souber como se faz e quiser postar eu agradeço.!

Valeu people!

Pois é. Hoje você pode usar o @Singleton do EJB, ou o Singleton do Spring e assim vai.

Se não for por conhecimento apenas, não vale a pena. Boa sorte ae.

Raphael_Lacerda

Melhor forma mesmo é usar IoC e delegar a responsabilidade de manter isso pro Container!
@Singleton como já foi citado!

Engraçado, li o livro do Joshua e não lembro dessa parte de Enum com Singleton! Vou até reler aqui!

abraços

sergiotaborda

palerique:
:smiley: :smiley: :smiley: :smiley:

Ou Rapha, o Joshua explica que melhor forma de se fazer singleton, para garantir de fato uma única instância é utilizando enum!

Mas me rendi a outra possibilidade, agora vou gastar a memória à vontade!

Se for pensar direitinho foge totalmente do propósito de um enum utilizá-lo como singleton por causa de suas características.

Não, não foge. O Efective Java explica exatamente por quê. A sua decisão não foi errada, vc só esqueceu que em JEE certas coisas não valem, e signleton é uma delas. O seu problema foi querer usar Singeton e não o ter usado enum para isso ( foi um problema conceptual, não de implementação.
Hoje em dia vc pode usar um EJB @Singleton , mas teria que usar JEE 6 e não sei de é isso que vc quer.

O managedbean pode ser qualquer coisa se não precisa se preocupar se é singleton ou não. Deixe o container se preocupar com isso.

Criado 6 de dezembro de 2012
Ultima resposta 7 de dez. de 2012
Respostas 9
Participantes 4