2011-10-07 9 views
6

Mam fasadę, która ma jednostkę wytrwałości. I potrzebuję Elewacji i jej zależności zainicjowane przed uruchomieniem RoleController Conconstructor, czy to możliwe w EJB 3.1?Jak wprowadzić fasolę w EJB 3.1 przed uruchomieniem konstruktora klasy?

Na wiosnę wystarczy dodać kilka parametrów (preConstruction = "true") do @configurable i gotowe.

Ale w EJB nie mogę znaleźć sposób na to, że zawsze otrzymasz 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); 
    } 

Odpowiedz

11

Jest ogólnie zły pomysł, aby wykonać jakąkolwiek logikę w konstruktorze (nie tylko na placu zabaw EJB) . Użyj @PostConstruct zamiast:

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

Dzięki tej adnotacji pojemnik będzie pierwszą instancję obiektu EJB, JVM uruchamia (pusty) konstruktor, pojemnik poprzez odbicie wstrzykuje zależności i gdy wszystko jest połączeń gotowe wszystkie metody opatrzone @PostConstruct w nieokreślonym celu . Teraz EJB jest gotowy do obsługi żądań.

Myślę, że niektóre pojemniki/nowsza specyfikacja EJB umożliwia wstrzyknięcie konstruktora, ale nigdy go nie używałem.

+0

Dokładnie to, czego potrzebowałem! –

Powiązane problemy