Java @导致Bean名称不明确

Java @导致Bean名称不明确,java,jakarta-ee,jboss,wildfly,cdi,Java,Jakarta Ee,Jboss,Wildfly,Cdi,我和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.getBo

我和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();
}
}
@无状态
公共类图书服务{
@EJB
私家书刀;
公共无效地址簿(Book Book){
存折;
}
公共可选getBookById(长id){
返回bookDao.getBookById(id);
}
公共作废更新电子书(书籍){
bookDao.updateBook(图书);
}
@产生
@命名(“书籍”)
公共列表getAllBooks(){
返回bookDao.getAllBooks();
}
}
接下来,我尝试在jsf中使用
#{books}
,但出现了异常:

2017-05-23 08:49:07447]工件耳:耳:工件过程中的错误 部署。有关详细信息,请参阅服务器日志

[2017-05-23 08:49:07448]工件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]@产生@Named public app.service.BookService.getAllBooks()]

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


问题的根源是什么。

错误源于您有两个类型为Book的bean。为了澄清这一点,在这里,类和生产者如何是两个同名的been。 这是另一个同样的例子。两个都检查一下。
您有另一个名为
books
soome的bean,代码中的这似乎是您错误地构建了EAR文件组件:

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

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

相同的问题,没有任何更改我更新了答案,您的代码中哪里有另一个名为books的bean?可能是生产者、类或消费者?请共享有关部署结构的信息。我想我是EAR,你有一些依赖,两次导致两个相同的生产者。确保
BookService
仅位于部署中的一个位置。