2011-10-07 46 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

正是我需要的! –

相關問題