LIFERAY. PROPIEDADES DE PORTAL.PROPERTIES MODIFICADAS QUE AFECTAN A FREEMARKER Y VELOCITY

Hay propiedades en el fichero portal.properties que afectan al procesamiento de plantillas realizadas en Freemarker o Velocity y aquí, aparece uno de los problemas comúnmente asociados al software libre: una nueva versión de la herramienta, puede implicar cambios que afectan a código desarrollado para versiones anteriores.
Es precisamente lo que ha ocurrido con las clases y variables restringidas en Freemarker y Velocity a partir de la versión 6.2 de Liferay. En versiones anteriores nos encontrábamos con:
// Entre otras propiedades…

Sin embargo, si nos bajamos el código fuente de Liferay
Selección de Bundle Liferay
Atención: Datos actualizados a 09/01/2017.
En la actualidad, la zona de descarga de Liferay ha cambiado bastante y se ha orientado totalmente hacia la última versión de Liferay en este momento: Liferay 7. Para cualquier descarga de versiones anteriores o de recursos relacionados a esas versiones: Descargas de Liferay.
…, abrimos el fichero /portal-impl/src/portal.properties con un buen editor y buscamos la palabra Velocity o Freemarker, nos daremos cuenta que ya no existen. Lo que ahora tenemos a nuestra disposición es (se indican las propiedades con los valores que vienen por defecto):
Atención: Datos actualizados a 21/12/2015.

Por tanto, si queremos acceder a esas variables y clases desde nuestras plantillas Freemarker o Velocity, el clásico fichero portal-ext.properties que sobrescribe a portal.properties contendrá algo como:

Parece ser que la razón del cambio es hacer más genéricas estas clases y variables que pueden ser usadas en diferentes contextos.
En cualquier caso, acceder a esas variables y clases en plantillas, implica generalmente que vamos a usar lógica en ellas, lo cual no es recomendable, como tampoco es recomendable el uso de serviceLocator en plantillas, recomendándose mejor usar el método getClass().forName(‘…’). Sobre esto tengo pensado realizar un artículo, así que lo veremos con más profundidad más adelante.
Nada más, un cordial saludo y hasta otra.

ERROR ESTE PORTLET HA SIDO DESINSTALADO. LIFERAY

El error este portlet ha sido desinstalado

El siguiente artículo trata sobre un, llamémosle problema que si no llevas tiempo con Liferay, suele dar algunos dolores de cabeza: el error este portlet ha sido desinstalado.

“Este portlet ha sido desinstalado. Por favor, instálelo de nuevo o elimínelo de la página”.

O en idioma anglosajón:

“This portlet has been undeployed. Please, deploy it or remove it from the page”.

La causa de esto, es que por alguna razón, el registro de la instancia del portlet en cuestión, está mal y, la causa principal, suele ser que se ha eliminado el registro del portlet pero ha quedado una referencia en la página donde aparece, hacia una instancia de éste (las propiedades del portlet instanciado casi siempre).

Vamos con las soluciones.

La primera consiste en simplemente, evitar que aparezca el mensaje, puesto que se trata de un portlet inactivo:
Editamos el fichero (uso Tomcat en el ejemplo):

Si no estuviera creado, lo creamos en ese momento. En cualquier caso, lo editamos y añadimos o cambiamos la siguiente propiedad:

Personalmente, esto lo veo más como una “ñapa” que como una solución ya que la referencia a la instancia inexistente del portlet, sigue en alguna parte.
El principal problema es que no encontramos el enlace para eliminar el portlet de manera definitiva de la página porque no se eliminó anteriormente de la forma adecuada. Sin embargo está ahí, aunque no se vea. Podemos usar Firebug o las herramientas de desarrollo del navegador que se esté usando (Firefox en el ejemplo). Usamos la herramienta de inspeccionar nodos y buscamos el del enlace para eliminar el portlet:
El error este portlet ha sido desinstalado. Inspeccionar DOM del portlet
Una vez tenemos localizado el enlace (elemento a, atributo href), copiamos el valor del atributo href y lo pegamos en la barra de direcciones del navegador y pulsamos la tecla [Intro].
Es una buena solución porque elimina las referencias que queden “errantes”.
Otra posibilidad bastante más laboriosa consiste en parar el servidor de aplicaciones, eliminar la carpeta del portlet de la carpeta webapps. Acto seguido, eliminar los contenidos de las carpetas $TOMCAT/temp y $TOMCAT/work. Reiniciamos el servidor y redesplegamos el portlet.
Por último, podemos eliminar directamente estas referencias huérfanas en la base de datos. Para ello, visualizamos los registros de la tabla layout. Buscamos el registro correspondiente a la página que tiene la instancia incorrecta del portlet y localizamos el campo typesettings. Eliminamos el valor correspondiente a la instancia del portlet problemático.
Hasta otra y ¡Felices fiestas a todos!