2010-03-02 13 views
6

मैं सबसे बुनियादी Portlet Liferay के लिए संभव तैनाती कर रहा हूँ:Liferay के लिए एक सरल Portlet नियोजित करना - ClassCastException

public class FirstPortlet extends GenericPortlet 
{ 
    @RenderMode(name="VIEW") 
    public void welcomeWelcome(RenderRequest request, 
      RenderResponse response) throws 
      PortletException, IOException 
    {  
     PrintWriter out = response.getWriter(); 
     out.println ("This is a portlet, <em>within a Portal</em>"); 
    } 
} 

तैनाती पर, मैं एक ClassCastException हो रही है:

Caused by: java.lang.ClassCastException: FirstPortlet cannot be cast to javax.po 
rtlet.Portlet 

Googling के बाद, ऐसा प्रतीत होता है कि portlet.jar को तैनात करना एक गलती है - मैंने यह सुनिश्चित कर लिया है कि मैं गलती से ऐसा नहीं कर रहा हूं।

javax.portlet.Portlet जेनेरिकपोर्ट द्वारा लागू किया गया है, और सभी पोर्टलेट उदाहरण जेनेरिकपोर्ट का विस्तार करने लगते हैं, इसलिए मुझे लगता है कि यह ठीक है।

क्या कोई मदद कर सकता है?

उत्तर

8

javax.portlet.Portlet GenericPortlet द्वारा कार्यान्वित किया जाता है, और सभी Portlet उदाहरण GenericPortlet विस्तार करने के लिए तो मुझे लगता है कि ठीक है लग रहे हैं।

GenericPortlet लागू करता है तो Portlet, मेरा अनुमान है कि आप एक वर्ग लोडर मुद्दा है कि है। कक्षा दो अलग-अलग वर्ग लोडरों में दो बार लोड की जाती है और इसके परिणामस्वरूप अलग-अलग माना जाता है।

Googling के बाद, ऐसा लगता है कि तैनाती portlet.jar एक गलती है - मुझे यकीन है कि बनाया है मैंने गलती नहीं कर रहा हूँ यह कर।

मैं अभी भी सुझाव है कि आप पुनः जाँच लें अगर आप portlet.jar (या किसी अन्य जार जो Portlet शामिल हैं) की जरूरत नहीं है दो बार कहीं भरी हुई। संभावित स्थान आप जिस कंटेनर का उपयोग कर रहे हैं उस पर निर्भर करते हैं (टोमकैट? ग्लासफ़िश?)।

+0

बहुत बढ़िया, धन्यवाद - मैं अब छोड़ने के लिए है, लेकिन मैं इस मैं जैसे ही जांच करेंगे कर सकते हैं। मुझे यकीन है कि यह वास्तव में एक अतिरिक्त portlet.jar है। यह निश्चित रूप से मेरी WAR फ़ाइल में नहीं है। –

+0

हां, यह टोमकैट था - जारोमिर को मेरा जवाब देखें, portlet.jar को टॉमकैट/वेबएप निर्देशिका में पीछे छोड़ दिया गया था। –

6

यह निश्चित रूप से क्लासलोडिंग समस्या है। यदि आप सुनिश्चित हैं आपके पास अपने WAR संग्रह में portlet.jar नहीं है तो आप वर्बोज़ क्लासलोडिंग चालू कर सकते हैं और देख सकते हैं कि javax.portlet.Portlet कहाँ से लोड किया गया है।

चालू करने के लिए आप वर्बोज़ JVM पैरामीटर निम्नलिखित पास classloading:

-verbose: वर्ग

+1

ओच। हां, वर्बोज़ के बारे में जानकारी के लिए धन्यवाद: कक्षा - जिसने मुझे जवाब खोजने में सक्षम बनाया। मुझे संदेह है कि यह मेरी अपनी मूर्खता है! मैंने portlet.jar फ़ाइल सहित एक बार पोर्टलेट तैनात किया था। तब मैंने अपनी गलती को महसूस किया और इसे सभी भावी तैनाती से हटा दिया। मुझे एहसास नहीं हुआ था कि हालांकि जार फ़ाइल अभी भी tomcat/webapps निर्देशिका में पीछे छोड़ दी गई है। फिक्स्ड: वेबएप निर्देशिका से उपयुक्त फ़ोल्डर हटाएं और दोबारा पुन: नियोजित करें। –

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