2011-10-07 8 views
6

मेरे पास एक फेकाडे है जिसमें एक स्थिरता इकाई है। और मुझे फोकैड की आवश्यकता है और रोलकंट्रोलर कॉन्कोनस्ट्रक्टर चलाने से पहले इसकी निर्भरताएं शुरू हुईं, क्या ऐसा करने के लिए ईजेबी 3.1 में यह संभव है?कक्षा कन्स्ट्रक्टर चलाने से पहले ईजेबी 3.1 के साथ एक बीन इंजेक्ट कैसे करें?

वसंत में आप सरल कुछ पैरामीटर (preConstruction = "true") को @configurable में जोड़ते हैं और यह हो जाता है।

लेकिन EJB में मुझे लगता है कि मैं हमेशा एक 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); 
    } 

उत्तर

11

यह आम तौर पर एक बुरा विचार निर्माता में किसी भी तर्क प्रदर्शन करने के लिए है (न केवल EJB खेल के मैदान पर) । का प्रयोग करें @PostConstruct बजाय:

@PostConstruct 
public init(){ 
    listOfRoles = roleFacade.getListOfRoles(); 
    listChoosenRoles = new ArrayList(); 
    listOfDualRoles = new DualListModel<Roles>(listOfRoles, listChoosenRoles); 
} 
यह व्याख्या कंटेनर पहले एक EJB वस्तु का दृष्टांत जाएगा

, JVM एक (खाली) निर्माता चलाता है, प्रतिबिंब के माध्यम से कंटेनर निर्भरता इंजेक्शन और जब सब कुछ तैयार कॉल है सभी तरीकों अनिर्दिष्ट क्रम में @PostConstruct साथ एनोटेट । अब ईजेबी अनुरोध करने के लिए तैयार है।

मुझे लगता है कि कुछ कंटेनर/नए ईजेबी स्पेक कन्स्ट्रक्टर इंजेक्शन की अनुमति देता है, लेकिन मैंने इसका कभी भी उपयोग नहीं किया है।

+0

बिल्कुल मुझे क्या चाहिए! –

संबंधित मुद्दे