Развертывание простого портлета в Liferay - ClassCastException

Я развертываю самый простой портлет из возможных для Liferay:

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

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

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

Кто-нибудь может помочь?


person Dick Chesterwood    schedule 02.03.2010    source источник


Ответы (2)


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

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

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

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

person ewernli    schedule 02.03.2010
comment
Отлично, спасибо, мне пора уходить, но я проверю это, как только смогу. Я уверен, что это действительно лишний portlet.jar. Хотя его определенно нет в моем WAR-файле. - person Dick Chesterwood; 02.03.2010
comment
Да, это был Tomcat - см. Мой ответ Яромиру, portlet.jar остался в каталоге tomcat / webapps. - person Dick Chesterwood; 03.03.2010

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

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

-verbose: класс

person Jaromir Hamala    schedule 02.03.2010
comment
Ой. Да, спасибо за информацию о verbose: class, которая позволила мне найти ответ. Подозреваю, что это моя собственная глупость! Я однажды развернул портлет, включая файл portlet.jar. Затем я осознал свою ошибку и удалил ее из всех будущих развертываний. Однако я не понял, что файл jar все еще находится в каталоге tomcat / webapps. Исправление: удалите соответствующую папку из каталога веб-приложений и выполните повторное развертывание. - person Dick Chesterwood; 03.03.2010