【发布时间】:2014-12-27 11:12:12
【问题描述】:
我按照Weld documentation 的描述配置了 Jetty 9.2.5 + Weld 2.2.7(目前是最新版本)。
一切正常,除了 JNDI 查找 BeanManager。其他 JNDI 条目的查找按预期工作。我收到了错误(注意这不是javax.naming.NameNotFoundException)
javax.naming.NamingException: WELD-001300: Unable to locate BeanManager
我使用的代码:
BeanManager beanManager = null;
try {
final Context ctx = new InitialContext();
try {
// JNDI name defined by spec
beanManager = (BeanManager) ctx.lookup("java:comp/BeanManager");
} catch (NameNotFoundException nf1) {
try {
// JNDI name used by Tomcat and Jetty
beanManager = (BeanManager) ctx.lookup("java:comp/env/BeanManager");
} catch (NameNotFoundException nf2) {
}
}
} catch (NamingException ex) {
System.err.println(ex);
}
return beanManager;
完整的测试代码可以在https://github.com/rmuller/java8-examples/tree/master/jetty-maven-cdi找到
【问题讨论】:
-
您没有
env-entry的BeanManager -
是的,我有:github.com/rmuller/java8-examples/blob/master/jetty-maven-cdi/…(从 Weld 文档页面复制)
-
它在
web-overwrite-jetty.xml中(如文档中所述)。如果我把它移到web.xml,同样的问题仍然存在。但是请注意,我使用resource-env-ref而不是env-entry,它不能用于引用类型afaik。所以现在我迷路了:) -
我再次仔细检查了所有代码并进行了一些修改,因此请查看更新的 repo 以获取详细信息。现在应该没问题,但报告的问题仍然存在。