【问题标题】:Why Quarkus doesn't scan JakartaEE beans?为什么 Quarkus 不扫描 JakartaEE bean?
【发布时间】:2020-09-17 07:37:23
【问题描述】:

我正在从部署在 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 标准?!

【问题讨论】:

    标签: java jakarta-ee java-ee-7 quarkus


    【解决方案1】:

    正如Quarkus documentation 中所述,没有发现没有定义bean 注释的类。

    没有发现 bean 定义注解的 bean 类。此行为由 CDI 定义。但是,即使声明类没有使用 bean 定义注释进行注释,也会发现生产者方法和字段和观察者方法(这种行为与 CDI 中定义的不同)

    在 JavaEE/JakartaEE 中,如果一个类没有指定任何定义 bean 的注解,那么默认情况下它会被认为使用@Dependent 进行注解,所以基本上,这就是为什么 JavaEE/JakartaEE 版本的应用程序运行良好的原因,而 Quarkus 则根本不工作。

    解决方案是在要进一步注入的每个类之上显式指定一个定义注解的 bean,特别是在这种情况下,类 NonceRepository 至少应使用 @Dependent 注解进行注解。

    【讨论】:

    • 正是如此。但鉴于它看起来像 Repository@ApplicationScoped 可能会更好。
    • 在迁移到 Quarkus 之前,没有提供 bean 注释,所以我认为讨论中的那个是 @Dependent。当然,也可以用不同的注解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    相关资源
    最近更新 更多