Un gestor de portales
A día de hoy existen múltiples herramientas que facilitan el desarrollo de un sitio web. Un ejemplo básico son los WordPress, Joomla, Drupal y demás paquetes de software libre sobre PHP + MySQL, que se engloban en la categoría de CMS. Estas soluciones son ampliamente utilizadas dentro y fuera del mundo empresarial, existiendo un inagotable entusiasmo y competencia entre ellas que las hace evolucionar constantemente.
Liferay es también un CMS en el sentido de que permite gestionar el contenido y apariencia de una web con un modelo de componentes, y mediante una serie de interfaces visuales más o menos intuitivos. Sin embargo, hay algo que le hace ser diferente: los portlets. El término es una más de esas palabrejas técnicas en inglés imposible de traducir. Los portlets, según la Wikipedia, son componentes modulares de las interfaces de usuario gestionadas y visualizadas en un portal web. ¿Qué, cómo te has quedado? Espera, que un poco más adelante siguiendo la metáfora de escritorio, una página de un portal se visualiza como una colección de ventanas de portlet que no se solapan, donde cada una de estas muestra un portlet.
En definitiva, Liferay permite al administrador de un portal gestionar todo el contenido como si fuera el típico escritorio con sus ventanas, moverlas de sitio, añadir, eliminar, etc. Este es el punto más distintivo de esta herramienta respecto a los CMS convencionales. Los usuarios utilizan las aplicaciones predefinidas por el administrador, y no pueden moverlas o eliminarlas a su gusto. Pero es posible configurar un espacio personal para cada usuario, una serie de páginas donde él gestiona qué y cómo quiero verlo.
Otro punto fuerte de la herramienta es que cuenta con más de 50 aplicaciones (portlets) listas para utilizar, como blogs, wiki, foros, agenda, sindicación de noticias vía RSS, o la ya indispensable calculadora de préstamo hipotecario. Entre estos portlets out-of-the-box hay de todo: más y menos útiles, más y menos configurables, y con más o menos bugs de fábrica. Si todo eso no te resulta suficiente, puedes crear aplicaciones a medida e integrarlas como portlets en tu portal de Liferay. Se necesita mucho Java, bastante tiempo y un cargamento importante de paciencia.
Desarrollando en Liferay
En Init, dentro de los distintos proyectos que hemos realizado con esta herramienta, hemos empleado casi todos los portlets predefinidos. También hemos creado aplicaciones ad hoc para solventar necesidades específicas de nuestros clientes, integradas con procesos y fuentes de datos empresariales. Dichos módulos en la solución final aparecen como portlets, que se pueden mover y gestionar igual que si fueran nativos de la herramienta. Sin duda la extensibilidad es uno de los puntos fuertes de Liferay, aunque no está ahí tan de serie como el airbag de nuestro coche, sino que hay que realizar ciertos esfuerzos para ganársela.
¡Sin duda en esta empresa se trabaja mucho!
Pero quizá todavía te estés preguntando el porqué del título inicial y ahora toca: no es oro todo lo que reluce bajo este software que se hace llamar Rayo de Vida.
Durante el desarrollo nos tocó lidiar con una serie de bugs en el producto, como por ejemplo:
- LPS-12766: struts logic:iterate displays nothing when using struts liferay portal bridge. A la hora de desarrollar un portlet a medida con Struts, la etiqueta logic:iterate no mostraba nada. Este bug hizo que tuviéramos que cambiar todo el código ya realizado a JSTL y su etiqueta forEach. Que yo sepa, tras meses no han hecho nada por arreglarlo.
- LPS-12810: Error on Summary Tab of Calendar. En el portlet de calendario, había discordancia entre el día seleccionado y los eventos mostrados, según ciertas condiciones. Esto era muy desagradable en nuestro caso concreto, pues dicho portlet ocupa la posición preferente de la página de entrada a la Intranet. De momento lo han arreglado en la versión EE solamente (luego comentamos).
- LPS-6253: Repeating Calendar events don’t work when the JVM user.timezone is not GMT/UTC. Tratamiento incorrecto de los eventos periódicos cuando la zona horaria no es exactamente GMT. Esto hizo que tuviéramos que eliminar directamente la posibilidad de eventos periódicos del calendario (sí, ese portlet que se nos ocurrió poner en el primer lugar de la primera página)
- 15707: Impossible to admin personal folders in image gallery. No había forma de que un administrador gestionara las imágenes subidas por los usuarios en los blogs, foros, etc. Ahora la hay… ejem, solo en el Liferay de nuestro cliente, pues al ser prioritario para ellos tuvimos que implantar una solución ad hoc
- LPS-17827: Blog subscription links don’t work with SSL. Los portlets de blogs y foros permiten a los usuarios suscribirse, para recibir correos cuando hay novedades. Pues bien, bajo entorno seguro SSL, los enlaces a las entradas de blog no son correctos.
Pero más allá de estos bugs concretos y localizados, el problema grande del desarrollo con Liferay es la falta de documentación. Existen algunas guías y muchos mini-tutoriales, pero en el momento que tienes un problema con algo, prepárate para bucear durante un rato en foros, wikis, etc… rezando para que a alguien le haya pasado lo mismo, lo haya solucionado, y lo haya escrito en algún sitio. En especial el desarrollo serio de portlets a medida (esto es, Struts+Hibernate) ha sido un parto difícil.
Por ejemplo, fue una broma de muy mal gusto lo que nos ocurrió con las versiones. Resulta que trabajábamos con la 6.0.4 y en un momento dado salió la 6.0.5. Igual han solucionado algunos problemillas, pensamos, y nos pusimos a trabajar alegremente con la nueva versión. El código de una aplicación a medida que estábamos ultimando había dejado de funcionar, pero no lo relacionamos con el cambio de versión. Nunca nos imáginamos que los chicos de Liferay serían capaces de aprovechar un cambio del número menor para actualizar la librería básica de Javascript para el interfaz (Alloy). ¡Pero vaya que lo fueron! ¡Y sin avisar en las notas de lanzamiento ni nada! En todos sitios cuecen habas, y en el software libre también hay nocturnidad y alevosía.
Otro problema importante ha sido coordinar Liferay con IE 8. Con Firefox todo de maravilla, pero muchas veces me ha dado la impresión que la gente de Liferay no ha dedicado energía al IE, ¿o quizá no les importa mucho? ¿O son anti-Microsoft y lo hacen a posta? Como muestra, al intentar imprimir cualquier página de la Intranet, se tira 45 segundos pensando y luego te suelta el diálogo de impresión (bug LPS-16400). Esto le pasa a la gente desde Arizona a Osaka, al parecer. Pero también, la parte de administración se descuadra a menudo. Qué decir de los gremlins, poltergeist, aliens, etc. con los portlets de aplicaciones a medida. Ahora te veo, ahora no. Me cambias una opción del IE por menú, me cabreo y te fastidio todo el Javascript de la Intranet. Y siempre, siempre todo bien en Firefox.
Conclusiones
Una de las causas de todo esto es el modelo de doble licencia de Liferay, que tienen otros productos también. Existe una Community Edition (CE), que es válida para entornos en producción, siempre que sea soportada por un gran conocimiento del producto y de las tecnologías que lo sustentan. Y luego está la Enterprise Edition (EE), que vale un dinero, y viene con soporte oficial, documentación, actualizaciones de código, etc. Quizá en los últimos tiempos la gente de Liferay se ha centrado demasiado en la EE, y como es normal, tratan de convertir a usuarios en clientes. Están en buena posición por la poca competencia que tiene su producto. Pero no deberían descuidar la CE, pues sin un buen producto a coste 0, para empresas y desarrolladores dejará de ser atractiva esta opción.
Cuando se destacan tanto los problemas parece que la impresión ha de ser negativa, pero no es así. En mi opinión, Liferay es un gran paquete de software libre que facilita la construcción y gestión de un portal empresarial complejo (muchas páginas, muchas aplicaciones, muchos usuarios). Es más, creo que no tiene ningún rival serio dentro de su nicho. Los problemas grandes o pequeños que se han enumerado antes son comunes en el mundo del software libre, y de hecho en el mundo del software en general. Los bugs son inevitables, lo único a cambiar es nuestra actitud ante ellos.
Y si has llegado hasta aquí y no piensas lo mismo, quizá deberías dejar un comentario abajo.

(5 votes, average: 9,40 out of 10)








¿Si el último proyecto, en vez de haber usado Liferay 6, hubiéramos atacado con liferay 5, el resultado habría sido distinto? a saber…
A recalcar el cambio de javascript de 6.0.4 a 6.0.5… Creo que por debajo cambiaron la versión YUI en la que se basa el Alloy… Y en concreto, desaparecieron todos los campos de fecha: todos los DatePicker habían ido a parar al cielo (o infierno) de los datepicker!!!
Desde Arizona a Osaka… y ahora Bilbao
Uf, todavía tengo pesadillas con datepickers que se evaporan por arte de magia.
¿Liferay 5? No creo que hubiera cambiado mucho. Se habría perdido calidad, pues la nueva versión está mejorada.
Sí hubiera cambiado bastante tener la versión EE en vez de la community con su soporte y tal, pero eso es harina de otro costal, y yo programador y no harinero
Gracias por la revisión de Liferay, especialmente por la buena nota que le das al producto y más aún por mencionar los problemas que habéis tenido. Esta información nos resulta muy útil para saber en qué podemos mejorar de cara al futuro.
En relación al cambio de versión de Alloy, no era consciente de los problemas que mencionas. Te agradecería si pudieras dar más detalles para evitar que vuelva a ocurrir en el futuro. En principio la actualización debía ser compatible hacia atrás por lo que no se mencionó en el resumen de cambios (pero si en la lista detallada obtenida a través de JIRA).
Respecto a la documentación, en este momento estamos escribiendo varios capítulos nuevos en las dos guías oficiales. Hay algún aspecto en particular que echas en falta que te gustaría que tuviéramos en cuenta. Otra iniciativa en la que estamos trabajando es en mejorar significativamente la documentación JavaDoc que será especialmente útil tanto para iniciarse en el uso de la API como para entender cuando algo no funcione cuando se espera.
Por último, siento que tengas la percepción de que la Enterprise Edition haya podido desviar la atención de la Community Edition. En relación a esto quiero aclarar que no se trata de dos productos distintos, todo el desarrollo se hace en abierto junto a los miembros más activos de la comunidad en la Community Edition y con el objetivo de que tenga la mayor calidad posible y las mejores funcionalides. La Enterprise Edition se construye a partir de la última versión estable de la Community Edition e incluye varios servicios como ‘builds’ certificadas, servicio de actualizaciones y servicio de soporte entre otros.
De hecho gracias al éxito que está teniendo la Enterprise Edition hemos podido contratar mucha más gente para el departamento de QA que resuelven siempre los problemas en trunk y por tanto benefician a la edición Community.
Un saludo,
Jorge
Hola Jorge, muchas gracias por tu comentario, nos sentimos muy honrados de que una persona destacada de Liferay España nos cuente sus impresiones… a los 2 minutos de publicar el post
Respecto al cambio de versión de Alloy, realmente era un cambio de versión en la librería YUI, si recuerdo bien en la 6.0.4. se usaba YUI2 y en la 6.0.5., YUI3. Teníamos varios datepicker que con el cambio dejaron de funcionar, debido a ciertos cambios en el paso de parámetros a las funciones, cambios que por otra parte casi tuvimos que dilucidar navegando por el código.
Es cierto que las guías de usuario y administración son muy completas, pero nuestro principal problema ha sido al desarrollar aplicaciones a medida. Los portlets de ejemplo eran muy básicos, y sobre todo no había instrucciones para llevar nuestra arquitectura base (Struts + Spring + Hibernate) dentro de los portlets. Tampoco había información en el wiki, foros… ¿Tan raro era lo que estábamos haciendo? Al final no es complicado, pero hay tres o cuatro pasos clave que fueron el cuello de botella, y se pasaron por prueba y error.
Me ha resultado muy aclaratorio lo que comentas de las versiones CE y EE, gracias, aunque nunca llegué a pensar que fueran dos productos distintos.
En general, valoramos mucho el producto, y los clientes suelen quedar muy contentos con lo que ofrece, la intención del post era también crear un poco de “polémica” entre desarrolladores con alguna experiencia en la herramienta.
Para terminar solo puedo decir que mucho ánimo y que sigáis aportando calidad al mundo del sofware libre.
Saludos
Gracias Diego por el aporte y por dar un poco más de luz en ese rayo de la vida por el que tanto has tenido que pelear. Saludos!
Muy buen artículo.
En mi opinión, la falla fundamental del producto actualmente es la documentación, aunque he de reconocer que he observado como la guia de adminitración y desarrollo ha crecido este año con mas detalle.
Creo que debería trabajarse mas los siguientes puntos en las futuras versiones:
1- Un capítulo dedicado a como desarrollar portlets fuera del SDK con las tecnologías mas típicas (JSF,Springs, Struts,etc)
2- Un capítulo en que se detalle un poco almenos las APIs de liferay mas comunes.
3- Trabajar mas el javadoc, a día de hoy me parece muy floja como documentación, apenas se describe nada mas que listar los métodos.
Se que hay una guia oficial (liferay in action), de pago, pero creo se debería focalizar un poco los puntos anteriores en las guías que hay en la web colgadas, ya que está la información dispersa por la web por las wikis, foros, etc.. y es algo durillo para consultar.
Saludos
Gracias por tu aporte, está claro que uno de los puntos a mejorar en Liferay es la documentación, y los puntos que señalas son importantes. Saludos
Hola Harkonen,
Gracias por tus sugerencias. Ya he mencionado en comentarios anteriores los puntos #1 y #3. Respecto al #2, ya hemos empezado a hacerlo en el siguiente capítulo:
http://www.liferay.com/es/documentation/liferay-portal/6.0/development/-/ai/liferay-apis-and-frameworks
En este momento estamos extendiéndolo con más secciones y el objetivo es cubrir todas las APIs y frameworks más usados dentro de Liferay.
Hola,
Tienes razón en lo que comentas de Struts + Spring + Hibernate. Una propuesta que he hecho recientemente a los responsables de la documentación es incorporar un capítulo que aborde las tecnologías principales de desarrollo web en Java y su uso dentro de portlets. Sería muy interesante si pudierais contribuir la información que habéis recopilado sobre el uso de vuestro stack. Podéis añadirlo como un artículo del Wiki, o si sólo lo tenéis en Español, publicarlo en el foro en español y pedir voluntarios para traducirlo y añadirlo al wiki.
Respecto al problema con Alloy, este siempre ha usado YUI 3, pero quizá cambió algo por algún otro motivo. Lo coméntare con Nate para que lo tenga en cuenta para futuras versiones.
Mucho ánimo con los desarrollos que seguís haciendo con Liferay. Ya me he suscrito al blog para estar al tanto de vuestros progresos.
Un saludo,
Jorge
Hola y gracias por el articulo y las respuestas, desde hace unos meses estoy tratando de conocer màs este producto, quisera saber si hay alguna documentaciòn en espanol, y otros sitios donde pueda aprender de una manera ràpida y efectiva el uso de java, cms y todo lo referente a la programaciòn que me ayude luego en el uso de Liferay. Soy nueva en esto pero me intresa mucho. Gracias de nuevo
Hola Olga, gracias por tu comentario.
Respecto a la documentación de Liferay, en español, que yo sepa, es bastante escasa. Aquí hemos tirado de las fuentes en inglés. De todas formas en la web de Liferay hay un foro en español:
http://www.liferay.com/es/community/forums/-/message_boards/category/35288
Respecto a Java en general, hasta que este “Init Developers” se convierta en una referencia
te recomiendo JavaHispano, tienen mucha documentación, tutoriales, foros, etc:
http://www.javahispano.org/documentacion/
Darranz gracias por tu ayuda veo enseguida la informaciòn que me dices. Gracias
Buscamos un Experto Liferay (Freelance). Que pudiera incorporarse a nuestro equipo de desarrollo interno (de forma remota o presencial) durante varias semanas para ayudar con el desarrollo de ciertas funcionalidades. Si estás interesado, envíanos tu CV a: ccantera@summabeta.com
Hola,
Soy nuevo con el liferay, y quisiera usarlo, pero primero necesito saber como agregar articulos atraves de la API.
Actualmente tengo un CMS creado en casa con muchos articulos y quisiera saber como migrarlos a la base de datos de liferay?
Lo otro, es que al configurarlo con oracle 10g, me dio el siguiente error: org.hibernate.QueryTimeoutException: could not load an entity: [com.liferay.counter.model.impl.CounterImpl#com.liferay.counter.model.Counter….
Espero puedan ayudarme…
Saludos.
Hola el error exacto es el siguiente:
ERROR [JDBCExceptionReporter:234] ORA-01002: fetch out of sequence
16:35:02,106 ERROR [MainServlet:197] com.liferay.portal.kernel.events.ActionException: com.liferay.portal.kernel.exception.SystemException: com.liferay.portal.kernel.dao.orm.ORMException: org.hibernate.QueryTimeoutException: could not load an entity: [com.liferay.counter.model.impl.CounterImpl#com.liferay.counter.model.Counter]
com.liferay.portal.kernel.events.ActionException: com.liferay.portal.kernel.exception.SystemException: com.liferay.portal.kernel.dao.orm.ORMException: org.hibernate.QueryTimeoutException: could not load an entity: [com.liferay.counter.model.impl.CounterImpl#com.liferay.counter.model.Counter]
at com.liferay.portal.events.StartupAction.run(StartupAction.java:58)
Por favor espero ayuda…
Saludos