2010-06-08 10 views
12

मैं जेबॉस पर तैनात ईजेबी में एक प्रविष्टि बिंदु की तलाश में हूं।जेबीओएस स्टार्टअप पर ईजेबी में कॉल विधि

Servlets के पास load-on-startup टैग है जो web.xml में उपयोग करने के लिए है।

मैं एक ईजेबी के लिए समान init() कार्यक्षमता की खोज कर रहा हूं।

उत्तर

25

यह 3.1 तक ईजेबी के लिए मौजूद नहीं था। EJB 3.1 के साथ आप कि अनुकरण करने के लिए एक सिंगलटन सेम का उपयोग कर सकते हैं:

Application Startup/Shutdown Callbacks से:

@Startup 
    @Singleton 
    public class FooBean { 

     @PostConstruct 
     void atStartup() { ... } 

     @PreDestroy 
     void atShutdown() { ... } 

    } 

अन्यथा, आप एक ServletContextInitializer उपयोग करने के लिए अच्छे पुराने चाल पर भरोसा करने की आवश्यकता होगी।

कुछ एप्लिकेशन-विशिष्ट एक्सटेंशन हैं, उदा। ग्लासफ़िश के लिए lifecycle listener। शायद जेबॉस के लिए ऐसी चीज है।

लेकिन यदि मैं आप थे तो मैं मानक सुविधाओं पर जितना संभव हो सके भरोसा करने की कोशिश करता हूं। गैर मानक विस्तार के साथ समस्या यह है कि आप कभी नहीं जानते कि क्या किया जा सकता है या नहीं, उदा। क्या आप लेनदेन शुरू कर सकते हैं या नहीं, आदि

+1

वैकल्पिक रूप से कोई हमेशा स्टार्ट/स्टॉप लाइफसाइकिल विधियों के साथ एमबीन का उपयोग कर सकता है। एमबीएएन को ईजेबी की आवश्यकता होती है और इसकी आवश्यकता होती है जो भी तरीके से कॉल करती है। –

+0

धन्यवाद। दो महान पोस्ट। मैं इसके बजाय "ServletWrapper" के साथ समाप्त हुआ। लेकिन एजेंडा पर एक रिफैक्टर है। चीयर्स! – Elijah

+0

मैं jboss 5.1 का उपयोग कर रहा हूं (सुनिश्चित नहीं है कि यह EJB3.1 का समर्थन करता है) मैं इस तकनीक का उपयोग तैनाती पर विधि का आह्वान करने के लिए कर सकता हूं? धन्यवाद। – rayman

1

प्रबंधित बीन्स का उपयोग जेबॉस स्टार्टअप पर कुछ प्रक्रिया करने के लिए किया जा सकता है, आपको कॉन्फ़िगरेशन फ़ाइल में उस प्रबंधित बीन की प्रविष्टि जोड़नी होगी।

1

आप विधि आप स्टार्टअप पर चलाना चाहते हैं के शीर्ष में निम्न पंक्ति जोड़ने के लिए सक्षम होना चाहिए:

@Observer("org.jboss.seam.postInitialization") 
3

आप 5.1 के रूप में JBoss लक्षित कर रहे हैं, और आप JBoss EJB 3.0 Extensions का उपयोग कर कोई आपत्ति नहीं है, तो आप अपने EJB bootstrap के लिए एक सेवा सेम बना सकते हैं। यदि आपकी सेवा @Management एनोटेशन के साथ एनोटेटेड इंटरफ़ेस लागू करती है और public void start() throws Exception हस्ताक्षर के साथ एक विधि घोषित करती है, तो जेबॉस सेवा शुरू होने पर इस विधि को कॉल करेगा। इस पर

@Service 
public class BeanLauncher implements BeanLauncherManagement 
{ 
    @EJB private SessionBeanLocal sessionBean; 

    @Override 
    public void start() throws Exception 
    { 
     sessionBean.init(); 
    } 
} 

@Management 
public interface BeanLauncherManagement 
{ 
    public void start() throws Exception; 
} 

अधिक जानकारी के लिए, अतिरिक्त जीवन चक्र की घटनाओं सहित, here पाया जा सकता है: आप तो आप प्रारंभ करना चाहते हैं EJB पर एक समर्पित init() विधि कॉल कर सकते हैं।