2011-10-07 49 views
6

我有一个具有持久性单元的Facade。我需要Facade,它的依赖项在RoleController Conconstructor运行之前初始化,是否有可能在EJB 3.1中这样做?如何在类构造函数运行之前使用EJB 3.1注入Bean?

在Spring中,您可以简单地向@configurable中添加一些参数(preConstruction =“true”)并完成。

但在EJB我无法找到一个方法来做到这一点,我总是得到一个空指针...

@FacesConverter("rolesConverter") 
@Named("roleController") 
@SessionScoped 
@TransactionManagement(TransactionManagementType.CONTAINER) 
public class RoleController implements Serializable, Converter{ 

    private List<Roles> listOfRoles; 
    private List<Roles> listChoosenRoles; 
    private DualListModel<Roles> listOfDualRoles; 
    @EJB 
    private RoleFacade roleFacade; 

    public RoleController(){ 
     listOfRoles = roleFacade.getListOfRoles(); 
     listChoosenRoles = new ArrayList(); 
     listOfDualRoles = new DualListModel<Roles>(listOfRoles, listChoosenRoles); 
    } 

回答

11

它通常是在构造函数中执行任何逻辑是一个坏主意(不仅对EJB操场) 。使用@PostConstruct代替:

@PostConstruct 
public init(){ 
    listOfRoles = roleFacade.getListOfRoles(); 
    listChoosenRoles = new ArrayList(); 
    listOfDualRoles = new DualListModel<Roles>(listOfRoles, listChoosenRoles); 
} 

有了这个注解,容器将首先实例化一个EJB对象,JVM上运行的(空的)构造,通过反射容器注入的依赖性,当一切准备就绪电话与@PostConstruct在未指定的顺序标注的所有方法。现在EJB已准备好为请求提供服务。

我认为一些容器/更新的EJB规范允许构造函数注入,但我从来没有使用它。

+0

正是我需要的! –

相关问题