【问题标题】:quarkus with @NoScope like @Stateless?与@NoScope 类似@Stateless 的夸库?
【发布时间】:2019-12-10 16:31:41
【问题描述】:

@Stateless EJB 对应的 quarkus 是什么?

实际上,我只能在典型的cdi bean中使用cdi,但是在quarkus中没有像@Stateless这样没有范围的bean,或者?

@NoScope // such scope does actually not exit in cdi or quarkus
public class MyBean{

    @Inject 
    EntityManager em;

}

【问题讨论】:

  • 我不太明白@NoScope 或“@Stateless 之类的范围”是什么意思,但我 @Dependent 可能就是你的意思寻找。
  • 但是@Dependend继承了它注入的父bean的作用域。 @Stateless 没有范围,我也可以在这个 bean 中使用 @Inject
  • 啊,好的。我不明白你的问题。我没有答案。如果您能分享您的动机/用例,或许会对其他潜在的响应者有所帮助。
  • 用例是:使一个类成为一个 bean 来使用 cdi 而不将其绑定到一个范围,这样这个 @NoScoped bean 也可以 @Inject something..with @Stateless 它是可能的。 .但是 quarkus 或 cdi 没有 @Stateless 之类的东西,或者?

标签: quarkus


【解决方案1】:

CDI @RequestScoped表示每个请求的新实例。它不会保留请求之间的状态,因此您可以将其视为@Stateless 的替代品。

@Stateless vs @RequestScoped

【讨论】:

    【解决方案2】:

    当我们在使用@Stateless 的上下文中使用@RequestScope 时,我们只通过在每个请求上销毁和创建bean 来模拟@Stateless 行为。好处是我们在请求之间强制隔离;然而,权衡是我们在每个请求都执行昂贵的 bean 创建/销毁。

    如果我们关心性能并且只需要无状态行为而不强制请求之间的隔离,我们应该将我们的 bean 设计为无状态并使用 @Dependent 或 @ApplicationScoped 范围。如果开发人员谨慎并无状态地编写代码,则不会存在请求之间没有隔离的风险。

    将@RequestScope 用作@Stateless 听起来像是框架中缺少的功能的一种臭名昭著的解决方法;因此,除非必要,否则我不喜欢在这种情况下使用它。

    【讨论】:

      【解决方案3】:

      EJB 带有附加功能,例如线程池、监控或事务管理(当容器管理时)...

      因此,在 Quarkus 中,@Stateless 没有直接替代品,但您可以通过将 @Transactional@RequestScoped 结合使用来接近。

      我不知道@NoScope,但我猜你的意思是@Dependent

      查看 Adam Bien 的博客:https://www.adam-bien.com/roller/abien/entry/migration_from_stateless_bce_to

      【讨论】:

        猜你喜欢
        • 2013-12-31
        • 2021-09-18
        • 1970-01-01
        • 1970-01-01
        • 2021-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多