【问题标题】:@Inject Logger (CDI) in EJB with jBoss@Inject Logger (CDI) 在 EJB 中与 jBoss
【发布时间】:2015-01-23 14:49:50
【问题描述】:

我正在尝试将我的 Logger 注入到我的 EJB 中:

@Inject
Logger logger;

但我收到以下错误

Caused by: org.jboss.weld.exceptions.AmbiguousResolutionException: WELD-001318 Cannot resolve an ambiguous dependency between 
[Producer Method [Logger] with qualifiers [@Any @Default] declared as [[method] @Produces public be.fgov.health.ecad.Resource.createLogger(InjectionPoint)], 
Producer Method [Logger] with qualifiers [@Any @Default] declared as [[method] @Produces public be.fgov.health.ecad.Resource.createLogger(InjectionPoint)]]

我真的不知道这可能是什么?在我看来,下面的课程没有错吗?我不明白为什么 jBoss 说存在不明确的依赖关系..

@Dependent
public class Resource {

    @Produces
    public Logger createLogger(final InjectionPoint ip) {
        return Logger.getLogger(ip.getMember().getDeclaringClass());
    }

}

【问题讨论】:

  • 可能be.fgov.health.ecad.Resource这个类是由不同的部署应用提供的。
  • 嗯..不。将其更改为荒谬的名称,仍然有错误。
  • 您是否还有 AmbiguousResolutionException 但现在有两个不同的类名?
  • 你应该检查你的类路径。如果 be.fgov.health.ecad.Resource 类仍然被报告两次,即使在重命名问题中提到的类之后,看起来你正在部署的不是你重命名的类。
  • 我见过由重复的beans.xml 引起的类似问题,例如在WEB-INFMETA-INF 中。

标签: java jboss cdi


【解决方案1】:

您不必自己实现,此用例有一个焊接扩展:

Weld-Logger

来自documentation

现在,通过简单地将记录器对象注入任何 CDI bean,将日志记录添加到您的应用程序变得更加容易。只需使用 @Logger 限定符注解来注解 org.jboss.weld.log.Log 类型的成员,适当的记录器对象就会被注入到 bean 的任何实例中。

import org.jboss.weld.annotation.Logger;
import org.jboss.weld.log.Log;

public class Checkout {

    private @Inject @Logger Log log;


    public void invoiceItems() {

        ShoppingCart cart;

        ...

        log.debug("Items invoiced for {0}", cart);
    }
 }

【讨论】:

    猜你喜欢
    • 2012-10-21
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多