2010-04-25 3 views
20

ईजेबी को आलसी लोड किया जाता है - जब भी एक्सेस किया जाता है।स्टार्टअप (जेबॉस पर) पर ईजेबी/लोड ईजेबी की उत्सुक/ऑटो लोडिंग

हालांकि, मैं उन्हें उत्सुकता से प्रारंभ करना चाहता हूं - यानी जब भी कंटेनर शुरू होता है। यह कैसे प्राप्त किया जाता है (विशेष रूप से जेबॉस में)

This topic कुछ संकेत देता है, लेकिन यह काफी संतोषजनक नहीं है।

उत्तर

21

EJB 3.1 के रूप में, सिंगलटन सेम मॉड्यूल शुरू की अधिसूचित किया जा सकता है रोक:

EJB 3.1
@Singleton 
@Startup 
public class StartupBean { 
    @PostConstruct 
    private void postConstruct() { /* ... */ } 

    @PreDestroy 
    private void preDestroy() { /* ... */ } 
} 

पहले, कोई मानक, EJB-एकमात्र समाधान। मैं आपके ईएआर में एक वॉर जोड़ने और सर्वलेट-संदर्भ-श्रोता का उपयोग करने का सुझाव दूंगा।

+0

मैंने पाया कि ग्लासफ़िश 3.1 में मेरा ऐप, @Singleton @Startup EJB को @PersistenceContext EntityManager बंद है। मेरा कामकाज उस ईजेबी में एक टाइमर था जो 2 सेकंड बाद निष्पादित करता था। (duh!) –

+3

यह मेरे लिए एक बग की तरह लगता है; मैं इसकी रिपोर्ट करने की सिफारिश करता हूं। –

17

एडम बिएन की असली दुनिया जावा ईई पैटर्न के अनुसार - पुनर्विचार उत्तम आचरण (एक summary of the patterns देखें) और सेवा स्टार्टर पैटर्न, यह वास्तव में है bkail के रूप में पता चलता है

    जावा ईई 6 = EJB 3.1 उपयोग @Singleton साथ
  • @Startup (और शायद @DependsOn के साथ)
  • इससे पहले कि केवल मानक और पोर्टेबल तरीका Servlet API का उपयोग करना है, उदाहरण के लिए एक HttpServlet ईजेबी को अपनी init() विधि और लोड-ऑन-स्टार्टअप में web.xml में सेट करने के लिए शुरू करता है।