2. Contenidos
I. Liferay y Tecnologías Java Involucradas
II. Instalación de Liferay
III. Gestión de Contenidos
IV. Desarrollo de Portlets
V. Desarrollo de Plugins y Hooks
VI. Plantillas y Temas
VII. Otras Consideraciones
Enero 2013 Liferay 2
3. Contenidos
I. Liferay y Tecnologías Java Involucradas
II. Instalación de Liferay
III. Gestión de Contenidos
IV. Desarrollo de Portlets
V. Desarrollo de Plugins y Hooks
VI. Plantillas y Temas
VII. Otras Consideraciones
Enero 2013 Liferay 3
4. I. Liferay y Tecnologías Java
Involucradas
Portal:
"Sitio Web que sirve de puerta de entrada
(única) para ofrecer al usuario, de forma fácil e
integrada, el acceso a una serie de recursos y
de servicios relacionados con un mismo tema"
Enero 2013 Liferay 4
5. I. Liferay y Tecnologías Java
Involucradas
Tipos de Portal:
Personales
Académicos
Gubernamentales
Corporativos (Intranets)
De dominio específico
Características:
Admiten blogs, grupos de discusión,
documentos compartidos, calendarios, Wiki,…
Enero 2013 Liferay 5
6. I. Liferay y Tecnologías Java
Involucradas
Página Web
CMS (Content Management System)
Liferay
BD
Java
Enero 2013 Liferay 6
7. I. Liferay y Tecnologías Java
Involucradas
Liferay
3 funcionalidades principales
Portal
CMS (Gestión de documentos) y WCM (Gestión de
artículos, flujos, metadatos,…)
Software colaborativo
Enero 2013 Liferay 7
8. I. Liferay y Tecnologías Java
Involucradas
Liferay
Portal
Ejecutable en la mayoría de servidores Java
Modelo Web 2.0
Frameworks SOA
Soporte para LDAP y SSO
Enero 2013 Liferay 8
9. I. Liferay y Tecnologías Java
Involucradas
Liferay
CMS y WCM
Librería de documentos
Galería de imágenes
Diario (Web Content Manager o Journal)
Buscador
Software colaborativo
Blogs, Wikis, Calendarios, IM, RSS, redes sociales,…
Enero 2013 Liferay 9
10. I. Liferay y Tecnologías Java
Involucradas
Otros CMS/WCM
Microsoft Office SharePoint Server
(MOSS/MSS)
IBM WebSphere Portal Server
GlassFish Web Space Server
Joomla!
Drupal
…
Enero 2013 Liferay 10
11. I. Liferay y Tecnologías Java
Involucradas
Todos se estructuran en base a módulos
programables e intercambiables
SharePoint WebParts
Joomla! Componentes y Módulos
Drupal Módulos
Liferay Portlets (JSR-286)
Enero 2013 Liferay 11
12. I. Liferay y Tecnologías Java
Involucradas
Portales y
Portlets Liferay
Enero 2013 Liferay 12
13. I. Liferay y Tecnologías Java
Involucradas
Flujo de una petición
Enero 2013 Liferay 13
14. I. Liferay y Tecnologías Java
Involucradas
Liferay está construido sobre Java
Se basa en estándares y componentes
contrastados
Hibernate
ehcache
Spring MVC
Struts
…
Enero 2013 Liferay 14
15. I. Liferay y Tecnologías Java
Involucradas
Utiliza estándares de comunicación con
otros sistemas
AJAX
JSON
REST
CalDAV
…
Soporta gestión de proyectos mediante
Ant y Maven
Enero 2013 Liferay 15
16. I. Liferay y Tecnologías Java
Involucradas
Hibernate
Motor de ORM y acceso a Base de Datos
Compatible con multitud de BBDD
Configurado mediante XML y anotaciones para
la persistencia automatizada de objetos
Permite implementar el patrón DAO de manera
trivial
Incluye el lenguaje HQL de consulta de objetos
Incluye un API Criteria permite construir
consultas de manera programática
Enero 2013 Liferay 16
17. I. Liferay y Tecnologías Java
Involucradas
Struts
Herramienta para el desarrollo de aplicaciones
Web basadas en el patrón MVC
Define acciones a ejecutar que pueden
invocarse desde formulario Web
Permite interponer filtros a las peticiones
Tiene taglibs propios que facilitan la creación
de páginas JSP
Enero 2013 Liferay 17
18. I. Liferay y Tecnologías Java
Involucradas
Spring
Framework de gestión de objetos de negocio
Inyección de dependencias
Permite instanciar objetos mediante XML
Y asociarlos entre sí mediante propiedades
Beans
Spring MVC implementa el control de las
aplicaciones Web
Spring AOP permite inyectar código
Spring ORM permite integrarlo con Hibernate
Enero 2013 Liferay 18
19. I. Liferay y Tecnologías Java
Involucradas
Ant
Herramienta de construcción y compilación de
código basada en Java
Similar a la herramienta MAKE de UNIX
Estructura de proyecto especial
Permite realizar tareas genéricas de SO
Crear, copiar, mover, eliminar,…
Y tareas específicas de Java
Compilar, empaquetar,…
Permite secuenciar tareas
Enero 2013 Liferay 19
20. I. Liferay y Tecnologías Java
Involucradas
Maven
Gestor de dependencias
Estándar de descripción de proyectos Java
POM.XML
Permite desvincular el código de las librerías
Utiliza repositorios de librerías de distinto nivel
Gestiona el ciclo de vida del proyecto
Validar, compilar, probar, empaquetar, desplegar,..
Admite dependencias transitivas y en conflicto
Hay arquetipos con plantillas de proyectos
Enero 2013 Liferay 20
21. I. Liferay y Tecnologías Java
Involucradas
AJAX y JSON
Tecnologías basadas en JavaScript
JSON permite escribir notación similar a la de
programación orientada a objeto
Además, permite representar información
compleja de manera más compacta que XML
AJAX permite enviar peticiones al servidor de
manera transparente para el usuario
Evita las cargas lentas y las pantallas en
blanco
Enero 2013 Liferay 21
22. I. Liferay y Tecnologías Java
Involucradas
SOA y WebServices
Los Servicios Web permiten publicar
funcionalidad independiente de plataforma
Se basan en estándares (HTTP, XML)
Se pueden consumir desde cualquier lenguaje
Permiten integrar aplicaciones heterogéneas
Y gestionar procesos de negocio complejos
Mule es una herramienta ESB para la
integración de Servicios Web
Apache Service Mix también
Enero 2013 Liferay 22
23. I. Liferay y Tecnologías Java
Involucradas
Otras tecnologías
ehcache: Caché distribuída de propósito general
jBPM: Plataforma para ejecutar procesos de negocio mediante
orquestación de servicios
Intalio/BPP: Software de código abierto para SOA y BPM
jQuery: Librería JavaScript que simplifica la introducción de
código en HTML. Permite gestión de eventos, AJAX,…
Lucene: Motor de búsqueda escrito en Java
Ruby: Lenguaje de programación dinámico
JBoss Seam: Framework par Web 2.0 que integra tecnologías
como Ajax, JSF (JavaServer Faces), EJB3 (Enterprise
JavaBeans), Java Portlets, y BPM
Tapestry: Framework para crear aplicaciones Web en Java
FreeMarker: Herramienta para generar salida en formato
texto en base a plantillas
…
Enero 2013 Liferay 23
24. I. Liferay y Tecnologías Java
Involucradas
¿Cuál/es de estas tecnología utilizar?
La que mejor conozcas
Struts, Spring MVC, Hibernate, JPA,…
La mejor adaptada a nuestras necesidades
JSF para aplicaciones tipo escritorio
La más sencilla
Portlets y Hooks
Enero 2013 Liferay 24
25. I. Liferay y Tecnologías Java
Involucradas
Arquitectura Liferay
Enero 2013 Liferay 25
26. I. Liferay y Tecnologías Java
Involucradas
Arquitectura Liferay 6.0
Enero 2013 Liferay 26
27. I. Liferay y Tecnologías Java
Involucradas
Arquitectura Liferay 6.1
Enero 2013 Liferay 27
28. I. Liferay y Tecnologías Java
Involucradas
Arquitectura Liferay 6.1
Enero 2013 Liferay 28
29. I. Liferay y Tecnologías Java
Involucradas
Arquitectura Liferay
Un portal Liferay puede estar compuesto de
varias instancias
Cada instancia tendrá datos independientes
Cada instancia tendrá grupos de usuarios
aislados (comunidades, organizaciones,…)
Cada grupo de usuarios tiene páginas públicas
y privadas implementadas como layouts
Y cada página tiene contenido implementado
mediante Portlets
Enero 2013 Liferay 29
30. I. Liferay y Tecnologías Java
Involucradas
Arquitectura Liferay
Enero 2013 Liferay 30
31. I. Liferay y Tecnologías Java
Involucradas
Arquitectura Liferay
En 6.1 las comunidades se llaman sitios
Enero 2013 Liferay 31
32. I. Liferay y Tecnologías Java
Involucradas
Modelo de aplicación
Ficheros de propiedades (.properties)
Ficheros XML de configuración
NO MODIFICARLOS!!!
Mecanismo de extensión (EasyConf)
El motor de Liferay detecta ficheros "-ext"
Tienen prioridad sobre los preexistentes
El motor detecta la carpeta /Ext
Donde se pueden desplegar aplicaciones
Enero 2013 Liferay 32
33. I. Liferay y Tecnologías Java
Involucradas
3 Estrategias de Extensión
Entorno de extensión para Portlets
Entorno de desarrollo mediante Plugins SDK
ServiceBuilder
Genera modelos y servicios (código)
A partir de un fichero de configuración service.xml
Enero 2013 Liferay 33
34. I. Liferay y Tecnologías Java
Involucradas
Entorno de Extensión
Permite sobrescribir ficheros de configuración,
JSPs,…
Se relaciona con el directorio portal-impl
Ficheros
portal-ext.properties
system-ext.properties
Enero 2013 Liferay 34
35. I. Liferay y Tecnologías Java
Involucradas
Plugins SDK para desarrollo
Desarrollo de Portlets, plantillas, temas, hooks,
webs,…
No modifica las propiedades del portal
Pero se pueden "enganchar" mediante Hooks
Enero 2013 Liferay 35
36. Contenidos
I. Liferay y Tecnologías Java Involucradas
II. Instalación de Liferay
III. Gestión de Contenidos
IV. Desarrollo de Portlets
V. Desarrollo de Plugins y Hooks
VI. Plantillas y Temas
VII. Otras Consideraciones
Enero 2013 Liferay 36
37. II. Instalación de Liferay
o Requisitos previos
o JavaSE JDK 5.0 o superior (recomendado 6.0)
o Tomcat 5.5 o superior
o MySQL 5.0 o superior
o Ant 1.6 o superior (para desarrollo
independiente)
Enero 2013 Liferay 37
38. II. Instalación de Liferay
o Otras opciones
o Se admiten otros motores de Base de Datos
o Apache Derby, IBM DB2, Firebird, Hypersonic,
Informix, InterBase, JDataStore, Oracle,
PostgresSQL, SAP, SQL Server, Sybase, …
o Se admiten otros servidores de aplicaciones
o Borland ES, Apache Geronimo, Sun GlassFish,
JBoss, JOnAS, JRun, OracleAS, Orion, SUN JSAS,
WebLogic, WebSphere, Jetty, Resin, …
Enero 2013 Liferay 38
39. II. Instalación de Liferay
Opciones de instalación/despliegue
1) Instalación bundle para producción
2) Instalación sobre un servidor previo
3) Instalación para desarrollo
4) Instalación para desarrollo sobre Eclipse
5) Instalación para depuración del código fuente
6) Instalación para desarrollo con Liferay IDE
Enero 2013 Liferay 39
40. II. Instalación de Liferay
1) Instalación para despliegue y
personalización
1. Descargar la versión bundle con el servidor de
aplicaciones que prefiramos (Tomcat)
configurado
http://www.liferay.com/downloads/
2. Descomprimir el fichero y arrancar startup.
bat
3. Abrir http://localhost:8080 en un navegador
4. Login y password: test@liferay.com | test
5. Configurar el entorno CMS a placer
Enero 2013 Liferay 40
41. II. Instalación de Liferay
2) Despliegue sobre servidor preexistente
http://www.liferay.
com/documentation/liferay-portal/6.
0/administration/-/ai/installing-liferay-for-an-
enterpri-4
http://www.liferay.
com/documentation/liferay-portal/6.1/user-
guide/-/ai/lp-6-1-ugen11-installing-liferay-on-
an-existing-application-server-0
Enero 2013 Liferay 41
42. II. Instalación de Liferay
Configuración del Origen de Datos
Liferay contiene una BD embebida
Hypersonic
No recomendable en entornos de producción
Para configurar otra BD
Crear una instancia de Base de Datos
Copiar el driver de BD en TOMCAT/lib/ext
Editar el fichero portal-ext.properties en el directorio
TOMCAT/webapps/ROOT/WEB-INF/classes/
(En LR6.1 se puede encontrar en la raíz de Liferay)
Enero 2013 Liferay 42
43. II. Instalación de Liferay
Para MySQL añadir al fichero
jdbc.default.driverClassName=com.mysql.jdbc.Driver
jdbc.default.url=jdbc:mysql://localhost:3306/<bbdd>
jdbc.default.username=<usuario>
jdbc.default.password=<clave>
schema.run.enabled=true
schema.run.minimal=false
Enero 2013 Liferay 43
44. II. Instalación de Liferay
3) Instalación para desarrollo (Plugin SDK)
1. Descargar y configurar JDK, Ant y MySQL
o Crear las variables JAVA_HOME, ANT_HOME y
MYSQL_HOME y añadirlas a PATH
o Crear una instancia de Base de Datos y un usuario
con permisos totales sobre ella
2. Descargar y configurar Tomcat
o Descomprimir Tomcat en una carpeta e identificarla
como LIFERAY_PORTAL
o Crear la variable CATALINA_HOME que apunte a la
carpeta en que se ha descomprimido Tomcat
Enero 2013 Liferay 44
45. II. Instalación de Liferay
3) Instalación para desarrollo (Plugin SDK)
3. Configurar entorno Liferay
o Crear una carpeta para el portal y la variable
LIFERAY_PORTAL que apunte a esa carpeta
o Crear [PluginSDK]/build.<usuario>.properties copia
de build.properties con el app.server.dir adecuado
Enero 2013 Liferay 45
46. II. Instalación de Liferay
4) Instalación sobre Eclipse
1. New > Other > Server > Apache > Tomcat
2. Seleccionar el directorio de Tomcat en Liferay
3. Abrir la configuración del servidor
4. Marcar la opción "Use Tomcat installation"
5. Comprobar que el deploy path es webapps
6. Crear una configuración de depuración para el
servidor
Enero 2013 Liferay 46
47. II. Instalación de Liferay
4) Instalación sobre Eclipse
Configuración de depuración para el servidor
Poner como argumento start
Poner como working directory apuntando al Tomcat
Añadir bootstrap.jar y tomcat-juli.jar al classpath
Poner como VM arguments …
Enero 2013 Liferay 47
48. II. Instalación de Liferay
4) Instalación sobre Eclipse
VM arguments
–Xms128m –Xmx512m –XX:MaxPermSize=128m
-Djava.io.tmpdir="[TOMCAT_HOME]temp"
-Djava.security.auth.login.config =
"[TOMCAT_HOME]confjaas.config"
-Dfile.encoding=UTF8 -Duser.timezone=GMT+1
-Dcatalina.base="[TOMCAT_HOME]"
-Dcatalina.home="[TOMCAT_HOME]"
-Dwtp.deploy="[TOMCAT_HOME]webapps"
-Djava.endorsed.dirs = "[TOMCAT_HOME]
commonendorsed"
Enero 2013 Liferay 48
49. II. Instalación de Liferay
4) Instalación sobre Eclipse
Enero 2013 Liferay 49
50. II. Instalación de Liferay
5) Instalación de fuentes para depuración
1. Descargar la versión con fuentes
2. Crear un proyecto Java que apunte al código
fuente
3. Depurar y asociar los fuentes del proyecto
Enero 2013 Liferay 50
51. II. Instalación de Liferay
5) Instalación de fuentes para depuración
Repositorio de fuentes de Liferay
1. Instalar el plugin Subclipse
o http://subclipse.tigris.org/update_1.6.x
2. Configurar el repositorio de Liferay
o Open Perspective > SVN Repository Exploring
o svn://svn.liferay.com/repos/public
3. Descargar el fuente de portal/trunk y compilar
con Ant
Enero 2013 Liferay 51
52. II. Instalación de Liferay
6) Uso de Liferay IDE
Eclipse Helios (o superior)
A través del Marketplace (Menú Help)
o http://sourceforge.net/project/showfiles.php ?
group_id=49260&package_id=215051
Descargar e instalar Liferay IDE
Ya se pueden crear proyectos de plugin Liferay
Enero 2013 Liferay 52
53. II. Instalación de Liferay
6) Uso de Liferay IDE
Configurar en las preferencias el Plugin SDK
Si no lo tenemos hay que descargarlo
http://sourceforge.net/projects/lportal/files/Liferay%
20Portal/6.1.1%20GA2/liferay-plugins-sdk-6.1.1-ce-
ga2-20121004092655026.zip/download
Crear un servidor de aplicaciones Liferay
Server > Runtime Environment
Registrar el servidor en la vista de servidores
Botón derecho > New > Server
Enero 2013 Liferay 53
54. II. Instalación de Liferay
o Tips (MySQL)
o Comprobar el acceso a MySQL
mysql –u <usuario> -p
o Crear una base de datos para Liferay
CREATE DATABASE miPortalLR character set utf8;
o Crear un usuario para Liferay
GRANT ALL ON miPortalLR.* TO <usuario>
IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;
o Utilizar contraseñas seguras
o Entre 6 y 10 caracteres
o Mayúsculas, minúsculas, números y caracteres extraños
o No legible
Enero 2013 Liferay 54
55. II. Instalación de Liferay
o Tips (Eclipse)
o Se pueden utilizar otros IDE de desarrollo
o Asignar al menos 256M a XXMaxPermSize en
eclipse.ini
o Comprobar el fichero catalina.properties
o common.loader debe contener el valor ${catalina.
home}/lib/ext/*.jar
Enero 2013 Liferay 55
56. Contenidos
I. Liferay y Tecnologías Java Involucradas
II. Instalación de Liferay
III. Gestión de Contenidos
IV. Desarrollo de Portlets
V. Desarrollo de Plugins y Hooks
VI. Plantillas y Temas
VII. Otras Consideraciones
Enero 2013 Liferay 56
57. III.Gestión de Contenidos
Antes de desarrollar conviene conocer la forma
en que se trabaja con Liferay
¿Cómo se…?
Detectan los requisitos
Crea un portal
Añaden, eliminan y editan páginas
Crean páginas hijas
Ordenan las páginas
Aplican temas a las páginas
Descargan e instalan plugins
Edita el contenido
Maneja el motor de news, journal, RSS,…
…
Enero 2013 Liferay 57
58. III.Gestión de Contenidos
Requisitos
Usuarios y roles que van a utilizar el portal
Permisos de cada rol
Funcionalidades que va a requerir cada rol
Enlaces a otros sitios Web
Introducción de noticias
Datos a almacenar
Gráficos
Colaboración entre usuarios (P2P, SMS, IM,…)
Enero 2013 Liferay 58
59. III.Gestión de Contenidos
Creación de Portales
Logarse en el portal
test@liferay.com:test
Menús: Pin, Add, Manage, Toogle Edit
Enero 2013 Liferay 59
60. III.Gestión de Contenidos
Creación de Portales
Crear páginas públicas/privadas (comunidad)
Establecer un layout (estructura) para las
páginas
Páginas padre/hija, tabulado,…
Añadir Portlets a las páginas
Enero 2013 Liferay 60
61. III.Gestión de Contenidos
Creación de Páginas
Add > Page
Manage > Page > Children > Add child pages
Cambiar el orden de las páginas hijas
Cambiar el Look & Feel (temas)
Establecer "friendly URLs"
Editar páginas principales
Enero 2013 Liferay 61
62. III.Gestión de Contenidos
Ejercicio 1
Crear un portal para el curso con las páginas
Bienvenida
Temario
Tecnologías involucradas
Ejercicios
Administración
Enero 2013 Liferay 62
63. III.Gestión de Contenidos
Ejercicio 2
Añadir páginas hijas a "Tecnologías
involucradas"
Hibernate
Spring
Struts
JSF
…
Privatizar la página de ejercicios
Cambiar el tema del portal
Enero 2013 Liferay 63
64. III.Gestión de Contenidos
Instalación de aplicaciones (Portlets)
LR6: Add > More…
LR5: Add Application
Tipos de Portlet
Admin Finance
CMS Google
Collaboration (blogs, News
calendarios, Wikis,…)
Community Social
Entertainment Shopping
Enero 2013 Liferay 64
65. III.Gestión de Contenidos
Plugin Installer
Se pueden instalar numerosos temas, Portlets,
plantillas,…
Algunos están disponibles, otros hay que
descargarlos
Para ello se utiliza el Plugin Installer
LR6: Add > More… > Install More Applications
LR5: Add Application > Admin > Plugin Installer
Enero 2013 Liferay 65
66. III.Gestión de Contenidos
Plugin Installer
Requiere conexión a Internet
Se listan los plugins disponibles
Buscar e instalar tema Envision
Si no se encuentra se puede descargar el WAR
E instalarlo con la opción Upload File
Descargar e instalar el tema Transparentia
Enero 2013 Liferay 66
67. III.Gestión de Contenidos
Personalización de Portlets
Look & Feel
Configuración del Portlet
Estilos
Márgenes
CSS
Enero 2013 Liferay 67
68. III.Gestión de Contenidos
Personalización de Portlets
Configuration
Setup
Supported clients (navegadores móviles)
Permissions
Sharing
Scope
Export/Import
A formato LAR
Enero 2013 Liferay 68
69. III.Gestión de Contenidos
o Publicación de contenidos
o Writer
o Add Web Content
o Editar el contenido
o Submit for Publication
o Publisher
o Control Panel > My Workflow Tasks
o Actions > Assign to…
o Aprove/Reject
Enero 2013 Liferay 69
70. III.Gestión de Contenidos
o Gestión de usuarios
o (Control Panel/Enterprise Admin)
o Usuarios
o Grupos
o Roles (colección de permisos)
o Regular (general)
o Community
o Organization
Enero 2013 Liferay 70
71. III.Gestión de Contenidos
o Gestión de usuarios
o Organizaciones
o Jerarquías de usuarios (departamento, subsidiario,
…)
o Se pueden añadir organizaciones hijas
o Location
o Oficinas centrales
o Ya no pueden tener más hijas
o Regular
o Oficina satélite
o Pueden tener más hijas
o Select parent
Enero 2013 Liferay 71
72. III.Gestión de Contenidos
o Gestión de usuarios
o Organizaciones
o Tras crear una organización se añaden más datos
o …, E-mail, dirección postal, página Web,…
o Se puede indicar el horario comercial
o Para cada tipo de servicio ofrecido
Enero 2013 Liferay 72
73. III.Gestión de Contenidos
o Gestión de usuarios
o Comunidades
o Conjunto de usuarios sin jerarquía
o Complemento de las organizaciones
o Controladas por los propios usuarios
o Se pueden invitar entre sí
o Abierta, restringida o cerrada
Enero 2013 Liferay 73
74. III.Gestión de Contenidos
o Roles predefinidos no modificables
o Regulares
o Administrator
o Guest
o User
o Power User
Enero 2013 Liferay 74
75. III.Gestión de Contenidos
o Roles predefinidos no modificables
o Comunitarios
o Community Administrator (no editan
usuarios/contenido)
o Community Member
o Community Owner (creador, root)
o Organizacionales
o Organization Administrator (no suben usuarios a
admin)
o Organization Member
o Organization Owner (creador, root)
Enero 2013 Liferay 75
76. III.Gestión de Contenidos
o Más sobre gestión de usuarios
o Se pueden reservar nombres y e-mails
o Se puede impersonar un usuario para ver el
portal cómo si fuéramos ese usuario
o Se pueden modificar los valores por defecto
del portal (Portal settings)
Enero 2013 Liferay 76
77. III.Gestión de Contenidos
o Más sobre gestión de usuarios
o Se pueden añadir políticas para passwords
o Se pueden configurar servidores de
autenticación
o LDAP, CAS, SSO, NTLM,…
o Se pueden crear notificaciones por email
o Cuenta creada, password cambiado, recuperar
password
Enero 2013 Liferay 77
78. III.Gestión de Contenidos
o Gestión de Documentos
o LR6: Add > More… > Document Library
o LR5: Add Application > Document Library
o LR6.1 Añade tipos de documento y
metadatos
o Crear directorios con permisos
o Subir documentos
o Add document > Browse (Firefox)
o Classic uploader (Otros navegadores)
Enero 2013 Liferay 78
79. III.Gestión de Contenidos
o Gestión de Documentos
o Se pueden crear accesos directos
o Se puede ver, editar, puntuar, eliminar,
establecer permisos,…
o Se puede mostrar un navegador rápido
o LR6: Add > Document Library Display
o LR5: Add Application > Document Library Display
Enero 2013 Liferay 79
80. III.Gestión de Contenidos
o Ejercicio 3
o Crear una organización "Mi Empresa" con
varias localizaciones geográficas
o Crear dos grupos
o Desarrolladores y Gerentes
o Crear una comunidad de programadores
Enero 2013 Liferay 80
81. III.Gestión de Contenidos
o Ejercicio 4
o Crear y asignar usuarios
o Crear una librería de documentos con
carpetas
o Instalación
o Ejemplos
o Plugins
o Asignar varios permisos
Enero 2013 Liferay 81
82. III.Gestión de Contenidos
o Configuración del portal
o TOMCAT_HOME/webapps/ROOT/WEB-
INF/classes/
o system-ext.properties
user.country=ES
user.language=es
user.timezone=Europe/Paris
Enero 2013 Liferay 82
83. III.Gestión de Contenidos
o Configuración del portal
o portal-ext.properties
browser.launcher.url=http://localhost:8080
company.default.home.url=/web/guest
auth.forward.by.last.path=true
terms.of.use.required=true
terms.of.use.journal.article.group.id=<Id>
terms.of.use.journal.article.id=<Id>
session.enable.url.with.session.id=true
session.enable.persistent.cookies=true
look.and.feel.modifiable=true
Enero 2013 Liferay 83
84. III.Gestión de Contenidos
o Configuración del portal
o portal-ext.properties
session.timeout=30
session.timeout.warning=1
session.timeout.auto.extend=false
session.timeout.redirect.on.expire=false
users.reminder.queries.enabled=true
users.reminder.queries.required=false
users.reminder.queries.custom.question.enabled=true
users.reminder.queries.questions=cual-es-tu-
color-favorito,cual-es-el-nombre-de-tu-mascota,
que-opinas-de-la-caza-de-la-lagartija
Enero 2013 Liferay 84
85. III.Gestión de Contenidos
o Configuración del portal
o portal-ext.properties
default.layout.template.id=2_columns_ii
(30/70)
default.admin.password=test
default.admin.screen.name=test
default.admin.email.address.prefix=test
default.admin.first.name=Test
default.admin.middle.name=
default.admin.last.name=Test
Enero 2013 Liferay 85
86. III.Gestión de Contenidos
o Configuración del portal
o portal-ext.properties
default.guest.public.layout.name=Welcome
default.guest.public.layout.template.id=
2_columns_ii
default.guest.public.layout.column-1=58
default.guest.public.layout.column-2=47
default.guest.public.layout.column-3=
default.guest.public.layout.column-4=
default.guest.public.layout.friendly.url=
/home
Enero 2013 Liferay 86
87. III.Gestión de Contenidos
o Configuración del portal
o portal-ext.properties
## MySQL
jdbc.default.driverClassName=com.mysql.
jdbc.Driver
jdbc.default.url=jdbc:mysql://localhost :
3306/ddbb
jdbc.default.username=<usuario>
jdbc.default.password=<clave>
Enero 2013 Liferay 87
88. III.Gestión de Contenidos
o Configuración del portal
o portal-ext.properties
## JNDI
jdbc.default.jndi.name=jdbc/LiferayPool
## Hibernate
hibernate.hbm2ddl.auto=update
## Transacciones
transaction.isolation.portal=2
-1 default
1 read uncommitted
2 read committed
4 repeatable read
8 serialize-able
Enero 2013 Liferay 88
89. III.Gestión de Contenidos
o Configuración del portal
o portal-ext.properties
## Mail
mail.session.jndi.name=mail/MailSession
mail.session.mail.pop3.host=pop.gmail.com
mail.session.mail.pop3.port=110
mail.session.mail.imap.host=imap.gmail.com
mail.session.mail.imap.port=993
mail.session.mail.transport.protocol=smtp
Enero 2013 Liferay 89
90. III.Gestión de Contenidos
o Configuración del portal
o portal-ext.properties
## Mail
mail.session.mail.smtp.host=smtp.gmail.com
mail.session.mail.smtp.password=${password}
mail.session.mail.smtp.user=${username}
mail.session.mail.smtp.port=465
mail.session.mail.smtp.auth=true
mail.session.mail.smtp.socketFactory.class=
javax.net.ssl.SSLSocketFactory
Enero 2013 Liferay 90
91. III.Gestión de Contenidos
o Configuración del portal
o portal-ext.properties
## Organizaciones
organizations.types=regular-organization,location
organizations.rootable[regular-organization]=true
organizations.rootable[location]=false
organizations.form.update.main= details,pages,
categorization
organizations.form.update.identification=
addresses,phonenumbers,additional-email-addresses,
websites,services
organizations.form.update.miscellaneous= comments,
reminderqueries
Enero 2013 Liferay 91
92. III.Gestión de Contenidos
o Configuración del portal
o portal-ext.properties
## Organizaciones
organizations.children.types[regular-
organization]=regular-organization,location
organizations.country.enabled[regular-
organization]=false
organizations.country.required[regular-
organization]=false
organizations.country.enabled[location]=true
organizations.country.required[location]=true
Enero 2013 Liferay 92
93. III.Gestión de Contenidos
o Configuración del portal
o portal-ext.properties
## LDAP
ldap.auth.enabled=true
ldap.export.enabled=false
ldap.server.ids=1,2
ldap.server.name.1=Principal
ldap.base.provider.url.1=ldap://localhost:10389
ldap.security.principal.1=uid=admin,ou=system
ldap.security.credentials.1=test
ldap.user.custom.mappings.
1=employeeNumber=employeeNumber,
telephonenumber=telephonenumber
Enero 2013 ldap.auth.method=bind
Liferay 93
94. Contenidos
I. Liferay y Tecnologías Java Involucradas
II. Instalación de Liferay
III. Gestión de Contenidos
IV. Desarrollo de Portlets
V. Desarrollo de Plugins y Hooks
VI. Plantillas y Temas
VII. Otras Consideraciones
Enero 2013 Liferay 94
95. IV. Desarrollo de Portlets
o Portlet
o Mini-aplicación que proporciona contenido
o Componente gráfico usado en portales
o Configurados en WEB-INFportlet.xml
o Generan código según su modo (VIEW, EDIT,
HELP)
o Y su estado (Normal, Maximizado,
Minimizado)
Enero 2013 Liferay 95
96. IV. Desarrollo de Portlets
o Contenedor de Portlets
o Entorno de ejecución para los Portlets
o Extensión del contenedor de Servlets
o Maneja el ciclo de vida y almacena las
preferencias
o Portal
o Responsable de agregar el contenido
generado por los Portlets para formar una
aplicación Web
Enero 2013 Liferay 96
97. IV. Desarrollo de Portlets
o Anatomía de un Portlet
Enero 2013 Liferay 97
98. IV. Desarrollo de Portlets
o Ciclo de Vida de un Portlet
o Carga
o Inicialización
o Procesado de Acciones (1)
o Renderizado (todos)
o Destrucción
Enero 2013 Liferay 98
99. IV. Desarrollo de Portlets
o Interfaz Portlet
o init(PortletConfig);
o processAction(ActionRequest,
ActionResponse);
o render(RenderRequest, RenderResponse);
o destroy();
Enero 2013 Liferay 99
100. IV. Desarrollo de Portlets
o El aspecto de un Portlet es dinámico
o Depende de su configuración
o Del estilo del texto, los bordes y el
fondo
o De los márgenes y el relleno
o De la programación del Portlet
o De su modo y estado
Enero 2013 Liferay 100
101. IV. Desarrollo de Portlets
o Interfaz PortletConfig
Map<String, String[]>
getContainerRuntimeOptions();
String getInitParameter(String name);
Enumeration<String> getInitParameterNames();
PortletContext getPortletContext();
String getPortletName();
ResourceBundle getResourceBundle(Locale
locale);
Enumeration<Locale> getSupportedLocales();
Enero 2013 Liferay 101
102. IV. Desarrollo de Portlets
o Procesamiento
o Interfaz PortletRequest
ActionForward render(ActionMapping mapping,
ActionForm form, PortletConfig
PortletConfig, RenderRequest req,
RenderResponse res);
Enero 2013 Liferay 102
103. IV. Desarrollo de Portlets
o Procesamiento
o Interfaz PortletResponse
void addProperty(Cookie cookie);
void addProperty(String key, Element
element);
void addProperty(String key, String value);
Element createElement(String tagName);
String encodeURL(String path);
String getNamespace();
void setProperty(String key, String value);
Enero 2013 Liferay 103
104. IV. Desarrollo de Portlets
o Configuración
o Interfaz PortletContext
String getServerInfo();
InputStream getResourceAsStream(String
path);
int getMajorVersion();
int getMinorVersion();
URL getResource(String path);
Object getAttribute(String name);
Enero 2013 Liferay 104
105. IV. Desarrollo de Portlets
o Configuración
o Interfaz PortletPreferences
boolean isReadOnly(String key);
String getValue(String key, String def);
void setValue(String key, String value);
Enumeration<String> getNames();
void reset(String key);
void store();
Enero 2013 Liferay 105
106. IV. Desarrollo de Portlets
o Configuración
o Fichero portlet.xml
<portlet>
<portlet-name>NOMBRE_UNICO</portlet-name>
<display-name>MiPortlet</display-name>
<portlet-class> com.ext.portlet.MiPortlet </portlet-class>
<portlet-preferences>
<preference>
<name>test</name>
<value>123</value>
<read-only>true</ready-only>
</preference>
</portlet-preferences>
</portlet>
Enero 2013 Liferay 106
107. IV. Desarrollo de Portlets
o Vista de un Portlet
o Variables de la JSP
o request y response
o portletConfig
o portletSession
o portletSessionScope (atributos de sesión)
o portletPreferences
o portletPreferencesValues (mapa de preferencias)
Enero 2013 Liferay 107
108. IV. Desarrollo de Portlets
o Vista de un Portlet
o Librerías de etiquetas
o uri="http://java.sun.com/portlet_2_0"
prefix="portlet"
o <portlet:defineObjects />
o <portlet:renderURL windowState="..." />
Enero 2013 Liferay 108
109. IV. Desarrollo de Portlets
o Interacción entre Portlets 1.0
Sesiones compartidas
<shared-application-session-attribute>
<name>compartida</name>
</ shared-application-session-attribute>
<portlet>
<shared-portlet-session-attribute>
<name>var</name>
<java-class>com.paquete.Clase</java-class>
</shared-portlet-session-attribute>
</portlet>
Enero 2013 Liferay 109
110. IV. Desarrollo de Portlets
o Interacción entre Portlets 1.0
Sesiones compartidas
Se accede a través de PortletSession
setAttribute("var", valor, PortletSession.
APPLICATION_SCOPE)
getAttribute("var", PortletSession.
APPLICATION_SCOPE)
Enero 2013 Liferay 110
111. IV. Desarrollo de Portlets
o Interacción entre Portlets 2.0
Parámetros compartidos
<public-render-parameter>
<identifier>compartida</identifier>
<qname xmlns:x="http://namespace/comun">x:var1</qname>
</public-render-parameter>
<portlet>
<supported-public-render-parameter>
compartida
</supported-public-render-parameter>
</portlet>
Enero 2013 Liferay 111
112. IV. Desarrollo de Portlets
o Interacción entre Portlets 2.0
Parámetros compartidos
Se accede a través de renderRequest
setRenderParameter("var", valor)
getParameter("var")
Enero 2013 Liferay 112
113. IV. Desarrollo de Portlets
o Interacción entre Portlets 2.0
Sesiones compartidas (liferay-portlet.xml)
<liferay-portlet-app>
<portlet>
<private-session-attributes>
false
</private-session-attributes>
</portlet>
</liferay-portlet-app>
Enero 2013 Liferay 113
114. IV. Desarrollo de Portlets
o Interacción entre Portlets 2.0
Se accede a través de PortletSession
renderRequest.getPortletSession();
setAttribute("var", valor, PortletSession.
APPLICATION_SCOPE)
getAttribute("var", PortletSession.
APPLICATION_SCOPE)
Enero 2013 Liferay 114
115. IV. Desarrollo de Portlets
o Eventos
<event-definition>
<qname xmlns:x="http://mi.namespace">x:var</qname>
<value-type>java.lang.String</value-type>
</event-definition>
<portlet>
<supported-publishing-event>
<qname xmlns:x="http://mi.namespace">x:var</qname>
</supported-publishing-event>
<supported-processing-event>
<name>var</name>
</supported-processing-event>
</portlet>
Enero 2013 Liferay 115
116. IV. Desarrollo de Portlets
o Eventos
o Interfaz EventPortlet para recibir
eventos
o processEvent(EventRequest, EventResponse)
o request.getEvent()
o response.setEvent(qname, valor)
o Usar objetos QName con el namespace
definido
o new QName ("http://mi.namescape", "var");
Enero 2013 Liferay 116
117. IV. Desarrollo de Portlets
o Un Portlet simple
1. Configurar portlet.xml
o <portlet-name>
o <portlet-class> (MVCPortlet)
o <init-param> (view-jsp)
o <supports> (text/html)
o <security-role-ref>
Enero 2013 Liferay 117
118. IV. Desarrollo de Portlets
o Un Portlet simple
2. Crear la página vista.jsp
o <portlet:defineObjects />
o <portlet:renderURL> (renderizado -> JSP)
o <portlet:actionURL> (acción -> Clase
Portlet)
o <aui:form>
o <portlet:param name="jspPage">
3. Implementar la lógica de navegación
Enero 2013 Liferay 118
119. IV. Desarrollo de Portlets
o Un Portlet Programático
1. Crear un Portlet sencillo
2. Extender la clase Portlet deseada
o MVCPortlet
o LiferayPortlet
o GenericPortlet
o ...
Enero 2013 Liferay 119
120. IV. Desarrollo de Portlets
o Un Portlet Programático
3. Implementar la acción por defecto y otras
o processAction(ActionRequest, ActionResponse)
o otraAccion(ActionRequest, ActionResponse)
o SessionMessages
o SessionErrors
4. Ampliar las JSP
o <portlet:actionURL name="otraAccion">
<liferray-ui:success key="…" message="…" />
<aui:input>
Enero 2013 Liferay 120
121. Contenidos
I. Liferay y Tecnologías Java Involucradas
II. Instalación de Liferay
III. Gestión de Contenidos
IV. Desarrollo de Portlets
V. Desarrollo de Plugins y Hooks
VI. Plantillas y Temas
VII. Otras Consideraciones
Enero 2013 Liferay 121
122. V. Desarrollo de Plugins y Hooks
o Existen 5 tipos básicos de plugin
o Portlets
o Ext
o Hooks
o Plantillas
o Temas
Enero 2013 Liferay 122
123. V. Desarrollo de Plugins y Hooks
o Plugins SDK se distribuye con la
estructura adecuada para poder crear
cualquiera de ellos
o Además, incluye ficheros create (.bat y .
sh) para facilitar la creación del proyecto
o Y descriptores Ant para la compilación y
el despliegue sobre el portal
Enero 2013 Liferay 123
124. V. Desarrollo de Plugins y Hooks
o Liferay IDE
o Integrado en Eclipse
o Permite crear proyecto para plugins
o Permite crear descriptores Service Builder
o Requiere Liferay Portal + Plugins SDK
o Los proyectos se generan en Plugins SDK
o Fichero build.{usuario}.properties de configuración
Enero 2013 Liferay 124
126. V. Desarrollo de Plugins y Hooks
Snippets
Enero 2013 Liferay 126
127. V. Desarrollo de Plugins y Hooks
o Plugins Hook
o Permiten "enganchar" y sobrescribir
propiedades y funcionalidad del portal
o Hook de propiedades
o Reemplaza propiedades
o Permite responder a eventos
o Hook de Servicios
o Reemplaza servicios locales
o Extendiendo la clase
Enero 2013 Liferay 127
128. V. Desarrollo de Plugins y Hooks
o Plugins Hook
o Hook de páginas JSP
o Reemplaza una JSP
o Recomendable usar <liferay-util:buffer> para no
tener que modificar el hook si hay cambios
o Hook de idioma
o Reemplaza los ficheros de localización
Enero 2013 Liferay 128
129. V. Desarrollo de Plugins y Hooks
o Plugins Ext
o De muy bajo nivel
o Permite desarrollar usando Liferay como
plataforma
o Deprecated
o Utilizarlos SÓLO en caso de que no sea
posible implementar un Portlet o un Hook
Enero 2013 Liferay 129
130. V. Desarrollo de Plugins y Hooks
o Plugins Ext
o Aplican cambios a los módulos de Liferay
o ext-impl
o ext-lib
o ext-service
o ext-web
o portlet-ext.xml
o struts-config-ext.xml
Enero 2013 Liferay 130
131. V. Desarrollo de Plugins y Hooks
o Desarrollo de Ext mediante Plugins SDK
o Estructura definida (fichero ext.zip)
o /ext-service/ contiene servicios externos (modelo,
persistencia, servicios de negocio,…)
o /ext-impl/ contiene portal-ext y system-ext
o /ext-web/docroot/html/ contiene las JSP
o /ext-web/docroot/WEB-INF/ contiene descriptores
XML
Enero 2013 Liferay 131
132. V. Desarrollo de Plugins y Hooks
o Desarrollo de Ext mediante Plugins SDK
o Fichero build.properties
o create.bat proyecto "descripcion"
o Utilizar ServiceBuilder para generar código
o Beans, Scripts SQL, hbm, JSON, AXIS, Spring,…
o Fichero service.xml
Enero 2013 Liferay 132
133. V. Desarrollo de Plugins y Hooks
o ServiceBuilder
o Herramienta para construir servicios Java
o Utilizada con el entorno Ext pero depreciada
en LR6
o Pasos
1. Crear el proyecto de extensión
o create.bat proyecto "Descripción del proyecto"
2. Crear el fichero service.xml
Enero 2013 Liferay 133
134. V. Desarrollo de Plugins y Hooks
o Pasos
3. Ejecutar el target build-service-portlet-reports
de Ant
o ant build-service -Dservice.file=ruta/al/fichero
4. Modificar los ficheros de implementación
o model/impl/EntidadImpl.java
o service/impl/EntidadLocalServiceImpl.java
o service/impl/EntidadServiceImpl.java
5. Regenerar el servicio
o Clase estática EntidadLocalServiceUtil
Enero 2013 Liferay 134
135. V. Desarrollo de Plugins y Hooks
o Ejemplo service.xml
<service-builder package-path="paquete.portlet">
<namespace>MisPortlets</namespace>
<entity name="RegistroBD" local-service="true" remote-service="true"
uuid="true" persistence-class= "org.curso.RegistroBDPersistenceImpl">
<column name="id" type="String" primary="true" />
<column name="campo1" type="String" />
<column name="campo2" type="Date" />
<order by="asc">
<order-column name="campo1" case-sensitive="false" />
</order>
<finder name="FiltroCampo2" return-type="Collection">
<finder-column name="campo2" />
</finder>
</entity>
</service-builder>
Enero 2013 Liferay 135
136. Contenidos
I. Liferay y Tecnologías Java Involucradas
II. Instalación de Liferay
III. Gestión de Contenidos
IV. Desarrollo de Portlets
V. Desarrollo de Plugins y Hooks
VI. Plantillas y Temas
VII. Otras Consideraciones
Enero 2013 Liferay 136
137. VI. Plantillas y Temas
o Plantilla
o Estructura de organización de Portlets
o Se aplica a una página
o Fichero .tpl
Enero 2013 Liferay 137
138. VI. Plantillas y Temas
o Ejemplo de plantilla
<div class="plantilla" id="main-content" role="main">
<div class="portlet-layout">
<div class="aui-w40 ..." id="column-1">
$processor.processColumn("column-1", "...")
</div>
<div class="aui-w60 ..." id="column-2">
$processor.processColumn("column-2", "...")
</div>
</div>
</div>
Enero 2013 Liferay 138
139. VI. Plantillas y Temas
o Tema
o Aspecto aplicable al portal o a una página
/deep-blue-theme/
/docroot/
/WEB-INF/
/_diffs/
/css/
/images/
/js/
/templates/
Enero 2013 Liferay 139
140. VI. Plantillas y Temas
o Ficheros VM
o Definen la estructura de
Portal
Navegación
Portlets
...
Enero 2013 Liferay 140
141. VI. Plantillas y Temas
o Ficheros VM
o Contiene código HTML y variables $
o $theme representa el tema
o $full_templates_path la ruta a plantillas Liferay
o $PortletDisplay
o $htmlUtil
o ${images-path}
o ${css-class}
o $w3c_language_id
Enero 2013 Liferay 141
142. VI. Plantillas y Temas
o Ficheros VM
o Admite control de flujo y pseudo-funciones
o #if()
o #else
o #end
o #foreach($var in $conjunto)
o #parse()
o #set()
o #language()
o #css()
o #js()
Enero 2013 Liferay 142
143. VI. Plantillas y Temas
o Ejemplo: Plantilla Portlet.vm
<header class="portlet-topper">
<menu class="portlet-topper-toolbar"
id="portlet-topper-toolbar_$Portlet_id"
type="toolbar">
#if ($Portlet_display.isShowBackIcon())
<a href="$Portlet_back_url"
class="portlet-icon-back">
#language("return-to-full-page")</a>
#else
$theme.iconOptions()
$theme.iconMinimize()
$theme.iconMaximize()
$theme.iconClose()
#end
</menu>
</header>
Enero 2013 Liferay 143
144. Contenidos
I. Liferay y Tecnologías Java Involucradas
II. Instalación de Liferay
III. Gestión de Contenidos
IV. Desarrollo de Portlets
V. Desarrollo de Plugins y Hooks
VI. Plantillas y Temas
VII. Otras Consideraciones
Enero 2013 Liferay 144
146. VII. Otras Consideraciones
o Admin Server
o Liberar memoria mediante GC
o Liberar caché (VM, cluster y BD)
o Reindexar el motor de búsqueda
o Volcar el contenido de los hilos
o Verificar la BD
o Disparar apagados controlados
o Establecer niveles de LOG
Enero 2013 Liferay 146
147. VII. Otras Consideraciones
o Admin Server
o Configurar la subida de archivos
o Configurar el servidor de correo
o Migración de datos (documentos, BD,
imágenes)
o …
o Instancias del Portal
o Varios portales en el mismo servidor
Enero 2013 Liferay 147
148. VII. Otras Consideraciones
o Alta disponibilidad
o Ejecutar un portal en servidores paralelos
o Con balanceo de carga
o Y robustez al fallo
Enero 2013 Liferay 148
149. VII. Otras Consideraciones
o Alta disponibilidad
o Ejemplo 1: Apache HTTP Server + mod_jk +
Tomcat
Enero 2013 Liferay 149
150. VII. Otras Consideraciones
o Alta disponibilidad
o Ejemplo 2: Apache HTTP Server + mod_proxy
+ Tomcat
Enero 2013 Liferay 150
151. VII. Otras Consideraciones
o Alta disponibilidad
o Checklist
1. Habilitar en Tomcat
2. Habilitar en Liferay
3. Balanceador (Apache)
4. BD Centralizada (MySQL)
5. Ehcache
6. SOLR (datos indexados y búsqueda)
7. Biblioteca de documentos centralizada
Enero 2013 Liferay 151
152. VII. Otras Consideraciones
o Alta disponibilidad
o Para Tomcat
1. Cambiar los puertos de
o SHUTDOWN, HTTP/1.1 y AJP 1.3
2. Descomentar <Cluster>
3. Añadir jvmRoute a <Engine>
o Distinta para cada instancia de Tomcat
o Para Apache
1. Añadir la configuración para mod_jk y workers.
properties
Enero 2013 Liferay 152
153. VII. Otras Consideraciones
o Alta disponibilidad
o Para cada portal Liferay
1. Añadir a ROOT/WEB-INF/web.xml
o <distributable/>
2. Y configurar portal-ext.properties
o portal-ext.properties
net.sf.ehcache.configurationResourceName=
/ehcache/hibernate-clustered.xml
ehcache.multi.vm.config.location=/ehcache
/liferay-multi-vmclustered.xml
Enero 2013 Liferay 153
154. VII. Otras Consideraciones
o Certificados self-signed
1. Importar el certificado a Java
keytool -import -alias tomcat -file CERTIFICADO.
CRT -keypass CONTRASEÑA -keystore %JAVA_HOME%
/jre/lib/security/cacerts
2. Configurar la JVM de Tomcat
JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.trustStore=
%JAVA_HOME%jrelibsecuritycacerts -Djavax.
net.ssl.trustStorePassword=CONTRASEÑA"
3. portal-ext.properties
mail.session.mail.smtp.starttls.enable=false
Enero 2013 Liferay 154
155. VII. Otras Consideraciones
o Backup
o Los plugins a parte (repositorio)
o portal-ext.properties
o Directorio LIFERAY_HOME/data
o BD
o Exportarla o hacer el backup con el DBMS
Enero 2013 Liferay 155
156. VII. Otras Consideraciones
o Restore
o Copiar directorio LIFERAY_HOME/data
o Recuperar BD
o Recuperar el backup a la misma instancia/catálogo
o Modificar los parámetros de portal-ext.properties
o Copiar portal-ext.properties
o Reinstalar plugins
o Reindexar
o Panel de Control > Admin Servidor > Reindexar
Enero 2013 Liferay 156
157. VII. Otras Consideraciones
o Cluster de BD
o Liferay no implementa clustering
o Pero se puede simular con JNDI
o TOMCAT/conf/catalina/localhost/root.xml
<Resource name="jdbc/LiferayPool" type="javax.sql.DataSource"
driverClassName="org.continuent.sequoia.driver.Driver" url="jdbc:
sequoia://192.168.10.19:25322,192.168.10.20:25323/lportal" auth="
Container" username="usr" password="pwd" maxActive="20" />
o Middleware Sequoia (http://sequoia.
continuent.org)
Enero 2013 Liferay 157
158. VII. Otras Consideraciones
o Cluster de BD
o Se puede utilizar una BD para lectura y otra
para escritura
o Y mantenerlas sincronizadas por DBMS
o Propiedades
o jdbc.read.*
o jdbc.write.*
o Habilitar fichero de configuración Spring
o dynamic-data-source-spring.xml
Enero 2013 Liferay 158
159. VII. Otras Consideraciones
o Partición de BD
o Sharding
o Escalabilidad en entornos con un número
masivo de usuarios
o Dividir una BD en varias instancias
o Mejora la escalabilidad
o Propiedades jdbc.xxx para cada instancia
o Fichero shard-data-source-spring.xml
Enero 2013 Liferay 159
160. VII. Otras Consideraciones
o Partición de BD
o Configuración portal-ext.properties:
# Particiona por instancias de LR
shard.selector=com.liferay.portal.dao.shard.
RoundRobinShardSelector
# alternativa: ManualShardSelector
# Otros modos hay que implementarlos
properties.shard.available.names=xxx,yyy,zzz
shard.default.name=xxx
jdbc.default.*
jdbc.xxx.*
Enero 2013 Liferay 160
161. VII. Otras Consideraciones
o Configuración de Spring
o Habilitar en portal.properties:
spring.configs=META-INF/base-spring.xml,
...
# Para BD read-write
META-INF/dynamic-data-source-spring.xml,
# Para Sharding
META-INF/shard-data-source-spring.xml,
...
META-INF/ext-spring.xml
Enero 2013 Liferay 161
162. VII. Otras Consideraciones
o dynamic-data-source-spring.xml
<bean id="dynamicDataSourceTargetSource" class="com.liferay.
portal.dao.jdbc.aop.
DynamicDataSourceTargetSource">
<property name="readDataSource">
<bean class="com.liferay.portal.dao.jdbc.spring.
DataSourceFactoryBean">
<property name="porpertyPrefix" value="jdbc.read." />
</bean>
</property>
<property name="writeDataSource">
<bean ...
</property>
</bean>
Enero 2013 Liferay 162
163. VII. Otras Consideraciones
o shard-data-source-spring.xml
<bean id="shardDataSource1" class="org.springframework.jdbc.
datasource.LazyConnectionDataSourceProxy">
<property name="targetDataSource">
<bean class="com.liferay.portal.dao.jdbc.spring.
DataSourceFactoryBean">
<property name="porpertyPrefix" value="jdbc.xxx." />
</bean>
</property>
</bean>
Enero 2013 Liferay 163
164. VII. Otras Consideraciones
o Tuning
o Bajo servidor Core 2 Quad, 8GB RAM, 2
discos SCSI y SO CentOS, el portal soporta
o Alrededor de 3.000 usuarios concurrentes (6.0)
o 11.000 en la versión 6.1
o Unos 1300 incluyendo portlets colaborativos
o 5.000 en la versión 6.1
o El gestor de contenido CMS/WCM soporta
o Más de 150.000 usuarios concurrentes
Enero 2013 Liferay 164
165. VII. Otras Consideraciones
o Tuning
o ¿Cómo mantener este rendimiento?
o Mantener un pool de conexiones pequeño (200-
400)
o Desactivar filtros innecesarios
o Tunear los parámetros de la JVM
o Usar un servidor estático para contenido estático
o Utilizar partición de base de datos
o Tunear ehcache
o Página 626 del manual
Enero 2013 Liferay 165
166. VII. Otras Consideraciones
o Tuning
o Servidor Apache para contenido estático
1. Copiar el contenido estátido de TOMCATwebapps a
APACHEhtdocs
2. Descargar mod_jk para Apache
3. Crear un fichero APACHEconfworker.properties
para redirigir a Tomcat vía AJP
worker.list=worker1
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
Enero 2013 Liferay 166
167. VII. Otras Consideraciones
o Tuning
o Servidor Apache para contenido estático
4. Crear un fichero APACHEconfhttpd-mod_jk.conf
para especificar las reglas de redirección
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkMount /* worker1 Jkunmount /*.jpg worker1
Jkunmount /*.gif worker1 Jkunmount /*.png worker1
Jkunmount /*.ico worker1 Jkunmount /*.js worker1
5. Anexar este fichero a httpd.conf de Apache
Include conf/httpd-mod_jk.conf
Enero 2013 Liferay 167
168. VII. Otras Consideraciones
Otras recomendaciones
Evitar el uso de código Java en páginas JSP
Taglibs y expresiones EL
Utilizar <liferay-util:buffer> al suplantar JSP
<liferay-util:buffer var="html">
<liferay-util:include page="/.../pagina.jsp" />
</ liferay-util:buffer>
${html}
Enero 2013 Liferay 168
169. VII. Otras Consideraciones
Algoritmos para GC en Java
Serial Collector
Tipo Stop-the-World
-XX:+UseSerialGC
Parallel [Compacting] Collector
-XX:+UseParallelGC
-XX:+UseParallelOldGC
Concurrent Mark-Sweep Collector
-XX:+UseConcMarkSweepGC
-XX:+CMSIncrementalMode
Enero 2013 Liferay 169
171. VII. Otras Consideraciones
Algoritmos para GC en Java
Serial CMS
Parallel Modo Compacting
Enero 2013 Liferay 171
172. VII. Otras Consideraciones
Algoritmos para GC en Java
Garbage-First (G1)
GC de servidor con soporte para varios procesadores
y amplia memoria
Incluido en JRE 7
Memoria dividida en "cards" de 512 byte
referenciadas desde una tabla de cards
-XX:+UseG1GC
Enero 2013 Liferay 172
173. VII. Otras Consideraciones
o Monitorización
o Registra tiempos de transacción del portal y
de portlets mediante JMX MBeans
o portal-ext.properties
monitoring.level.com.liferay.monitoring.Portal=MEDIUM
monitoring.level.com.liferay.monitoring.Portlet=HIGH
monitoring.portal.request=false
monitoring.portlet.action.request=false
monitoring.portlet.event.request=false
monitoring.portlet.render.request=false
monitoring.portlet.resource.request=false
live.users.enabled=true
Enero 2013 Liferay 173
174. VII. Otras Consideraciones
o Otras recomendaciones
o Evitar el uso de parámetros complejos en
Servicios Web
o Usar CSS Sprites para imágenes pequeñas
o Usar CacheFilter
o Scripts abajo
o Cacheo estático
Enero 2013 Liferay 174
175. VII. Otras Consideraciones
o Tuneo de la JVM (tomcat/bin/setenv.sh)
o Recolector de basura
o -XX:+UseConcMarkSweepGC
o Tamaño del HEAP
o -Xms2048m -Xmx2048m
o Tamaño del Young Generation
o 1/3 del HEAP
o Tamaño del PermGen
o -XX:MaxPermSize=256m
Enero 2013 Liferay 175
176. VII. Otras Consideraciones
o Tuneo de ehcache
ehcache.cluster.link.replication.enabled=true
cluster.link.enabled=true
lucene.replicate.write=true
cluster.link.autodetect.address=
<ip:puerto de gateway>
# Dirección de Multicast (tb para cluster-link-udp,
# cluster-link-mping, hibernate y multi-vm)
multicast.group.address["cluster-link-control"]=
<ip multi>
multicast.group.port["cluster-link-control"]=
<puerto multi>
# opcional
ehcache.statistics.enabled=true
Enero 2013 Liferay 176
177. Muchas Gracias
Óliver Centeno Álvarez
Enero 2013 Liferay 177
Notas del editor
Personales ( My Yahoo! and iGoogle ) Académicos () Gubernamentales Corporativos (Intranets) De dominio específico
1. The user requests a data update by clicking the portal page. 2. The user request generates an action event on the portal server. 3. The portal server generates an event on the Portlet container. 4. The container determines that the user request requires data in Portlets A and C to be updated. 5. The container makes an Action request to Portlet A to perform the data update. 6. Portlet A performs the requested action and returns the result, if any, to the container. 7. The container makes an Action request to Portlet C. 8. Portlet C performs the action and sends the result, if any, to the container. 9. At this stage, the Action phase of the user request is completed. The container has all the data that it needs to render the page for the user. 10. The rendering phase of the user request starts. 11. The container fires a Render event to all three Portlets—either sequentially or in parallel. 12. The container gathers the responses of all three Portlets. 13. The container returns the updated page to the server. 14. The server displays the page on the user’s browser. 15. At this stage, the user request is fully processed. 16. The server now awaits another interaction from the user.