मेरे आवेदन में, हमारे पास getFoo() नामक एक webservice विधि है जो एक Foo ऑब्जेक्ट देता है। getFoo() विधि को कई सौ बार एक दूसरे कहा जाता है। अपाचे सीएक्सएफ का उपयोग कर फू ऑब्जेक्ट को हमारे जावा ऑब्जेक्ट से एसओएपी एक्सएमएल प्रतिक्रिया में मार्शल किया गया है।प्रदर्शन को बेहतर बनाने के लिए किसी विशेष जावा ऑब्जेक्ट के लिए अपाचे सीएक्सएफ द्वारा उत्पन्न किए गए मार्शल किए गए SOAP XML को कैश कैसे किया जा सकता है?
हमारे आवेदन को प्रोफाइल करने से, हमने यह निर्धारित किया कि इस ऑब्जेक्ट का मार्शलिंग (जावा ऑब्जेक्ट -> साबुन एन्कोडेड एक्सएमएल) सीपीयू चक्रों का सबसे बड़ा उपभोक्ता है। और चूंकि हमारी फू ऑब्जेक्ट अक्सर बदल नहीं रही है, इसलिए हर बार इस ऑब्जेक्ट को फिर से खोलना अनावश्यक है।
मुझे लगा कि यह एक सामान्य अनुकूलन है और आश्चर्य हुआ कि दूसरों ने इसे कैसे संबोधित किया है। मैंने संक्षेप में सीएक्सएफ दस्तावेज़ों को देखा और एक मार्शल इंटरसेप्टर है जिसे मैं शायद उपयोग कर सकता हूं। मैं एक नक्शा बना सकता हूं जो एक्सएम एन्कोडेड संस्करण में फू ऑब्जेक्ट्स को मैप कर सकता है। लेकिन, फिर कुछ अन्य मुद्दे सामने आते हैं जैसे कि आप इस मानचित्र से ऑब्जेक्ट्स को कैसे हटाते हैं, जब उन्हें अब आवश्यकता नहीं होती है। यह अच्छा होगा अगर ऑब्जेक्ट में बदलावों का पता लगाने और फिर से मार्शल करने के लिए समर्थन में बनाया गया हो। कुछ भी असंभव नहीं था, लेकिन पहिया को फिर से शुरू नहीं करना चाहता था।
संपादित करें (6/16/09): एक कस्टम BareOutInterceptor बनाने और इंटरसेप्टर श्रृंखला को संशोधित करने के लिए कस्टम एक कॉल करने के लिए से कुछ प्रगति की है। कस्टम केवल कुछ लिखने के लिए कुछ अतिरिक्त तर्क जोड़ता है जो "writeParts (....)" विधि को कॉल करता है जो किसी दिए गए जावा ऑब्जेक्ट के लिए केवल एक बार मार्शलिंग करता है। समाधान समाप्त हो जाएगा एक बार समाप्त हो जाएगा। इसके अलावा, मैंने सवाल का नाम बदल दिया।
क्या एसओ पर एक अपाचे सीएक्सएफ विशेषज्ञ है जो हमें बता सकता है कि आउटबाउंड इंटरसेप्टर श्रृंखला में कस्टम मार्शलर को कैसे जोड़ना है? –