2014-11-19 4 views
0

Я не могу ввести регистратор в CDI-компонент. Я пробовал решения от ответов на другие подобные вопросы, но никто не помог. Я буду очень признателен, если вы поможете мне найти, что здесь происходит.WELD-001408 Неудовлетворенные зависимости - не удается найти основную причину

Я использую 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 боб точка, содержащая инъекции: производитель

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"); 
    } 
} 

Logger:

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 - вызывает метод CDI бина save(), который использует экземпляр Logger

<?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> 

ответ

2

Иногда делает класс производителя @Dependent scoped заставляет его работать. Но я не уверен. И в вашем случае у вас есть «bean-discovery-mode = all», поэтому он не делает различий.

Но в вашем случае у вас есть ошибка в вашем импорте.

Ваш производитель производит «импортную организацию» jboss.logging .Logger; " и введенное поле - java.util.logging .Logger. Таким образом, у вас нет подходящего продюсера для класса типа, который вы хотели бы ввести.

+0

Вы правы! Это решает проблему! Спасибо, что заметили эту ошибку. – infranoise

Смежные вопросы