3

デフォルトの Java ロガーを注入したかったのです。ただし、Eclipse は下線を引き、「インジェクション ポイントへのインジェクションに適格な Bean はありません [JSR-299 §5.2.1]」と述べています。

とにかくデプロイすると、次の例外がスローされます。Java Logger の注入に失敗するのはなぜですか? EntityManager についても同じですが、自分の UserRepository Bean についてはそうではありません。

org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [Logger] with qualifiers [@Default] at injection point [[field] 

コード:

import java.util.logging.Logger;

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

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


// The @Stateless annotation eliminates the need for manual transaction demarcation
@Stateless
public class LoginService {

    @Inject
    private Logger log;

    @Inject
    private EntityManager em;

    @Inject
    private UserRepository repository;

    public User login(User user) {
        log.info("login " + user.getUsername());

        User rUser = repository.findByCredentials(user.getUsername(), user.getPassword());
        return rUser;
    }
}
4

1 に答える 1

7

Loggerロガーを注入するには、注入できるを提供するプロデューサー メソッドが必要です。

  import java.util.logging.Logger;   

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

  public class LoggerProduer {   

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

のデータを使用して作成されるため、使用EntityManagerして注入する必要があります。@PersistenceContext(unitName="pscontext")persistence.xmlEntityManager

   @PersistenceContex(unitName="pscontext")
   private EntityManager em;
于 2013-11-04T20:46:40.637 に答える