2010-03-02 2 views
6

Я развернув самый основной портлет возможное для Liferay:Развертывание простой портлет Liferay - 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 

После погуглить, похоже, что развертывание portlet.jar является ошибкой - я убедился, что не случайно это делаю.

javax.portlet.Portlet реализуется GenericPortlet, и все примеры портлетов, похоже, расширяют GenericPortlet, поэтому я предполагаю, что все в порядке.

Может ли кто-нибудь помочь?

ответ

8

javax.portlet.Portlet осуществляется по GenericPortlet, и все портлетов примеры, кажется, расширить GenericPortlet поэтому я полагаю, что это нормально.

Если GenericPortlet реализует Portlet, я предполагаю, что у вас есть проблема с загрузчиком класса. Класс загружается дважды, в двух разных загрузчиках классов и по последнему слову считается разным.

После погуглить, оказывается, что развертывание portlet.jar ошибка - я сделал уверен, что я не случайно делать это.

Я бы еще предположить, что вы дважды проверьте, если у вас нет portlet.jar (или другой сосуд, содержащий Portlet) загружается в два раза где-то. Возможные местоположения зависят от используемого вами контейнера (Tomcat? Glassfish?).

+0

Отлично, спасибо - я должен уйти, но я проверить это, как только я Можно. Я уверен, что это действительно дополнительный портлет.jar. Это, безусловно, не в моем WAR-файле. –

+0

Да, это был Tomcat - см. Мой ответ на Jaromir, portlet.jar остался в каталоге tomcat/webapps. –

6

Это определенно проблема с загрузкой. Если вы уверены, что у вас нет файла portlet.jar в вашем архиве WAR, вы можете включить многословную загрузку классов и посмотреть, где загружен файл javax.portlet.Portlet.

Для включения вы многословны загрузки классов пройти следующий параметр в JVM:

-verbose: класс

+1

Ouch. Да, спасибо за информацию о verbose: class - это позволило мне найти ответ. Я подозреваю, что это моя собственная глупость! Я развернул портлет один раз, включая файл portlet.jar. Затем я осознал свою ошибку и удалил ее из всех будущих развертываний. Я не знал, однако, что файл jar по-прежнему остается в каталоге tomcat/webapps. Исправление: удалите соответствующую папку из каталога webapps и снова переустановите. –

Смежные вопросы