Logotipo de Orbis Sapientia Elearning Services

Servicios de formación. Especialistas en E-learning.

Liferay 7 y fechas

Liferay 7 y fechas

En Liferay gestionamos fechas para casi todo. Incluyo aquellas gestionadas automáticamente para temas de auditoría. A día de hoy, sobre todo cuando desarrollamos, podemos encontrarnos con algunos problemas derivados de la clase java.util.Date que Liferay sigue usando en esta versión más reciente. En este artículo “Liferay 7 y fechas” aprenderemos algunas acciones que nos ayudarán.

Cuando aquellos que trabajamos con esta herramienta, nos enteramos de que esta versión más reciente de Liferay estaría basada en Java 8 , recibimos una gran noticia porque, entre otras cosas, nos librábamos de los fastidiosos errores PermGem.

Sin embargo, nos encontramos con cosas como la siguiente: Liferay sigue usando la clase Java: java.util.Date . Si bien la clase tal cual no está considerada deprecated, si que lo están muchos de sus métodos.

Obtener la fecha de publicación de un contenido, de última modificación, etc., siempre nos devolverá un objeto Date. Tal vez queramos presentar la información que contiene con un determinado formato, hacer conversiones, manipulaciones e incluso cálculos. Según la acción que deseemos realizar, tal vez sea necesario elegir un camino u otro.

Asistente de creación de un nuevo módulo. Liferay 7 y fechas.

DateUtil

Prácticamente, en cualquier sitio donde preguntemos por una alternativa a java.util.Date, nos indicarán que usemos java.util.Calendar .

Liferay, tradicionalmente, provee de ciertas clases que nos ayudan en acciones comunes en nuestro trabajo con Java y aplicaciones web (como lo es Liferay). Una de esas clases es com.liferay.portal.kernel.util.DateUtil .

Es una clase que nos permite comparar fechas, obtener fechas basándose en patrones y localizada, averiguar los días días transcurridos entre fechas diferentes, formatear fechas, parsearlas, etc. Todo de forma más fácil y simple que con cualquier código Java creado desde cero.

Su uso preferente se encuentra en plantillas Freemarker o Velocity. Plantillas de theme, layouts, de aplicación, de listas de datos dinámicas o de contenidos web. Esto es así porque las clases Java y del API de Liferay están en ellas restringidas. Es cierto que modificando la configuración, podemos cambiar este comportamiento (tal como se ve en esta entrada para Liferay 6.2) pero si están accesibles las clases tipo “herramienta” como DateUtil.

La utilidad de esta clase es elevada. Sin embargo, podemos observar como se sigue trabajando con la clase java.util.Date. Tanto en los datos obtenidos como los parámetros de los métodos. Está bien si queremos solamente presentar algún dato tipo fecha y usar solamente las funcionalidades de DateUtil. ¿Pero y si queremos procesar la fecha de una forma determinada, hacer cálculos más complejos, etc.?

¿Echamos mano de Calendar? Insisto, estamos muy contentos con esta versión de Liferay por haber adoptado Java 8. Y esta versión de Java incluye java.time.* . Este paquete es una extensión de java.util.Date y java.util.Calendar. Es mejor usar éste y no los anteriores porque nos permite más y antes o después, las clases de Date y Calendar serán consideradas deprecated.

java.time.*

Se nos pide que nuestra aplicación web, muestre en un formulario un selector con los meses y años de publicación de unos contenidos web. Esos contenidos web deben ser únicamente de un tipo determinado de estructura.

El ejemplo solamente muestra el uso, lo que necesariamente no quiere decir que esta sea la solución definitiva a este problema que expone el ejemplo. Ya sabéis cómo es esto de la programación.

¿Cuándo uso cada cosa?

Como siempre, según lo que necesitemos. Si tenemos que pasar objetos de tipo fecha a una clase del API de Liferay, evidentemente Date. Lo mismo claro está, cuando usamos los métodos de esas clases que provee Liferay y que nos devuelven fechas.

¿Tenemos que procesar esas fechas de una forma más o menos compleja?¿Uso Calendar? Calendar estuvo bien para solventar problemas de localización (o eso es lo que me ha llevado a pensar lo experimentado) pero, remarco, con Java 8, prefiero adelantarme a los acontecimientos y usar java.time.*.

Usaré entonces el paquete Time para evitar posibles deprecated actuales y futuros, cuando deba procesar esas fechas de forma compleja.

Conclusión

Es más que probable que Liferay siga con java.util.Date por motivos de compatibilidad hacia atrás y sobre todo, porque cambiar Date en su API, le supondrá un trabajo titánico. Sin embargo, en la medida de lo posible iría migrando los códigos de mis módulos y plantillas para que vayan utilizando java.time.*. Una opinión personal basada en experiencias pasadas con Liferay y alguna de sus clases.

Deja un comentario

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

";}
X