WELD-001408不满意的依赖关系 - 无法找到根本原因

时间:2014-11-19 11:46:22

标签: java jsf java-ee cdi

我无法将Logger注入CDI bean。我从其他类似问题的答案中尝试了解决方案但没有任何帮助。如果你能帮助我找到这里发生的事情,我将非常感激。

我正在使用Glassfish 4.0。

尝试部署应用程序时来自Eclipse的错误消息:

deploy is failing=Error occurred during deployment: Exception while loading the app : CDI deployment failure:WELD-001408 Unsatisfied dependencies for type [Logger] with qualifiers [@Default] at injection point [[BackedAnnotatedField] @Inject protected learning.javaee.guestbook.UnregisteredUserPost.log]. Please see server.log for more details.

包含注入点的CDI bean:

package learning.javaee.guestbook;

import java.time.OffsetDateTime;
import java.util.logging.Logger;

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;

@Named
@RequestScoped
public class UnregisteredUserPost extends AbstractPost {
    private String name;
    private OffsetDateTime dateTime;

    @Inject
    protected Logger log;

    public UnregisteredUserPost() {}

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public OffsetDateTime getDateTime() {
        return dateTime;
    }
    public void setDateTime(OffsetDateTime dateTime) {
        this.dateTime = dateTime;
    }
    public void save() {
        log.info("TEST");
    }
}

记录器制作人:

package learning.javaee.guestbook;

import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.InjectionPoint;

import org.jboss.logging.Logger;

public class LoggerProducer {
    @Produces
    public Logger produceLogger(InjectionPoint ip) {
        return Logger.getLogger(ip.getMember().getDeclaringClass().getName());
    }
}

guestbook.xhtml - 调用正在使用Logger实例的CDI bean的方法save()

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html">
  <h:head>
    <title>#{msg.page_title}</title>
    <link rel="stylesheet" type="text/css" href="css.css"/>
  </h:head>
  <h:body>
    <h:form>
        <h:outputText value="#{msg.your_name}&#160;"/>
        <h:inputText value="#{unregisteredUserPost.name}"/>
        <br/><br/>
        <h:outputText value="#{msg.your_msg}"/>
        <br/>
        <h:inputTextarea 
            rows="5" cols="100" value="#{unregisteredUserPost.content}"/>
        <br/><br/>
        <h:commandButton 
            value="#{msg.submit}" action="#{unregisteredUserPost.save()}"/>
    </h:form>
  </h:body>
</html>

的WebContent \ WEB-INF \ beans.xml中

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
                           http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
       version="1.1" bean-discovery-mode="all">
</beans>

1 个答案:

答案 0 :(得分:2)

有时使生成器类@Dependent作用域使其工作。但我不确定。在你的情况下,你有“bean-discovery-mode = all”所以它不会产生任何不同。

但在你的情况下,你的进口有误。

您的制作人生成“导入组织。 jboss.logging .Logger;”并且注入的字段是java.util.logging。记录器。所以你没有适合你想要注入的de type类的生产者。