繁体   English   中英

为什么 Quarkus 不扫描 JakartaEE bean?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM