Arquitectura de Liferay – entendiendo permisos, roles, usuarios…

Ya hemos visto en otros post como desarrollar porltets, la arquitectura de un portlet o incluso como Spring Framework maneja las peticiones para desarrollar portlets. Ahora ya es hora de entender un poco mejor la arquitectura de Liferay.

Para que un producto tan grande como Liferay hay muchas maneras de representar la arquitectura. Yo voy a basarme en la documentación oficial de Liferay http://www.liferay.com/documentation/liferay-portal/6.0/administration/-/ai/portal-architectu-4 para intentar explicar cómo funcionan los roles, las organizaciones, etc.

Vamos a ir desgranando cada uno de los elementos, empezando por el más importante. Los usuarios.

Usuarios

Son las personas físicas que usan el sistema.

  • A los portales son acceden usuarios
  • Los usuarios pueden concentrarse en grupos de usuarios.
  • Los usuarios pertenecen a organizaciones

Por defecto, los usuarios tienen una serie de páginas públicas (que le servirán para tener su propio blog por ejemplo) y  privadas (que le servirán para tener un calendario personalizado)

Continúa leyendo «Arquitectura de Liferay – entendiendo permisos, roles, usuarios…»

Anuncio publicitario

Aprendiendo a validar formularios con Liferay IDE y AlloyUI

Ya hemos visto en anteriores post como crear portlets, incluso hemos realizado un portlet pequeño con Spring y hemos utilizado Service Builder para conectarnos con la base de datos.

Ahora llega el momento de intentar “poner bonito” a nuestros portlet. He de decir que no se mucho de frontend, más bien sé lo básico. Aunque estoy aprendiendo mucho con el libro de Liferay in Action. En él hay un capitulo donde se habla de AlloyUI y la verdad, me ha parecido una utilidad muy interesante, así que voy a crear un pequeña introducción sobre AlloyUY.

Que es AlloyUI

En pocas palabras, AlloyUI es un metaframework  de interfaz, esto quizás suene un poco raro, pero tranquilo, ahora daremos más detalles.

El frontend de las páginas web (normalmente) se crean utilizando un combinación de 3 tecnologías: HTML, CSS y Javascript. Estas 3 tecnologías unidad constituyen la experiencia de Usuario (UX) para cualquier sitio web.

Básicamente, HTML proporciona la estructura de la página, CSS proporciona la capa visual, es decir cómo se representan visualmente los elementos y Javascript ofrece la interacción de los elementos de la página. Si algo se mueve, cambia de forma, se arrastra “es culpa” de Javascript.

Continúa leyendo «Aprendiendo a validar formularios con Liferay IDE y AlloyUI»

Service Builder para desarrollar un portlet con gestión de base de datos Parte 3/3

Ya estamos terminando nuestro portlet para Liferay que nos ayudará a aprender y gestionar tareas Por si no recordáis o acabáis de llegar a este post aquí os dejo un par de links a la parte 1 y a la parte 2 respectivamente.

https://jesuslc.com/2013/05/07/utilizando-spring-para-desarrollar-un-portlet-para-liferay-con-base-de-datos-service-builde

https://jesuslc.com/2013/05/14/service-builder-para-desarrollar-un-portlet-con-gestion-de-base-de-datos-parte-23

Vamos a poner de nuevo como quedará el portlet porque hoy viene una de las partes más importantes, la vista:

Llegados aquí ya tenemos el Service Builder montado, si recordáis con solo definir un par de entidades con sus columnas correspondientes en el archivo services.xml y pulsar sobre la tarea (ant) “build Services” creamos un montón de código que nos sirve para mapear la base de datos. En el anterior post vimos cómo crear los controladores, en este ya tenemos el final. Vamos a definir 5 archivos JSP donde programaremos todos los elementos gráficos.

Creando el init

Así que lo primero para tener bien organizado el código será crear una carpeta llamada “JSP” (imaginación al poder) en docroot.

En Este nuevo directorio “/docroot/jsp” creamos el primer archivo llamado init.jsp Este primer archivo no tiene nada de vista, solo todas las importaciones de taglib, lo hacemos así para no repetir el mismo código de importaciones en todas las clases. También hemos definido 3 variables que nos ayudaran a no repetir código.

Continúa leyendo «Service Builder para desarrollar un portlet con gestión de base de datos Parte 3/3»

Service Builder para desarrollar un portlet con gestión de base de datos Parte 2/3

En la primera parte de este post vimos cómo crear un service builder, ahora vamos a trabajar para terminar el portlet.

Para no perder el foco, así es como quedará nuestro portlet gestor de tareas para Liferay.

Ahora en este post vamos a seguir desarrollando el portlet, si recordáis dejamos el portlet justo después de pinchar en service builder, el árbol del proyecto ha quedado más o menos así.

Ahora vamos a seguir desarrollando el portlet, para ello utilizaremos un patrón MVC, donde ya tenemos casi terminado el modelo, ¡y no hemos escrito nada de código! Solo un archivo y mira ya todo lo que hemos hecho 😉

Creando una utilidad

Como vimos en un post anterior, el controlador es el encargado de manejar a la vista y al modelo, para ello vamos a crearnos una clase que nos será muy útil.

Continúa leyendo «Service Builder para desarrollar un portlet con gestión de base de datos Parte 2/3»

Service Builder para desarrollar un portlet con gestión de base de datos Parte 1/3

En el blog ya hemos tratado el tema de crear portlets que procesan un formulario así que ya he llegado la hora de aprender a utilizar portlets que interactúen con la base de datos.

Existen muchas maneras de crear portlets que utilicen la base de datos de Liferay, pero en este hoy vamos a aprovecharnos un poco más de Liferay IDE y vamos a aprender a utilizar Service Builder.

Para realizar este post me he basado en las explicaciones de los libros “Liferay in Action” y “Portlets in Action”, además de utilizar como idea de base el portlet de Albert Coronado disponible en el Marketplace de Liferay, sí como la documentación oficial de Liferay.

Service Builder

Es una herramienta integrada en el plugin de Liferay para Eclipse que genera el código necesario (clases e interfaces) para crear una capa de servicio y poder utilizar la persistencia.

¿Por qué utilizar Service Builder?

En un principio cuando nos conectamos a base de datos utilizamos JDBC para obtener una conexión e implementar los métodos de acceso. El problema es que mantener el código es un poco difícil, consultas SQL, acoplamiento con la base de datos, había que tener cuidado con las inyecciones SQL,… en fin eran necesarias mucho esfuerzo para mantenerlo todo.

Después llegaron los EJB´s y para no alargar mucho la explicación llegó Hibernate, que tomó un enfoque un tanto diferente. Hibernate crea un mapeo entre objetos del mundo Java y tablas de la base de datos, lo que ayuda al programador a “desentenderse” de la base de dato y utilizar objetos Java con los que está familiarizado.

La combinación de Spring e Hibernate se utiliza desde hace mucho tiempo, Spring e Hibernate nos ayudan a construir portlets y aplicaciones web de una manera bastante sencilla.

Como ya hemos dicho Service Builder es una utilidad creada por Liferay que nos ayuda con todo este proceso. Con solo definir un archivo XML se genera automáticamente toda la configuración de Hibernate y Spring que un portlet pueda interactuar con la base de datos.

Continúa leyendo «Service Builder para desarrollar un portlet con gestión de base de datos Parte 1/3»

Entendiendo Spring Portlet MVC

Ya hemos creado nuestro primer portlet con Spring Portlet MVC, incluso antes desarrollamos una pequeña demo con Maven, Hibernate y Spring. Ahora me gustaría entender cómo funciona esto de Spring Portlet MVC.

Aquí intentaré mostrar un esquema de cómo se maneja una petición en un portlet, es decir, como funciona nuestro pequeño portlet de “hola mundo”. En este caso el portlet solamente realiza una cosa: “mostrar un mensaje”.

Bueno pues cuando se carga la página en la que se encuentra el portlet, ahí una llamada (request) a nuestro portlet HelloSpring ¿Cómo se gestiona esa llamada? ¿Por qué clases va pasando? Con esto aprenderemos un poco mejor como es el patrón Modelo, Vista, Controlador.

¿Qué hace DisparcherPortlet?

DisparcherPortlet es el corazón del framework Spring Portlet MVC , por ello es el responsable de coordinar todas las peticiones de actividad de nuestro portlet.

Continúa leyendo «Entendiendo Spring Portlet MVC»

Desarrollando un portlet para Liferay utlizando Spring framework

Ya hemos visto como desarrollar portlet para Liferay y también como desarrollar una pequeña aplicación con Spring e Hibernate. ¿Por qué no unirlo todo? Creo que sería una gran idea poder realizar un portlet para Liferay utilizando Spring e Hibernate. No, no soy un visionario, ni un gurú. Ya existen miles de portlet así, pero a mí me encanta aprender y creo que será genial aprender cómo se realiza un portlet para Liferay utilizando Spring e Hibernate. Creo que mi SEO se verá resentido con eso no poner siempre lo mismo 😉

Para empezar vamos a realizar un pequeño “hello world” para irnos haciendo con el entorno, que aun siendo conocido (como es el caso de Liferay IDE) siempre es conveniente comprobar que todo funciona antes de atascarnos en algo más complejo.

Antes de empezar vamos a dejar claro que es la Dependencia de Inyección. Según la Wikipedia es un patrón de diseño orientado a objetos, en el que se suministran objetos a una clase en lugar de ser la propia clase quien cree el objeto.

Para que nos quede más claro en el Libro “Portlets in Action” nos ponen un ejemplo muy aclaratorio que voy a “traducir” a continuación:

Imaginemos que tenemos entre manos una aplicación para un ecommerce, esta aplicación tiene estos objetos definidos (puede que tenga muchos más, pero nos centraremos en estos de momentos).

  • OrderHandler: Un componente de la capa de presentación es responsable de manejar las órdenes cursadas por los clientes.
    Depende OrderService para guardar las ordenes entregadas (submitted)
  • OrderService: Un componente que contiene la lógica de negocio para guardar un orden en la base de datos. Depende OrderDAO para guardar la información de la orden en la base de datos.
  • OrderDAO: Un objeto de acceso a datos que es responsable de la interacción con la base de datos para guardar la información de pedido enviado por el cliente.

Este sería el esquema de dependencias de las clases que hemos expuesto aquí

Continúa leyendo «Desarrollando un portlet para Liferay utlizando Spring framework»

Añadir soporte multiidioma al desarrollo de portlets en Liferay

Al realizar nuestros portlet puede ser interesante que estos sean multiidioma. Si esto no nos convence, con la solución que proponemos aquí tenemos un fichero donde están localizadas todos los nombres de todos los elementos del HTML.

Para que esto sea más sencillo vamos a verlo con un ejemplo. En un post anterior creamos un portlet con un formulario como este:

Si ahora quisiésemos modificar el elemento First Name  y ponerle otro nombre por ejemplo Nombre deberíamos modificar todas las páginas  en las que apareciese dicho elemento.

Para evitar que estos cambios afecten a nuestro desarrollo, vamos a explicar como añadir archivos .properties.

Continúa leyendo «Añadir soporte multiidioma al desarrollo de portlets en Liferay»

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

Vamos a crear un portlet con un poquito de chicha utilizando Liferay IDE, no es el típico hola mundo, sino un pequeño formulario, así aprenderemos como procesar un formulario con Liferay.

Lo primero será crear el portlet, como vemos aquí:

Lo añadimos a Tomcat.

Con esto tenemos creado un portlet “Hola mundo”, pero vamos a ir un poco más allá, vamos a procesar un formulario para ver cómo se trabaja con los distintos modos del portlet y así tener un portlet con algo de funcionalidad.

Lo primero que vamos a hacer es crear una clase llamada UserRegistrationPortlet que extienda a GenericPortlet, esta clase estará dentro de la carpeta src, en el paquete com.jesuslc

Continúa leyendo «Liferay IDE – Creando un Portlet más allá del «hello world»»

Aprendiendo sobre portlets

Cuando nos decidimos a utilizar Liferay una de las cosas que debemos tener en cuenta es que debemos aprender sobre portlets.

Pero por dónde empiezo a la hora de desarrollar un portlet, que métodos tengo que implementar, como es el ciclo de vida de un portel.

Estas son muchas de las preguntas que nos surgen y que vamos a recopilar aquí.

Donde se ejecuta un portlet

Los portlets se ejecutan en un contenedor de portlets, existen muchos contenedores de portltes como JetSpeed o Liferay.

Qué métodos debe implementar

Esta es la interfaz que debe implementar un portlets. Normalmente lo que se hace es extender a javax.portlet.GenericPortlet

Continúa leyendo «Aprendiendo sobre portlets»