2011-03-18 10 views
12

के साथ असंगत मैं XPages आवेदन में कभी कभी अपवाद सामना कर रहा था:java.lang.ClassCastException का अर्थ: SomeClass SomeClass

java.lang.ClassCastException: someClass incompatible with someClass. 

दोनों उल्लेख किया कक्षाएं एक ही हैं, यह सत्र सेम के रूप में इस्तेमाल वर्ग है। मैं अपनी समस्या को कवर करने वाली किसी भी चीज़ को Google पर नहीं कर पा रहा था। इसके लिए सामान्य स्पष्टीकरण डिजाइन तत्वों में बदल गया था, न कि मेरे मामले में।

XPage एप्लिकेशन अनुपस्थित हो जाता है (सत्र बीन someClass का उपयोग कर पृष्ठ) उस क्षण से, http कार्य को पुनरारंभ करने तक, या चेहरे-config.xml का पुनर्विक्रय।

कुछ मामलों में ऐसे अन्य अपवाद से संबंधित है:

com.ibm.jscript.InterpretException: Script interpreter error, line=x, col=y: 
Java method 'method(signature containg someClass)' 
on java class 'someOtherClass' not found 

इस व्यवहार के पीछे क्या है?

+0

शायद यह Serializable वस्तुओं के साथ एक समस्या है? क्या दूरस्थ संचार शामिल है? – Yashima

+0

यह मेरा विचार भी था, लेकिन मैंने पहले से ही आईबीएम से एक जवाब दिया है, जो इसे समझाता है - समस्या XPages के लिए विशिष्ट है। –

+0

बैकलिंक/अपडेट: [लिंक] (http://www-10.lotus.com/ldd/xpagesforum.nsf/topicThread.xsp?action=openDocument&documentId=C7A145A053E99AB5852578C0004D872A) –

उत्तर

14

फिलिप Riand ईमेल द्वारा इस explaned:

इस वर्ग के कलाकारों इसलिए होता है क्योंकि एक ही कक्षा 2 अलग वर्ग लोडर द्वारा दो बार लोड किया गया था। इस प्रकार, जावा स्टैंडपॉइंट से, वे अलग हैं और कलाकार विफल रहता है।

अब, प्रत्येक XPages एप्लिकेशन में अपना स्वयं का क्लासलोडर है। लेकिन उदाहरण के लिए डोमिनोज़ डिज़ाइनर के माध्यम से, प्रत्येक कक्षा लोडर को एप्लिकेशन में डिज़ाइन परिवर्तन होने पर हर बार त्याग दिया जाता है। यह आवश्यक है क्योंकि एक XPages में परिवर्तन एक नई जावा क्लास उत्पन्न करता है जिसे बाद में पिछले के बजाय लोड किया जाना चाहिए। जब ऐसा होता है, तो क्लासलोडर को त्याग दिया जाता है और एक नया बनाया जाता है। फिर सभी आवेदन संबंधित वर्गों को फिर से लोड किया जाता है, क्योंकि उनकी आवश्यकता होती है, भले ही वे नहीं बदले। यह एक सामान्य व्यवहार है जो जे 2 ईई सर्वर द्वारा लागू किया गया है। उसने कहा, यदि आपका कोड किसी ऑब्जेक्ट को कैश कर रहा है जो डिज़ाइन परिवर्तन होने पर त्याग दिया गया है, तो ऐसा होने की संभावना है। उदाहरण के लिए, एप्लिकेशनस्कोप & सत्रस्कोप वर्तमान में डिज़ाइन परिवर्तन होने पर त्याग नहीं किया जाता है, जिससे इस समस्या का कारण बन सकता है। यह एक डिज़ाइन विकल्प था क्योंकि स्कॉप्स को छोड़कर कभी-कभी खराब डेवलपर अनुभव प्रदान करता है, लेकिन इस कमी के साथ।

अंत में, चेहरे-config.xml को एक वर्कअराउंड के रूप में सहेजते हैं। जब यह फ़ाइल सहेजी जाती है, तो पूरे मॉड्यूल को स्कोप समेत स्मृति से त्याग दिया जाता है, यह बताता है कि यह क्यों काम करता है। अपनी कस्टम जावा क्लास में बदलाव करना मॉड्यूल को फिर से लोड करना और समस्या को हटाना चाहिए।

तो यह sessionScope में सेम (यहां तक ​​कि परोक्ष रूप से) डालने लगता है या applicationScope कारण है।

+0

यह एक जावा ऑब्जेक्ट का भी एक और प्रबंधित बीन उपभोग करने वाला या तो चरणीय रिज़ॉल्यूवर या पैरामीटर के रूप में होता है। जब आप इस जावा ऑब्जेक्ट को एसएसजेएस से कॉल करते हैं और एसएसजेएस कोड युक्त एक्सपेज को संशोधित करते हैं, तो यह तब तक असफल हो जाएगा जब तक कि आप जावा क्लास, क्लीन प्रोजेक्ट को संशोधित नहीं करते या चेहरे-config.xml को सहेजते हैं। –

+0

तो, अगर मैं अपने टेम्पलेट में चेहरे-config.xml फ़ाइल को सहेजता हूं, तो क्या डिज़ाइन रीफ्रेश उस डेटाबेस पर उस प्रभाव को प्रभावित करेगा जिस पर मैं डिज़ाइन रीफ्रेश करता हूं? –

+1

@ डेविड नवरारे बिल्कुल: http://stackoverflow.com/questions/20268457/serverside-xpages-plplication-update-causes-my-browser-page-partial-refresh-acti, http://stackoverflow.com/questions/20268457/serverside-xpages आवेदन अद्यतन-कारणों-मेरी-ब्राउज़र-पेज-आंशिक ताज़ा-acti –

5

यदि एक ही कक्षा फ़ाइल अलग-अलग वर्ग लोडर में लोड की जाती है, तो दो परिणामी जावा क्लासेस समान कक्षा नहीं हैं; आपको दूसरे की अपेक्षा करने वाले कार्यों के लिए एक के उदाहरण पारित करने की अनुमति नहीं दी जाएगी। आम तौर पर, यदि आप इस तरह की समस्या देख रहे हैं, तो ऐसा इसलिए है क्योंकि आपके पास कई बच्चे क्लासलोडर हैं जो एक जार फ़ाइल तक पहुंच सकते हैं जो उनके सामान्य अभिभावक क्लासलोडर को दिखाई नहीं दे रहा है। आपको एक विशेष वेबैप निर्देशिका (उदाहरण के लिए) की बजाय एक सामान्य लाइब्रेरी निर्देशिका में "someclass" युक्त जार को स्थानांतरित करने की आवश्यकता हो सकती है।

+1

आपका उत्तर जे 2 ईई के लिए 100% सही है, लेकिन नहीं XPages के लिए विकल्प। अनुप्रयोग संदर्भ के बाहर कक्षाएं (निर्देशिका जेवीएम/lib/डोमिनोज सर्वर पर ext /) XPages विशिष्ट कोड का उपयोग करते समय अनुपयोगी हैं। –

0

बस यहां अपना अनुभव डालें।

मैं इस मुद्दे पर आने पर कई JVMs के साथ सीएटी पर्यावरण पर अपना ऐप चला रहा था। चूंकि एक ही निर्माण आईटीजी पर्यावरण पर मेरे लिए सफलतापूर्वक चल रहा था, इसलिए मैंने सीएटी पर दोनों जेवीएम को पुनरारंभ किया और त्रुटि हल हो गई। बिल्कुल यकीन नहीं है कि इसका कारण क्या था।