Quando a injeção de CDI no POJO deve funcionar? (GlassFish v3)

Quando injetar beans EJB 3.1 no POJO criado por @Inject, a injeção funciona. Quando eu construo POJO sozinho, então não (Glassfish v3). É um comportamento correto?

Minhas aulas (no módulo EJB):

@Singleton @LocalBean @Startup @Named public class NewSingletonBean { @PostConstruct public void init(){ System.out.println("NewSingletonBean INIT"); } } 

_

 public class MyPOJO { @Inject NewSingletonBean newSingletonBean; public void sth(){ System.out.println("EJB injected into POJO: " + (newSingletonBean != null)); } } 

Isso não funciona :

 @Singleton @LocalBean @Startup @DependsOn(value="NewSingletonBean") public class NewSingletonBean2 { @Inject NewSingletonBean newSingletonBean; @PostConstruct public void init(){ System.out.println("NewSingletonBean2 INIT"); System.out.println("EJB injected into EJB: " + (newSingletonBean != null)); MyPOJO p = new MyPOJO(); p.sth(); } } 

_

E isso funciona bem :

 @Singleton @LocalBean @Startup @DependsOn(value="NewSingletonBean") public class NewSingletonBean2 { @Inject NewSingletonBean newSingletonBean; @Inject MyPOJO p; @PostConstruct public void init(){ System.out.println("NewSingletonBean2 INIT"); System.out.println("EJB injected into EJB: " + (newSingletonBean != null)); p.sth(); } } 

Estou usando o NetBeans 7.0.1.

estrutura de diretórios dist:

 │ CDITest.ear │ └───gfdeploy └───CDITest ├───CDITest-ejb_jar │ │ .netbeans_automatic_build │ │ .netbeans_update_resources │ │ │ ├───META-INF │ │ beans.xml │ │ MANIFEST.MF │ │ │ └───tries │ MyPOJO.class │ NewSingletonBean.class │ NewSingletonBean2.class │ ├───CDITest-war_war │ │ index.jsp │ │ │ ├───META-INF │ │ MANIFEST.MF │ │ │ └───WEB-INF │ └───classs │ .netbeans_automatic_build │ .netbeans_update_resources │ └───META-INF MANIFEST.MF 

Estrutura EAR desembalada:

 │ CDITest-ejb.jar │ CDITest-war.war │ └───META-INF MANIFEST.MF 

Estrutura do jar de módulo EJB descompactado:

 ├───META-INF │ beans.xml │ MANIFEST.MF │ └───tries MyPOJO.class NewSingletonBean.class NewSingletonBean2.class 

É um comportamento correto?

A parte seguinte pode ser uma resposta para sua pergunta:

De acordo com a especificação do CDI 1.0 :

3.7. Construtores de feijão

Quando o contêiner instancia uma class de bean, ele chama o construtor de bean . O construtor de bean é um construtor da class de bean.

O aplicativo pode chamar construtores de bean diretamente. No entanto, se o aplicativo diretamente instanciar o bean , nenhum parâmetro será passado para o construtor pelo contêiner; o object retornado não está vinculado a nenhum contexto; nenhuma dependência é injetada pelo contêiner ; e o ciclo de vida da nova instância não é gerenciado pelo contêiner.

HTH!

É um comportamento correto, porque o DI funciona apenas para beans gerenciados por contêineres, e não para aqueles que você criou sozinho.