2016-05-13 9 views
14

असमर्थ मैं निम्नलिखित सत्र सेम scoped हैdeserialize करने के लिए वसंत सत्र Scoped सेम

@ManagedBean 
@Component 
@Scope(proxyMode= ScopedProxyMode.TARGET_CLASS, value="session") 
public class SessionData implements Serializable {} 

और मैं एक डेटाबेस में बिल्ला सत्र की दुकान।

org.apache.catalina.session.PersistentManagerBase.swapIn Error deserializing Session EE913D2ACAD49EB55EDA657A54DFA2CB: {1} 
java.lang.ClassNotFoundException: de.myproject.SessionData$$EnhancerBySpringCGLIB$$768b59b9 

ऐसा लगता है कि यह वास्तव में पूरे वसंत संदर्भ धारावाहिक, और स्पष्ट रूप से सर्वर के पुनरारंभ होने के बाद ऐसी कोई वर्ग de.myproject.SessionData$$EnhancerBySpringCGLIB$$768b59b9 है: समस्या यह है कि, जब आवेदन मैं निम्न त्रुटि प्राप्त एक संग्रहीत सत्र deserialize की कोशिश करता है, है , इसलिए मुझे उपरोक्त अपवाद प्राप्त होता है।

क्या इससे बचने का कोई तरीका है, ताकि सत्र-स्कोप्ड बीन ठीक से क्रमबद्ध हो?

अद्यतन: issue है जो इस टिप्पणी के बिना हल किए गए हैं, हालांकि मुझे अभी भी इसका सामना करना पड़ता है।

+0

आप अपने DB में सत्र डेटा स्टोर करते हैं? –

+0

मेरे पास टॉमकैट सर्वर डीबी में सत्रों को स्टोर करने के लिए कॉन्फ़िगर किया गया है। – vtor

+0

उलझन में: @ManagedBean जेएसएफ एनोटेशन है, आपके पास एक ही बीन पर जेएसएफ और स्प्रिंग एनोटेशन दोनों क्यों हैं? –

उत्तर

0

एक स्कोप सत्र के साथ एक बीन होने का मतलब यह नहीं है कि बीन धारावाहिक है और इसे एक सत्र में संग्रहीत किया जा सकता है।

जैसा कि आप कक्षा के नाम से अनुमान लगा सकते हैं, प्रत्येक स्टार्टअप पर एक अलग नाम के साथ रनटाइम पर प्रॉक्सी क्लास उत्पन्न होता है। यह बताता है कि deserialization पर एक समस्या क्यों होती है।

मुझे लगता है कि आप इस सत्रडेटा को वेब सत्र की विशेषता के रूप में जोड़ने का प्रयास करते हैं। तुम्हे नही करना चाहिए। अपने पीओजेओ डेटा को बीन्स का उपयोग किए बिना वेब सत्र में स्टोर करें।

यदि आप डेटाबेस कनेक्शन या इसी तरह की वस्तुओं को इंजेक्ट करने के लिए बीन का उपयोग करते हैं, तो इसे भूल जाएं। आप केवल विशेष संदर्भों के लिए सत्र स्कोप बीन्स का उपयोग कर सकते हैं जो मुझे लगता है कि आपकी आवश्यकताओं को पूरा नहीं करता है।

का उपयोग कर: पहले import org.springframework.test.util.AopTestUtils;

Serializable readyToSerialize = AopTestUtils.getUltimateTargetObject(yourInstance); 

यह क्रमानुसार

+1

यह जेएसएफ बीन है, और जेएसएफ स्वचालित रूप से सभी सत्र स्कोप्ड बीन्स को क्रमबद्ध करता है और उन्हें सत्र में संग्रहीत करता है। – vtor

1

कृपया एक कोशिश की है।

नोट: यह कोड समस्या को समझने के लिए उपयोगी है, यदि यह काम है, तो आपको उत्पादन कोड के लिए बेहतर काम करने के लिए परियोजना वास्तुकला और निर्भरताओं का विश्लेषण करना होगा। सबसे पहले, आपको ScopedProxyMode.TARGET_CLASS

0

मुझे आपके कार्य को अच्छी तरह से नहीं पता है, लेकिन मेरी राय में इस तरह की एक डेटा वस्तु वसंत बीन नहीं होनी चाहिए क्योंकि वसंत बीन व्यापार तर्क बीन, नियंत्रक होना चाहिए बीन और इतने पर और सत्र नहीं।

इस कारण से मैं थैग पर विचार करता हूं कि आपको यह सोचने की कोशिश करनी चाहिए कि आप अपने वसंत बीन के डेटा को क्यों स्टोर करना चाहते हैं, और व्यवसाय सत्र बीन से वसंतएमवीसी के @ सत्र सत्र में http सत्र में इच्छित डेटा को डीकॉप्ल करने का प्रयास करें। शोर और न ही सत्र जागरूक हो।

मैं Hooe इस मदद कर सकते हैं आप अपनी समस्या का समाधान खोजने के लिए अपने कार्यान्वयन stategy बदलने के लिए

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