Jakarta ee JBoss和CDI生产者

Jakarta ee JBoss和CDI生产者,jakarta-ee,jboss,cdi,Jakarta Ee,Jboss,Cdi,我在使用一个制作人制作一个记录器时遇到了JBoss AS7/JEE 6的问题,这个记录器可以与WildFly和JEE 7配合使用 我创建了一个限定符: @Qualifier @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.METHOD}) public @interface BpeLogger { } 制作人阶层: public class LoggerProducer{ @Produc

我在使用一个制作人制作一个记录器时遇到了JBoss AS7/JEE 6的问题,这个记录器可以与WildFly和JEE 7配合使用

我创建了一个限定符:

@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD})
public @interface BpeLogger {
}
制作人阶层:

public class LoggerProducer{
  @Produces
  @BpeLogger
  public Logger produceLogger(InjectionPoint injectionPoint) {
    return LoggerFactory.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
  }
}
现在我正尝试将记录器注入另一个CDIBean中:

  @Inject
  @BpeLogger
  private Logger logger;
部署失败,出现以下异常:

org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [Logger] with qualifiers [@BpeLogger] at injection point [[field] @Inject @BpeLogger private de.ulc.bpe.web.process.Domino.logger]

这里怎么了?

确保META-INF文件夹中有一个beans.xml文件

您还可以尝试将LoggerProducer类直接注释为CDIBean。例如,添加@Named注释,并可能添加合适的范围。在你的情况下,@Singleton可能会做得很好

@Named
public class LoggerProducer{
  @Produces
  @BpeLogger
  public Logger produceLogger(InjectionPoint injectionPoint) {
    return LoggerFactory.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
  }
}

您有beans.xml文件吗?它在JavaEE6中是必需的,但在JavaEE7中是可选的。您是在JBossAS7上运行还是在WildFly上运行?你的问题不清楚。愚蠢的问题:你不是混合了两个不同的记录器类j.u.l和slf4j吗?它适用于Wildfly,但不适用于JBoss AS 7。@XavierDury它是slf4j…你认为为什么会有混合?