我正在尝试一个关于JBOSS的非常简单的例子。
我有以下课程定义
import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.inject.Inject;
@Singleton
@Startup
public class PRCConnectionRunner {
@Inject
private PRCConfiguration prcConfiguration;
@PostConstruct
void printthing() {
System.out.println("HI");
System.out.println(prcConfiguration== null);
}
}
public class PRCConfiguration {
public String greet(String name) {
return "Hello, " + name + ".";
}
}
我在WEB-INF目录中定义了beans.xml,我将其打包为来自maven的战争。
然而,当我在JBOSS服务器上部署并启动它时,我确实打印了HI但是没有注入依赖项,因为我在null测试中得到了真的。 我究竟做错了什么? 我相信自从@PostConstruct方法被调用后,我错过了一些小细节。
答案 0 :(得分:1)
我解决了。问题是beans.xml存储在一个不正确的位置。
应始终将beans.xml用于Web应用程序。
src \ main \ webapp \ WEB-INF \ beans.xml
如果使用eclipse / jboss,快速方法是检查已部署的资源菜单是否填充了beans.xml。当我把它放在正确的位置时,jboss会自动更新已部署的资源菜单项。
答案 1 :(得分:0)
从CDI 1.1开始,并非每个类都由CDI上下文管理。您必须通过注释指定它,或将bean-discovery-mode="ALL"
放在beans.xml
中,然后在不应由CDI管理的类上使用@Vetoed
。默认值为bean-discovery-mode="ANNOTATED"
。
我的建议是使用适当的注释来注释你的类(取决于bean的生命周期)。
另请检查您的bean.xml文件是否位于.. \ webapp \ WEB-INF \ beans.xml
中