gpt4 book ai didi

jakarta-ee - 是否可以将 @RequestScoped bean @Inject 到 @Stateless EJB 中?

转载 作者:行者123 更新时间:2023-12-02 06:30:04 25 4
gpt4 key购买 nike

是否可以将请求范围的 CDI bean 注入(inject)无状态 session bean 中?

我问了一个相关的问题,并认为特定的 CDI @RequestScoped into @Stateless 问题值得单独发表。

Passing state between EJB methods / @RequestScoped and @Stateless

我还问了一个有关 JMS @MessageDriven beans 的类似问题 - 基本上想了解有关 @Stateless 的相同问题。

@RequestScoped CDI injection into @MessageDriven bean

最佳答案

您绝对可以执行您提到的操作,并在 @Stateless session bean 和 @MessageDriven bean 中使用 @RequestScoped bean。这是CDI规范和TCK的核心部分,并保证可移植。

MDB 注释

请注意,有一个针对使用 @RequestScoped bean 的 @Stateless bean 的测试,但没有测试保证 @MessageDriven bean 可以引用 @RequestScoped bean。这只是一个疏忽,是already fixed for the Java EE 7 TCK 。所以请注意,如果它不适用于 MDB 情况,那可能不是你的错:)

解决方法是简单地将 MDB 委托(delegate)给任何类型的 SessionBean,例如 @Stateless@Stateful@Singleton全部都有 @RequestScoped 测试。

使 EJB 本身具有作用域

虽然@Stateless@Singleton@MessageDriven可以通过@Inject注入(inject)作用域引用,但它们不能是 @RequestScoped 或任何其他范围。只有 @Stateful 模型足够灵活以支持范围。换句话说,您可以将 @Stateful bean 类本身注释为 @RequestScoped@SessionScoped 等。

简单来说,@Stateless@Singleton 已经固定了“范围”。 @Singleton 本质上是 @ApplicationScoped ,而 @Stateless 可能是一些虚构的作用域,例如 @InitationScoped,如果那是存在的。 @MessageDriven bean 的生命周期完全取决于驱动它的连接器,因此也不允许具有用户定义的范围。

关于jakarta-ee - 是否可以将 @RequestScoped bean @Inject 到 @Stateless EJB 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8717022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com