當我將EJB 3.1 bean注入到由@Inject創建的POJO中,然後注入工作。當我自己構建POJO時,它不會(Glassfish v3)。這是正確的行爲嗎?當CDI注入POJO應該工作? (GlassFish v3)
我的類(在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));
}
}
這不起作用:
@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();
}
}
_
這工程確定:
@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();
}
}
我使用NetBeans 7.0.1。
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
│ └───classes
│ .netbeans_automatic_build
│ .netbeans_update_resources
│
└───META-INF
MANIFEST.MF
解包耳結構:
│ CDITest-ejb.jar
│ CDITest-war.war
│
└───META-INF
MANIFEST.MF
未包裝的EJB模塊JAR結構:
├───META-INF
│ beans.xml
│ MANIFEST.MF
│
└───tries
MyPOJO.class
NewSingletonBean.class
NewSingletonBean2.class
它是正確的行爲?
我想你已經問了一下這個在評論你的前一個問題:http://stackoverflow.com/questions/8165482/cdi-inject-ejb-into-pojo-on-glassfish-v3 –
是的,但這是評論中的問題,所以不是完整的stackoverflow問題。 – zacheusz