Liferay IDE – Creando un Portlet más allá del «hello world»

13 comentarios en “Liferay IDE – Creando un Portlet más allá del «hello world»”

  1. Saludos Jesus estoy tratando de ejecutar este protlet en mi liferay 6.1 el terminar todos los pasos voy a cargar mi portlet del repositorio para colocarlo en la pagina y el portlet muestra el siguiente mensaje «UserRegistration no está disponible temporalmente» investigando un poco en el log del servidor dice «22:44:38,529 ERROR [http-bio-8080-exec-4][render_portlet_jsp:157] org.apache.jasper.JasperException: La uri absoluta: http://java.sun.com/jsp/jstl/core no puede resolverse o en web.xml o el los archivos jar desplegados con esta aplicación» seguí investigando en desarrolloweb.com y dicen que pueda ser por mis librerías añadidas al classpath pero la verdad creo que están bn muchas gracias por tu atencion.

    Me gusta

    1. Voy a realizar una serie de suposiciones, ya que con la información que proporcionas es un poco complicado dar con la respuesta.
      Supongo que:
      -Tienes instalado Liferay sobre MySQL de manera estandar y que este funciona correctamente.
      – Tienes instalado Liferay IDE (plugin de Eclipse) y que al crear un nuevo portlet vacío y hacer un deploy con la tarea Ant, el portlet se crea y visualiza correctamente en el portal.
      – Esta correctamente configurado el class path con las librerías .jar
      – Están bien configurados los taglib en los archivos JSP y tambien en el archivo de configuración.

      Si todo esto está OK debería funcionar correctamente.
      Por lo que comentas parece algo del ultimo punto, no estan configurados los tag libs.

      Un saludo y espero haberte ayudado

      Me gusta

  2. Hola Jesús,

    mi único problema es que a la hora de añadir el portlet en la página este no me aparece en la ventana de «añadir» y no me ha dado ningún problema en el proyecto de Eclipse.

    Un saludo!

    Me gusta

  3. Hola Jesús,

    Llevo varios días peleándome con este portlet y he tenido varios problemas, algunos de ellos los he podido solucionar y otros no.

    Estoy en una fase en la que me ocurre lo siguiente: puedo añadir el portlet a liferay si no modifico los ficheros .xml, tanto el portlet.xml como el porlet-liferay.xml (que curiosamente en mi proyecto se llama al revés, liferay-portlet.xml).
    ¿Qué explicación puede tener?

    Por otra parte, cuando lo añado (sin añadir el código que comentas a los xml), únicamente puedo ver un mensaje que dice «This is the UserRegistration portlet». Dicho código he investigado que se carga en el view.xml que está en la raíz del proyecto. En ningún momento consigo que se cargue el formulario.

    Además de todo esto, también existen varias excepciones en los ficheros jsp que dicen: «Unknown tag (c:out)» y «Unknown tag (fmt:message)».

    Y ya por último, cuando inicio Tomcat, en la consola me sale el siguiente mensaje:

    log4j:ERROR Could not instantiate class [org.apache.log4j.EnhancedPatternLayout].
    java.lang.SecurityException: class «org.apache.log4j.EnhancedPatternLayout»‘s signer information does not match signer information of other classes in the same package
    at java.lang.ClassLoader.checkCerts(Unknown Source)
    at java.lang.ClassLoader.preDefineClass(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2895)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1173)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1681)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at org.apache.log4j.helpers.Loader.loadClass(Loader.java:179)
    at org.apache.log4j.helpers.OptionConverter.instantiateByClassName(OptionConverter.java:320)
    at org.apache.log4j.helpers.OptionConverter.instantiateByKey(OptionConverter.java:121)
    at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:676)
    at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:647)
    at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:544)
    at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:440)
    at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:476)
    at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:471)
    at org.apache.log4j.LogManager.(LogManager.java:125)
    at org.apache.log4j.Logger.getLogger(Logger.java:105)
    at org.apache.commons.logging.impl.Log4JLogger.getLogger(Log4JLogger.java:262)
    at org.apache.commons.logging.impl.Log4JLogger.(Log4JLogger.java:108)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.apache.commons.logging.impl.LogFactoryImpl.createLogFromClass(LogFactoryImpl.java:1116)
    at org.apache.commons.logging.impl.LogFactoryImpl.discoverLogImplementation(LogFactoryImpl.java:914)
    at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:604)
    at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:336)
    at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:310)
    at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:685)
    at org.apache.commons.configuration.AbstractFileConfiguration.(AbstractFileConfiguration.java:121)
    at org.apache.commons.configuration.AbstractFileConfiguration.(AbstractFileConfiguration.java:136)
    at org.apache.commons.configuration.PropertiesConfiguration.(PropertiesConfiguration.java:237)
    at com.liferay.portal.configuration.easyconf.ClassLoaderAggregateProperties._addFileProperties(ClassLoaderAggregateProperties.java:155)
    at com.liferay.portal.configuration.easyconf.ClassLoaderAggregateProperties._addPropertiesSource(ClassLoaderAggregateProperties.java:263)
    at com.liferay.portal.configuration.easyconf.ClassLoaderAggregateProperties.addGlobalFileName(ClassLoaderAggregateProperties.java:76)
    at com.liferay.portal.configuration.easyconf.ClassLoaderComponentConfiguration._getAvailableProperties(ClassLoaderComponentConfiguration.java:115)
    at com.liferay.portal.configuration.easyconf.ClassLoaderComponentConfiguration.getProperties(ClassLoaderComponentConfiguration.java:77)
    at com.liferay.portal.configuration.ConfigurationImpl.getComponentProperties(ConfigurationImpl.java:414)
    at com.liferay.portal.configuration.ConfigurationImpl.printSources(ConfigurationImpl.java:429)
    at com.liferay.portal.configuration.ConfigurationImpl.(ConfigurationImpl.java:78)
    at com.liferay.portal.configuration.ConfigurationImpl.(ConfigurationImpl.java:55)
    at com.liferay.portal.configuration.ConfigurationFactoryImpl.getConfiguration(ConfigurationFactoryImpl.java:32)
    at com.liferay.portal.kernel.configuration.ConfigurationFactoryUtil.getConfiguration(ConfigurationFactoryUtil.java:27)
    at com.liferay.portal.deploy.hot.PluginPackageHotDeployListener.initServiceComponent(PluginPackageHotDeployListener.java:206)
    at com.liferay.portal.deploy.hot.PluginPackageHotDeployListener.doInvokeDeploy(PluginPackageHotDeployListener.java:132)
    at com.liferay.portal.deploy.hot.PluginPackageHotDeployListener.invokeDeploy(PluginPackageHotDeployListener.java:61)
    at com.liferay.portal.deploy.hot.HotDeployImpl.doFireDeployEvent(HotDeployImpl.java:205)
    at com.liferay.portal.deploy.hot.HotDeployImpl.fireDeployEvent(HotDeployImpl.java:96)
    at com.liferay.portal.kernel.deploy.hot.HotDeployUtil.fireDeployEvent(HotDeployUtil.java:27)
    at com.liferay.portal.kernel.servlet.PluginContextListener.fireDeployEvent(PluginContextListener.java:164)
    at com.liferay.portal.kernel.servlet.PluginContextListener.doPortalInit(PluginContextListener.java:154)
    at com.liferay.portal.kernel.util.BasePortalLifecycle.portalInit(BasePortalLifecycle.java:44)
    at com.liferay.portal.kernel.util.PortalLifecycleUtil.register(PortalLifecycleUtil.java:64)
    at com.liferay.portal.kernel.util.PortalLifecycleUtil.register(PortalLifecycleUtil.java:56)
    at com.liferay.portal.kernel.util.BasePortalLifecycle.registerPortalLifecycle(BasePortalLifecycle.java:54)
    at com.liferay.portal.kernel.servlet.PluginContextListener.contextInitialized(PluginContextListener.java:116)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:656)
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1635)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    feb 20, 2014 1:15:10 PM org.apache.catalina.core.ApplicationContext log
    Información: Initializing Spring root WebApplicationContext
    13:15:10,854 INFO [localhost-startStop-10][PortletHotDeployListener:343] Registering portlets for UserRegistration-portlet
    13:15:10,961 INFO [localhost-startStop-10][PortletHotDeployListener:490] 1 portlet for UserRegistration-portlet is available for use

    MUCHAS GRACIAS.

    Me gusta

    1. Gracias por comentar, yo para generar los portlets utilice el plugin de eclipse de Liferay, es bastante cómodo y genera la mayor parte de los archivos necesarios.
      En mi cuenta de github (github.com/jeslopcru) están todos los ejemplos del blog, espero que te sirvan 😉

      Sobre el log que adjuntas, no veo nada claro lo que puede ser, por eso no puedo daré una respuesta clara.

      Me gusta

  4. Hola Jesús.
    He seguido este tutorial paso a paso, pero me ha salido un aviso cuando compilo con el ant y después un error a la hora de refrescar la página web de liferay (localhost:8080).
    El aviso es este:
    21:40:11,368 INFO [com.liferay.portal.kernel.deploy.auto.AutoDeployScanner][BaseDeployer:859] Deploying calculadora-portlet-6.2.0.1.war
    21:40:11,369 INFO [com.liferay.portal.kernel.deploy.auto.AutoDeployScanner][BaseDeployer:962] Updating Calculadora from version 6.2.1 to version 6.2.0.1
    21:40:11,369 INFO [com.liferay.portal.kernel.deploy.auto.AutoDeployScanner][BaseDeployer:971] Not updating Calculadora because version 6.2.1 is newer than version 6.2.0.1

    Y el error (con excepción incluida) es este:
    23:04:40,594 ERROR [http-bio-8080-exec-10][IncludeTag:129] Current URL /web/guest/welcome?p_p_id=145&p_p_lifecycle=0&p_p_state=exclusive&p_p_mode=view&_145_stateMaximized=false&_145_viewEntries=true&_145_struts_action=%2Fdockbar%2Fadd_panel generates exception: null
    java.lang.NullPointerException
    at org.apache.jsp.html.portlet.dockbar.view_005fcategory_jsp._jspService(view_005fcategory_jsp.java:741)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at com.liferay.portal.servlet.DirectRequestDispatcher.include(DirectRequestDispatcher.java:57)
    at com.liferay.portal.servlet.ClassLoaderRequestDispatcherWrapper.doDispatch(ClassLoaderRequestDispatcherWrapper.java:78)
    at com.liferay.portal.servlet.ClassLoaderRequestDispatcherWrapper.include(ClassLoaderRequestDispatcherWrapper.java:53)
    at com.liferay.taglib.util.IncludeTag.include(IncludeTag.java:295)
    at com.liferay.taglib.util.IncludeTag.doInclude(IncludeTag.java:192)
    at com.liferay.taglib.util.IncludeTag.doEndTag(IncludeTag.java:83)
    at org.apache.jsp.html.portlet.dockbar.add_005fapplication_jsp._jspService(add_005fapplication_jsp.java:990)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116)

    He supuesto que el error y la excepción son fruto de las notificaciones anteriores, pero no veo manera de solucionarlo.
    El entorno que utilizo es:
    IDE: eclipse luna.
    Tomcat: Tomcat 7.0.42
    Liferay: liferay-portal-6.2-ce-ga2

    Gracias.

    Me gusta

    1. Lo primero gracias comentar 🙂
      Así a bote pronto no sabría decirte que es lo que está pasando. Yo lo que haría sería eliminar todos los portlets que tengas en esa página y solo tener el que estás desarrollando. Con ello conseguirás evitar cualquier colisión/inconveniente con otros portlets.
      En mi cuenta de github está subido el proyecto (https://github.com/jeslopcru/PortletsDemos) así que puedes echarle un vistazo al código por si te sirve de ayuda.

      Un saludo

      Me gusta

  5. Ok!! Muchas gracias. En realidad, al final ya lo solucioné… no sé muy bien lo que hice, pero creo que fue eliminar el paso 2: Añadirlo al Tomcat. Simplemente con indicarle, durante el proceso de creación del plugin, que el servidor es el que se había instanciado, no hacer falta hacer ese otro paso. Gracias.

    Me gusta

Comenta la entrada

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.