2010-03-02 23 views
6

estoy despliegue de portlets el más básico posible Liferay:Implementación de un portlets simple de 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>"); 
    } 
} 

El despliegue, que estoy recibiendo un ClassCastException:

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

Después de buscar en Google, parece que desplegar portlet.jar es un error - me he asegurado de no estar haciendo esto accidentalmente.

javax.portlet.Portlet está implementado por GenericPortlet, y todos los ejemplos de Portlet parecen extender GenericPortlet, así que supongo que está bien.

¿Alguien puede ayudar?

Respuesta

8

javax.portlet.Portlet se implementa por GenericPortlet, y todos los ejemplos de portlets parece extender GenericPortlet así que supongo que está bien.

Si GenericPortlet implementa Portlet, supongo que tiene un problema con el cargador de clase. La clase se carga dos veces, en dos cargadores de diferentes clases y, por consiguiente, se consideran diferentes.

Después de buscar en Google, parece que portlet.jar despliegue es un error - me he asegurado de que no soy accidentalmente hacer esto.

Todavía sugeriría que se vuelva a comprobar si usted no tiene portlet.jar (o otro frasco que contiene Portlet) cargado dos veces en alguna parte. Las ubicaciones posibles dependen del contenedor que está utilizando (Tomcat? Glassfish?).

+0

Excelente, gracias - me tengo que ir ahora, pero voy a ver esto tan pronto como yo poder. Estoy seguro de que es de hecho un portlet.jar adicional. Sin embargo, definitivamente no está en mi archivo WAR. –

+0

Sí, fue Tomcat - ver mi respuesta a Jaromir, el portlet.jar se quedó atrás en el directorio tomcat/webapps. –

6

Esto definitivamente es un problema de carga de clases. Si es seguro no tiene portlet.jar en su archivo WAR, puede activar la carga de clases detallada y ver de dónde se carga el javax.portlet.Portlet.

Para activar la carga de clase verbosa que pase parámetro siguiente a la JVM:

-verbose: Clase

+1

Ouch. Sí, gracias por la información sobre verbose: class - que me permitió encontrar la respuesta. ¡Sospecho que es mi propia estupidez! Implementé el portlet una vez, incluido el archivo portlet.jar. Luego me di cuenta de mi error y lo eliminé de todas las implementaciones futuras. No obstante, no me había dado cuenta de que el archivo jar aún se queda en el directorio tomcat/webapps. Solución: elimine la carpeta apropiada del directorio webapps y vuelva a implementarla. –

Cuestiones relacionadas