Translate

miércoles, 21 de enero de 2015

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

Patrocinador




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...

journal.template.freemarker.restricted.variables=serviceLocator
journal.template.velocity.restricted.variables=serviceLocator

Sin embargo, si nos bajamos el código fuente 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.
freemarker.engine.restricted.classes=\ 
java.lang.Class,\
java.lang.ClassLoader,\
java.lang.Thread
freemarker.engine.restricted.packages=
freemarker.engine.restricted.variables=serviceLocator
velocity.engine.restricted.classes=\
java.lang.Class,\
java.lang.ClassLoader,\
java.lang.Thread
velocity.engine.restricted.packages=
velocity.engine.restricted.variables=serviceLocator

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:

freemarker.engine.restricted.classes=
freemarker.engine.restricted.variables=
velocity.engine.restricted.classes=
velocity.engine.restricted.variables=

// Y para guardar compatibilidad hacia versiones anteriores:
journal.template.freemarker.restricted.variables=
journal.template.velocity.restricted.variables=

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.

Un cordial saludo a todos y hasta otra.

No hay comentarios:

Publicar un comentario

Una opinión constructiva siempre es bienvenida. Gracias por tu aportación.