JEE6 CDI (Injeção de dependência) de forma inderata, através de uma classe, é possível ?  XML
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Autor Mensagem
Lavieri
GUJ Master
[Avatar]

Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline

Gostaria de saber se é possivel fazer injeção de depencia em uma ambiente JEE de forma indireta....

algo como

1#

é possivel fazer isso? com o container CDI ?? ou a única forma é algo como


2#


Bom gostaria de conseguir fazer da forma 1#, tem como ?? (obs.: eu sei que da pra usar essa anotação em outro lugares como métodos, e etcs, mas gostaria mesmo era de fazer da forma 1#)


Obs.: eu sei que da pra fazer com spring, mas gostaria de fazer sem saber qual é a implementação do container do JEE

This message was edited 3 times. Last update was at 13/04/2010 22:24:50


Sun Certified Java Programmer (SCJP 6)

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999

Meu blog -> http://blog.tomazlavieri.com.br/
[ICQ]
Thiago Senna
GUJ Master
[Avatar]

Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline

Eu faço isso com o spring. Vou postar a solucao pra você pq a única área que fica específica é a classe de configuração, o resto aparentemente é indepente do seu container IoC. Mas antes de ver minha solução, vc pode ver o @Configurable do Spring e o Salve. Ambos são solucoes para este problema.

Segue código






no application context


exemplo de uso




This message was edited 4 times. Last update was at 14/04/2010 08:26:36

[Email]
Lavieri
GUJ Master
[Avatar]

Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline

ai fica a questão neste seu código... quem é ApplicationContext ??

vc só consegue pegar beans a partir dele... e ele não á parte do CDI ou é ?

não há essa interface (ou classe) no JEE

por favor posta o código com os imports ^^ preu ver meió

Sun Certified Java Programmer (SCJP 6)

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999

Meu blog -> http://blog.tomazlavieri.com.br/
[ICQ]
Thiago Senna
GUJ Master
[Avatar]

Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline

Lavieri wrote:ai fica a questão neste seu código... quem é ApplicationContext ??

Eu estou utilizando Spring. ApplicationContext é onde estão todos os beans gerenciados pelo spring.

Lavieri wrote:vc só consegue pegar beans a partir dele... e ele não á parte do CDI ou é ?
não há essa interface (ou classe) no JEE

ApplicationContext é especifico do spring, no entanto não é exposto em sua aplicacao. A unica classe que sua aplicacao precisa conhecer é a interface NResources. A implementacao de NResources é especifico para cada container de injecao de dependencias. Aqui no caso, vc está criando sua própria abstracao para separar seu sistema do do container ioc.

Lavieri wrote:por favor posta o código com os imports ^^ preu ver meió

Ok, eu editarei o posto anterior
[Email]
Leonardo3001
GUJ Ranger

Membro desde: 04/07/2007 18:28:58
Mensagens: 975
Offline

Aparentemente, não existe nada do gênero para se buscar "managed beans" programaticamente. Ou é via annotations ou XML, e nada mais. Também não tem um único ponto de declaração de dependências, como o applicationScope.xml do Spring ou o Module do Guice. Por causa disso, existem um monte de conceitos complicados por cima, como os decorators e observers.

Pra falar a verdade, se eu tenho a opção de escolher, coloco Spring ou Guice na frente de CDI. Justamente por oferecer um ponto único de configuração, e por ter meios de busca programática de beans.

Leonardo Veríssimo
-------------------------------------------------
Objectzilla
[WWW]
Lavieri
GUJ Master
[Avatar]

Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline

é para um framework... para rodar em um ambiente JEE6 .... não posso supor que estou trabalhando com spring ou algo do genero...


EU consegui fazer, + ou - .... funciona para a parte do CDI, mas não funciona bem de dentro dos EJBs / ManagedBeans ... ainda não entendi bem o pq





funciona bem.... quando estou fora do EJB



neste ponto funciona... lá na view quando coloco #{ha.bla} recebo o nome do Item de id = 10

porem c tento buscar o container dentro do EJB, levo null pointer na cara....

Acredito que a solução seja essa.... e que realmente, não posso injetar algo que não é @Stateless ou @Statefull dentro do EJB... pensei que podia, mas pelo visto não pode....

mas o meu maior problema, é que o @ManageBean também não aceita a injeção... =/

na verdade eu não consegui dar @Inject em nada dentro do ManagedBean




Sun Certified Java Programmer (SCJP 6)

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999

Meu blog -> http://blog.tomazlavieri.com.br/
[ICQ]
breno500as
Virtual Machine Man
[Avatar]
Membro desde: 11/10/2007 17:53:07
Mensagens: 614
Localização: Belo Horizonte - MG
Offline

Lavieri wrote: porem c tento buscar o container dentro do EJB, levo null pointer na cara....


Lavieri, li rapidamente sobre esta nova especificação e posso estar errado no que estou falando... Mas creio que este novo CDI não é suportado nem em EJBs nem em Entidades(@Entity), o que resulta no seu null... É suportado apenas nos "ManagedBeans" .. (classes java comuns) ...

Sun Certified Java Programmer 5.0
Sun Certified Web Component Developer 5.0
Sun Certified Business Component Developer 5.0
Lavieri
GUJ Master
[Avatar]

Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline

breno500as wrote:
Lavieri wrote: porem c tento buscar o container dentro do EJB, levo null pointer na cara....


Lavieri, li rapidamente sobre esta nova especificação e posso estar errado no que estou falando... Mas creio que este novo CDI não é suportado nem em EJBs nem em Entidades(@Entity), o que resulta no seu null... É suportado apenas nos "ManagedBeans" .. (classes java comuns) ...


O fato é que o contrario funciona...

realmente não consegui injetar dentro do EJB, algo que estava fora,

mas estando fora, consigo injetar qualquer coisa, inclusive EJBs

A minha vontade é conseguir integrar um Framework ao CDI, e deixar o CDI disponivel par ao framework, para tal esse container é o primeiro passo... nele eu estou conseguindo resgatar coisas do EJB.... agora falta conseguir registrar de forma programatica...

Sun Certified Java Programmer (SCJP 6)

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999

Meu blog -> http://blog.tomazlavieri.com.br/
[ICQ]
Lavieri
GUJ Master
[Avatar]

Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline

Resolvido o container... inclusive dentro dos EJB ... o @Inject funciona sim em todas as partes do container, dentro do CDI e dentro do EJB, foi só implementar Serializable que tudo passou a funcionar =x

Sun Certified Java Programmer (SCJP 6)

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999

Meu blog -> http://blog.tomazlavieri.com.br/
[ICQ]
robsonsx
Entusiasta Java
[Avatar]
Membro desde: 01/02/2005 11:44:54
Mensagens: 24
Localização: Salvador/BA
Offline

Lavieri,

Tudo bem? Este teu framework tá com código disponível?
Estou tb estudando as mesmas coisas que vc citou...

Robson Ximenes
------------------------------------------------
http://robsonximenes.com
[WWW]
 
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Ir para:   
Powered by JForum 2.1.8 © JForum Team