【问题标题】:Can I instantiate a named stateless bean?我可以实例化一个命名的无状态 bean 吗?
【发布时间】:2014-02-04 04:34:05
【问题描述】:

我正在使用 JPA 将大型应用程序迁移到 CDI。 在我更改所有代码之前,我需要知道以下模式是否有效。这将允许我部分迁移应用程序。

我的托管 Bean:

@Named
@Stateless
public class LanguageBoundary implements Serializable {

    @Inject
    LanguageService languageService;

    @Inject
    CrudService crudService;

    public LanguageEntity findById(Long id) {
        return crudService.find(LanguageEntity.class, id);
    }

...

我可以在任何其他课程中使用:

// Methods: DAO - Used by original deprecated parent wrapper class
public LanguageEntity findByIdImpl(Id id) {

    LanguageBoundary lb = new LanguageBoundary();
    return lb.findById(id.getValue());
}

感谢您的建议。

【问题讨论】:

    标签: javabeans cdi managed jta stateless


    【解决方案1】:

    如果您实例化它,该 bean 将不会由容器管理,因此它可能不是您想要的。相反,您应该使用@Inject

    注入它

    【讨论】:

      【解决方案2】:

      要做这样的事情,你需要得到一个对象的引用。您可以使用 CDI 执行此操作。在 CDI 1.1 中,您可以获得 CDI 实用程序类。在 CDI 1.0 中,您可以使用 JNDI 获得对 bean 管理器的引用,以执行等效操作。看这段代码供参考:https://github.com/apache/deltaspike/blob/master/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/provider/BeanProvider.java#L98

      我很好奇你为什么使用@Named。您是否打算在您的 UI 中直接引用 EJB?

      【讨论】:

      • 我和约翰一样好奇。 “@Named”声明了一个通过 EL 对网页可见的 CDI bean,其中“@Stateless”声明了一个 EJB 容器 bean。关注点分离不鼓励将两者混合。另外,将 EJB 组件暴露给 UI 层并不是一个好习惯。
      猜你喜欢
      • 2012-04-30
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 2017-12-27
      • 2020-11-21
      相关资源
      最近更新 更多