![](/img/trans.png)
[英]Quarkus Extension JAX-RS Provider doesn't get injected with CDI Beans
[英]Why Quarkus doesn't scan JakartaEE beans?
我正在从部署在 JBoss 上的 JavaEE/JakartaEE(v. 7.0)应用程序迁移到 Quarkus。
我已经删除了所有 JEE 和 JBoss 依赖项,并将它们替换为 Quarkus 依赖项。 现在,当我使用 Quarkus 文档中指定的命令mvn compile quarkus:dev
启动应用程序时,我收到了很多错误,如下所示:
[1] Unsatisfied dependency for type com.freesoft.diba.jeeop.cert_proxy.acme.database.NonceRepository and qualifiers [@Default]
[ERROR] - java member: com.freesoft.diba.jeeop.cert_proxy.acme.AcmeProtocolFeature#nonceRepository
[ERROR] - declared on CLASS bean [types=[java.lang.Object, com.freesoft.diba.jeeop.cert_proxy.acme.AcmeProtocolFeature], qualifiers=[@Default, @Any], target=com.freesoft.diba.jeeop.cert_proxy.acme.AcmeProtocolFeature]
AcmeProtocolFeature
类如下所示:
@Provider
public class AcmeProtocolFeature implements DynamicFeature {
@Inject
Logger logger;
@Inject
PolicyHandler policyHandler;
@Inject
NonceRepository nonceRepository
[...]
NonceRepository
类如下所示:
public class NonceRepository {
@Inject
@PersistenceContext(unitName = "acme")
EntityManager em;
在应用程序的先前版本(JEE 版本)中,一切运行良好。 我想知道为什么这不再按预期工作,因为据我所知,Quarkus 实现了所有 JavaEE/JakartaEE 标准?!
正如Quarkus 文档中所述,未发现没有 bean 定义注释的类。
不会发现没有 bean 定义注解的 bean 类。 此行为由 CDI 定义。 但是即使声明类没有使用定义注解的 bean 进行注解,生产者方法和字段以及观察者方法也会被发现(这种行为与 CDI 中定义的不同)
在 JavaEE/JakartaEE 中,如果一个类没有指定任何 bean 定义注解,那么它会被认为默认使用@Dependent
注解,所以基本上,这就是为什么 JavaEE/JakartaEE 版本的应用程序运行良好,而 Quarkus一个根本不起作用。
解决方案是在要进一步注入的每个类的顶部显式指定一个 bean 定义注释,特别是在这种情况下,类NonceRepository
应该至少使用@Dependent
注释进行注释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.