CDI和Web片段:没有beans.xml就无法工作

时间:2015-03-31 14:20:42

标签: cdi jboss-weld web-fragment

我有三个maven项目:

  • 核心(packagetype = JAR)与 src / main / resources / beans.xml bean-discovery-mode =“annotated”
  • 使用 src / main / resources / beans.xml bean-discovery-mode =“annotated”
  • webfragment (packagetype = JAR)
  • webproject (packagetype = WAR)与 src / main / webapp / WEB-INF / beans.xml bean-discovery-mode =“annotated”

我在我的类路径中有org.jboss.weld.servlet:weld-servlet 2.2.9.Final(CDI 1.2)并使用tomcat 7.0.55。此外,我使用Servlet 3,Deltaspike 1.2.1,Mojarra 2.2.10。

我的所有我的CDI bean都有一个 bean定义注释(参见Meaning of bean discovery mode annotated in CDI 1.1

Weld警告我

  

servletWeldServlet [WARN] WELD-ENV-001004:找到WEB-INF / beans.xml和WEB-INF / classes / META-INF / beans.xml。同时使用这两个位置是不可移植的。 Weld将使用jndi:/localhost/webproject/WEB-INF/beans.xml。

一切运作正常。

所以,我删除了所有beans.xml,因为我不需要它们与CDI 1.2,但之后什么都不用了: WELD-001408:不满意的依赖...

我错过了什么?这是一个网络碎片问题吗?

1 个答案:

答案 0 :(得分:0)

  

注入点[BackedAnnotatedMethod]或类似内容的未受干扰的依赖

显示分辨率失败的注入点,检查注入字段的类型是否已注释。

那是:

@Inject
private SomeService injectedService;

然后CDI1.2要求如果没有定义beans.xml,它将只扫描带注释的bean。

因此

@SessionScoped or 
{@ApplicationScoped, @Dependent, @RequestScoped, @ConversationScoped}
public class SomeService{}