Java @导致Bean名称不明确
我和jee和wildfly一起工作了几天,现在我遇到了问题。我创造了这样的东西: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
@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
仅位于部署中的一个位置。