2011-10-07 13 views
6

Bir kalıcılık birimine sahip bir Cephe var. Ve Cephe'ye ihtiyacım var ve bağımlılıkları RoleController Conconstructor'ın çalışmasından önce başlatıldı, EJB 3.1'de bunu yapmak mümkün mü?Sınıf kurucusu çalıştırılmadan önce EJB 3.1 ile Bean nasıl enjekte edilir?

İlkbaharda, @configurable öğesine bazı parametreleri (preConstruction = "true") ekleyin ve tamamlandı.

Ama EJB ben hep bir NullPointer olsun bunu yapmak için bir yol bulamıyorum

...

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

cevap

11

Genellikle yapıcı herhangi mantığı gerçekleştirmek için kötü bir fikirdir (sadece EJB oyun alanında) . Bunun yerine @PostConstruct kullanın:

konteyner ilk bir EJB nesne örneğini bu açıklama ile
@PostConstruct 
public init(){ 
    listOfRoles = roleFacade.getListOfRoles(); 
    listChoosenRoles = new ArrayList(); 
    listOfDualRoles = new DualListModel<Roles>(listOfRoles, listChoosenRoles); 
} 

, JVM yansıma yoluyla konteyner bağımlılıkları enjekte bir (boş) yapıcı çalışır ve her şey hazır aramaları olduğunda tüm yöntemler belirtilmemiş sırayla @PostConstruct ile açıklamalı . Şimdi EJB isteklerine hizmet etmeye hazır.

Bazı kapların/daha yeni EJB özelliklerinin kurucuya enjeksiyon yapılmasına izin verdiğini düşünüyorum, ancak hiç kullanmadım.

+0

Tam olarak neye ihtiyacım vardı! –

İlgili konular