पर फिर से इंजेक्शन मैं अगर मैं सिर्फ एक एनोटेशन या विन्यास आइटम याद कहीं अगर मैं क्या कर रहा हूँ गलत है यकीन नहीं है, या नहीं है।JSF - सत्र-दायरे में कामयाब सेम निर्भरता सत्र अक्रमांकन
मैं SessionData
नाम के एक सत्र-दायरे सेम के साथ एक JSF आवेदन है: यहाँ की स्थिति है। इस बीन में एक अनुप्रयोग-स्कोप्ड बीन संदर्भ (प्रकार ApplicationData
) का निर्माण समय पर इंजेक्शन किया गया है। जब सत्र पहली बार बनाया जाता है तो यह ठीक काम करता है। जैसा कि यहाँ दिखाया निर्भरता इंजेक्शन faces-config.xml
फ़ाइल में <managed-bean>
तत्वों के साथ किया जाता है:
<managed-bean>
<managed-bean-name>sessionData</managed-bean-name>
<managed-bean-class>my.package.SessionData</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>applicationData</property-name>
<property-class>my.package.ApplicationData</property-class>
<value>#{applicationData}</value>
</managed-property>
</managed-bean>
<managed-bean>
<managed-bean-name>applicationData</managed-bean-name>
<managed-bean-class>my.package.ApplicationData</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean>
क्योंकि यह मतलब नहीं है मेरी SessionData
वस्तु के लिए ApplicationData
वस्तु शामिल जब यह धारावाहिक है, मैं ApplicationData
संदर्भ में चिह्नित किया है मेरी SessionData
वस्तु में क्षणिक रूप में:
transient private ApplicationData applicationData;
सभी अच्छे जब तक वेब अनुप्रयोग बंद कर दिया है (मेरे बिलाव 6.x कंटेनर में) और सत्र धारावाहिक हो रहा है। जब मैं एप्लिकेशन को पुनरारंभ करता हूं और सत्र deserialized हैं, ApplicationData
के लिए मेरा संदर्भ जेएसएफ द्वारा फिर से इंजेक्शन नहीं है। मुझे पता है कि deserialization एक मूल्य के बिना क्षणिक क्षेत्रों छोड़ने के लिए माना जाता है। क्या जेएसएफ को सिग्नल करने का कोई तरीका है कि इस सत्र-स्कोप्ड ऑब्जेक्ट को इसकी निर्भरताओं को deserialization के बाद फिर से सेट करने की आवश्यकता है?
मैं अपने वेब आवेदन कंटेनर के रूप में MyFaces JSF 1.2 और बिलाव 6.0.26 उपयोग कर रहा हूँ।
यह सुझाव दिया गया था कि मैं एक readObject() विधि प्रदान करता हूं और FacesContext का उपयोग कर deserialization के दौरान मैन्युअल रूप से ApplicationData ऑब्जेक्ट सेट करता हूं। मुझे नहीं लगता कि यह काम करेगा क्योंकि FacesContext केवल अनुरोध के जीवनकाल के दौरान उपलब्ध है। आवेदन स्टार्टअप पर deserialization हो रहा है। –
सही, इसलिए मैंने अपना जवाब हटा दिया। यह अधिक जटिल प्रतीत होता है (इसलिए प्रश्न के लिए +1) – Bozho