2013-09-23 13 views
6

क्या मुझे जावा ईई में transient के रूप में इंजेक्शन वैरिएबल घोषित करना चाहिए?क्या मुझे जावा ईई में क्षणिक इंजेक्शन वैरिएबल घोषित करना चाहिए?

मैं एक FindBugs चेतावनी हो रही है:

कक्षा com.playaround.HelloServlet गैर क्षणिक गैर serializable उदाहरण क्षेत्र accelerationUnit
यह Serializable वर्ग एक गैर आदिम उदाहरण क्षेत्र जो न तो क्षणिक होता है परिभाषित करता है परिभाषित करता है, Serializable, या java.lang.Object, और बाहरी इंटरफ़ेस या readObject() और writeObject() विधियों को लागू करने के लिए प्रतीत नहीं होता है।
इस वर्ग के ऑब्जेक्ट्स को सही ढंग से deserialized नहीं किया जाएगा यदि इस क्षेत्र में एक गैर-Serializable वस्तु संग्रहीत किया जाता है।

खेलने में कोड है:

/** 
* Sample of a web service reference. 
*/ 
@WebServiceRef 
private AccelerationUnit accelerationUnit; 

एक ही सवाल लागू होता है @Resource, @Inject, @PersistenceUnit आदि

उत्तर

7

यह निर्भर करता है;) @ इंजेक्शन और अन्य सीडीआई एनोटेशन के साथ आपको JSR-299 specification के अध्याय 6.6 की जांच करनी चाहिए। आपके पास ऐसी जानकारी है जो बीन्स "निष्क्रियता सक्षम" हैं।

राज्यविहीन और सिंगलटन सत्र सेम के बारे में, EJB विनिर्देश के अनुसार, वे धारावाहिक नहीं किया जा सकता है (जैसा कि EJB passivation नहीं होती है)

अंतिम थिंक और सबसे समस्याग्रस्त स्टेटफुल सत्र सेम है। सक्रियण के बाद सभी जावाईई संसाधन (ईजेबी, इनिशियल कॉन्टेक्स्ट, सत्र कॉन्टेक्स्ट इत्यादि) बहाल किए जाएंगे, लेकिन आपको अन्य गैर-धारावाहिक फ़ील्ड और खुले कनेक्शन का ख्याल रखना होगा। तो आपके मामले में IMHO आपको त्वरण के रूप में चिह्नित करना चाहिए और ejbActivate ईवेंट में पुनर्स्थापित करना चाहिए, या स्वचालित रूप से फ़ील्ड इंजेक्ट करने के लिए सीडीआई और निर्माता विधियों को शामिल करना चाहिए।

+0

मुझे एटी WebServiceRef को सीमित करने के लिए प्रश्न को फिर से संपादित करना चाहिए क्योंकि यह वही था जो मैं काम कर रहा था। हालांकि, मैंने देखा कि मेरे पास एक ही समस्या है यदि मैं एक एटी पर्सिस्टेंस यूनिट और एटी ईजेबी को सर्वलेट में इंजेक्ट करता हूं तो मैंने सोचा कि इसे विस्तारित किया जा सकता है। –

-3

वर्ग AccelerationUnit की परिभाषा में, करने के लिए इसे पसंद करते हैं:

class AccelerationUnit implements Serializable{ 
    // your code here 
    } 
+0

एक्सेलेरेशन यूनिट एक webserviceclient एक serializable वर्ग नहीं है। इसे एक उदाहरण के रूप में दिया गया था। –

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