为什么Quarkus不扫描JakartaEE bean?

问题描述

我正在从部署在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 documentation中所述,没有发现没有bean定义注释的类。

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

在JavaEE / JakartaEE中,如果一个类未指定任何定义bean的注释,则默认情况下将使用@Dependent对其进行注释,因此,基本上,这就是应用程序的JavaEE / JakartaEE版本的原因运作良好,而Quarkus根本无法运作。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...