2012-05-01 15 views
6

स्पेक का कहना है कि जब सीडीआई कंटेनर एसएफएसबी को हटा देता है तो दायरे का संदर्भ नष्ट होने वाला है। यह ईजेबी को वास्तव में कैसे हटाता है? ऐसा लगता है कि @Remove के साथ एनोटेटेड विधि को कॉल नहीं किया जा रहा है।सीडीआई राज्य सत्र सत्र बीन कैसे हटाता है?

@Stateful 
public class CustomerDAOImpl implements CustomerDAO { 
    @PreDestroy 
    public void onDestroy() { 
     //This is getting called as expected 
    } 
    @Remove 
    public void deleteMyBean() { 
     //This is not getting called! 
    } 
} 

तो, सीडीआई तकनीकी रूप से यह कहता है कि स्पेक क्या कहता है। सवाल यह है कि यह उदाहरण को हटाने के लिए ईजेबी कंटेनर से पूछने का प्रबंधन कैसे कर रहा है? धन्यवाद।

उत्तर

2

जैसा कि कहा जाता है कि यह एक कार्यान्वयन विशिष्ट ईजेबी एपीआई का उपयोग करके किया जाता है, जो ईजेबी मानक एपीआई का हिस्सा नहीं है।

जैसा कि कहने वाला है, @Remove को कॉल करना आगे बढ़ने का सही तरीका है। @Remove विधियों को उपयोगकर्ता कोड द्वारा बुलाया जाता है, और EJB को हटाने के लिए EJB कंटेनर बताएं। यदि आप ईजेबी हटा दिए जाने पर कॉलबैक चाहते हैं, तो @PreDestroy का उपयोग करें।

-1

@Remove एनोटेशन के साथ विधि को क्लाइंट द्वारा स्पष्ट रूप से बुलाया जाना चाहिए, तो कंटेनर @PreDestroy के साथ एनोटेटेड विधि को कॉल करेगा, अगर यह मौजूद है। उसके बाद, बीन उदाहरण कचरा संग्रह के लिए तैयार हो जाएगा।

यह एकमात्र जीवन चक्र विधि है जो ग्राहक नियंत्रित कर सकती है, अन्य सभी विधियों को कंटेनर द्वारा नियंत्रित किया जाता है।

+0

हां, यह सामान्य व्यवहार है। लेकिन सीडीआई कंटेनर ईजेबी को कैसे हटा रहा है? क्या यह ईजेबी कंटेनर को हटाने के लिए कहने के लिए किसी प्रकार की अनियंत्रित एपीआई का उपयोग कर रहा है? – RajV

+0

@RajV मैं इसे विनिर्देशन में ढूंढने में सक्षम नहीं था, लेकिन आप जावा ईई ट्यूटोरियल में उपयोगी जानकारी प्राप्त कर सकते हैं, 'एक राज्य सत्र सत्र के जीवन चक्र' http://docs.oracle.com/javaee/5 पर /tutorial/doc/bnbmt.html –

+0

@downvoter -1 –

3

मुझे लगता है कि सीडीआई कंटेनर को ईजेबी कंटेनर में एक हुक की आवश्यकता है, यह पूछने के लिए कि "क्या करें यदि आप @ रीमूव विधि अभी पूरा कर चुके हैं तो आप क्या करेंगे"। ईजेबी स्पेक को देखते हुए, ईजेबी 2.1 के लिए आपके द्वारा विस्तारित इंटरफेस में इसके लिए एक तंत्र था।

स्पष्ट कारणों से, साइड इफेक्ट के लिए मनमाने ढंग से @Remove एनोटेटेड विधि को कॉल करने वाला कंटेनर बहुत बीमार सलाह देता है।

+0

+1 के लिए व्याख्या करने के लिए देखभाल, लेकिन एक नाइट के रूप में, कंटेनर के पास EJBObject के कार्यान्वयन का मालिक है (जिसमें .remove है, जो मूल रूप से सीडीआई उपयोग करना चाहता है), लेकिन बीन लागू सत्र बीन। –

+0

यह कोई जवाब नहीं है लेकिन अटकलें हैं। यदि वास्तव में ऐसा हुक था, तो यह अत्यधिक विक्रेता विशिष्ट होगा। वेल्ड जैसे कार्यान्वयन कैसे एक सामान्य फैशन में कर सकते हैं। – RajV

+0

सवाल यह नहीं है कि यह कैसे पोर्टेबल करता है। वेल्ड को विशेष रूप से इंटरफेस के कार्यान्वयन के सभी प्रकार प्रदान करने के लिए कंटेनर की आवश्यकता होती है, जिसमें सत्रऑब्जेक्ट रेफरेंस # निकालें शामिल है – covener

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