微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么Quarkus不扫描JakartaEE bean?

如何解决为什么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进行注释。注释。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。