【问题标题】:@Produces cause Bean name ambiguous@Produces 导致 Bean 名称不明确
【发布时间】:2017-10-23 21:24:36
【问题描述】:

我与 jee 和 wildfly 合作了几天,现在我遇到了问题。我创造了这样的东西:

@Stateless
public class BookService {

@EJB
private BookDao bookDao;

public void addBook(Book book) {
    bookDao.saveBook(book);
}

public Optional<Book> getBookById(Long id) {
    return bookDao.getBookById(id);
}

public void updateBook(Book book) {
    bookDao.updateBook(book);
}

@Produces
@Named("books")
public List<Book> getAllBooks() {
    return bookDao.getAllBooks();
}
}

接下来我尝试在 jsf 中使用#{books},但出现异常:

2017-05-23 08:49:07,447] 神器耳:耳:神器期间出错 部署。有关详细信息,请参阅服务器日志。

[2017-05-23 08:49:07,448] 神器 ear:ear: java.lang.Exception: {“WFLYCTL0080:服务失败”=> {"jboss.deployment.unit.\"Lab6.ear\".WeldStartService" => “服务中的 org.jboss.msc.service.StartException jboss.deployment.unit.\"Lab6.ear\".WeldStartService: 启动失败 服务

原因:org.jboss.weld.exceptions.DeploymentException:WELD-001414:Bean 名称不明确。姓名簿解析为 bean:

  • 生产者方法 [List] 与限定符 [@Default @Named @Any] 声明为 [[BackedAnnotatedMethod] @Produces @Named public app.service.BookService.getAllBooks()],

  • 生产者方法 [List] 与限定符 [@Default @Named @Any] 声明为 [[BackedAnnotatedMethod] @Produces @Named public app.service.BookService.getAllBooks()]"},"WFLYCTL0412:必需 未安装的服务:" => ["jboss.deployment.unit.\"Lab6.ear\".WeldStartService"],"WFLYCTL0180: 缺少/不可用依赖项的服务” => 未定义}

问题的根源是什么。

【问题讨论】:

  • 请分享有关您的部署结构的信息。我想我会成为 EAR,而你有两次依赖,导致两个相同的生产者。确保 BookService 仅在您的部署中的一个位置。

标签: java jakarta-ee jboss wildfly cdi


【解决方案1】:

这看起来您构建的 EAR 文件组件不正确:

  • EJB jar 位于 EAR 文件本身中;
  • EJB jar 也在 WAR 文件的 WEB-INF/lib 目录中

这将为您提供同一个 bean 的两个副本。

【讨论】:

    【解决方案2】:

    错误来自您有 2 个 Book 类型的 bean。为了澄清在这里看到这个example,Class 和 producer 如何是两个同名的 bes。 这里是相同tipycall mistake的另一个例子。检查他们两个。 您的代码中某处有另一个名为 books 的 bean

    【讨论】:

    • 同样的问题,没有任何改变
    • 我更新了答案,在您的代码中,您在哪里有另一个名为 books 的 bean?也许是生产者、阶级或消费者?
    猜你喜欢
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 2013-01-04
    • 2013-12-01
    • 2018-09-18
    • 2019-05-18
    • 2018-12-18
    • 1970-01-01
    相关资源
    最近更新 更多