我可以实例化一个命名的无状态bean吗?

时间:2014-01-15 15:50:33

标签: javabeans cdi managed jta stateless

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

My Managed 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());
}

感谢您的建议。

2 个答案:

答案 0 :(得分:4)

如果你实例化它,bean就不会被容器管理,所以它可能不是你想要的。相反,您应该使用@Inject

注入它

答案 1 :(得分: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?