2014-04-26 36 views
2

我的問題與此處解釋的相同:JBoss7.1.3: @EJB works while @Inject fails 推測這甚至是相同的設置(Wildfly 8.0)。未能使用CDI注入log4j - WELD-001408:對於具有限定符的Logger類型的不滿意依賴關係@Default

儘管有生產者的資源類,我不能注入一個記錄器實例。控制器中的Neiter,也不在EJB中。 [問題1]糾正我,如果我錯了,我應該能夠將它們注入到@Model bean和用@Stateless(EJB)註釋的bean中,不是嗎?

package com.doe.webapp.service.auxilliary.cdiproducer; 

import javax.enterprise.context.Dependent; 
import javax.enterprise.context.RequestScoped; 
import javax.enterprise.inject.Produces; 
import javax.enterprise.inject.spi.InjectionPoint; 
import javax.faces.context.FacesContext; 
import org.apache.log4j.Logger; 

    @Dependent 
    public class Resources { 

     @Produces 
     public Logger produceLog(InjectionPoint injectionPoint) { 
      return Logger.getLogger(injectionPoint.getMember().getDeclaringClass().getName()); 
     } 

     @Produces 
     @RequestScoped 
     public FacesContext produceFacesContext() { 
      return FacesContext.getCurrentInstance(); 
     } 
    } 

這裏是我的控制器的開始:

package com.doe.webapp.controller.security; 

import java.io.IOException; 
import java.util.Map;  
import javax.annotation.PostConstruct; 
import javax.enterprise.inject.Model; 
import javax.enterprise.inject.Produces; 
import javax.faces.application.FacesMessage; 
import javax.faces.bean.ManagedProperty; 
import javax.faces.context.FacesContext; 
import javax.inject.Inject; 
import javax.inject.Named; 
import javax.servlet.ServletException; 
import javax.servlet.http.Cookie; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.validation.constraints.Pattern;  
import org.slf4j.Logger; 

import com.doe.webapp.model.usermgmt.User; 
import com.doe.webapp.service.security.LoginService; 

@Model 
public class LoginController { 

    private static final String ADMIN = "admin"; 

    @Inject 
    private Logger log; 

    @Inject 
    private FacesContext facesContext; 

    @Inject 
    private LoginService loginService; 

    [...] 

這裏是EJB,這也被注入在@Model註解的類。同樣的記錄器。前者工作時,Logger的注入會拋出先前解釋的錯誤。

package com.doe.webapp.service.security; 

import java.util.logging.Logger; 

import javax.ejb.Stateless; 
import javax.enterprise.event.Event; 
import javax.inject.Inject; 

import com.doe.webapp.data.UserRepository; 
import com.doe.webapp.model.usermgmt.User; 

@Stateless 
public class LoginService { 

    @Inject 
    private transient Logger log; 

    @Inject 
    private UserRepository repository; 

    @Inject 
    private Event<User> userEvent; 

    public User login(User user) { 
     log.info("login " + user.getUsername()); 
     User rUser = repository.findByCredentials(user.getUsername(), user.getPassword()); 
     return rUser; 
    } 
} 

現在,我得到一個錯誤的LoginController.java控制器。

WELD-001408: Unsatisfied dependencies for type Logger with qualifiers @Default 
    at injection point [BackedAnnotatedField] @Inject private com.doe.webapp.controller.security.LoginController.log 
    at com.doe.webapp.controller.security.LoginController.log(LoginController.java:0) 

另一個用於LoginService.java的Enterprise Bean。

WELD-001408: Unsatisfied dependencies for type Logger with qualifiers @Default 
    at injection point [BackedAnnotatedField] @Inject private transient com.doe.webapp.service.security.LoginService.log 
    at com.doe.webapp.service.security.LoginService.log(LoginService.java:0) 

[問題2]:我不知道這個注射失敗,WELD-001408錯誤。

回答

6

我沒有Wildfly/JBoss的環境權利,但一個可能的錯誤:

LoginService進口,並希望注入以下:

import java.util.logging.Logger; 

... 

@Inject 
private transient Logger log; 

LoginController嘗試使用SLF4J:

import org.slf4j.Logger; 

... 

@Inject 
private Logger log; 

雖然Resources類使用第三種類型Logger

import org.apache.log4j.Logger; 
+0

謝謝,這解決了EJB(LoginService.java)的異常! (如果我可以upvote,我會的!)。現在,ManagedBean(LoginController.java)與以前一樣留下了異常:'WELD-001408:具有限定符的類型記錄器的不滿意依賴關係@Default 處於注入點[BackedAnnotatedField] @Inject private com.doe.webapp.controller.security。 LoginController.log at com.doe.webapp.controller.security.LoginController.log(LoginController.java:0)' – feder

+0

@feder:您確定您在所有這三個地方都更改了導入嗎? – palacsint

+1

你說得對。一個指向'org.apache.log4j.Logger',另一個指向'org.log4j.Logger'。猜到了! – feder

相關問題