2011-10-07 11 views
6

Ho una facciata che ha un'unità di persistenza. E ho bisogno della facciata e delle dipendenze inizializzate prima dell'esecuzione di RoleController Conconstructor, è possibile farlo in EJB 3.1?Come iniettare un bean con EJB 3.1 prima dell'esecuzione del costruttore della classe?

In primavera è sufficiente aggiungere alcuni parametri (preConstruction = "true") a @configurable ed è fatto.

Ma in EJB non riesco a trovare un modo per farlo ho sempre trovato un NullPointer ...

@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); 
    } 

risposta

11

E 'generalmente una cattiva idea quella di eseguire qualsiasi logica nel costruttore (non solo sul campo da giuoco EJB) . Utilizzare @PostConstruct invece:

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

Con questa annotazione il contenitore prima istanziare un oggetto EJB, JVM corre un costruttore (vuoto), contenitore tramite riflessione inietta dipendenze e quando tutto è chiamate ready tutti i metodi annotato con @PostConstruct in ordine specificato . Ora il bean è pronto a servire le richieste.

Penso che alcuni contenitori/nuove specifiche EJB consentano l'iniezione del costruttore, ma non l'ho mai usato.

+0

Esattamente quello di cui avevo bisogno! –

Problemi correlati