Informe Técnico LegoLangUAge 02-2013

Anuncio
Informe Técnico
LegoLangUAge 02/2013
Middleware dotCMS
Sara Estellés
José M. Gómez
Universidad de Alicante
Grupo de Investigación en Procesamiento del Lenguaje Natural y Sistemas de Información
Contenido
Contenido.....................................................................................................................................2
Definición .....................................................................................................................................3
Funcionalidad y Diseño General ...................................................................................................3
Entradas y salidas .....................................................................................................................4
Funcionalidad y diseño de cada uno de los módulos ...................................................................9
Base de datos ...........................................................................................................................9
Proyecto Java middleware .......................................................................................................9
dotCMS...................................................................................................................................10
Dynamic Plugins .................................................................................................................10
Instalación dotCMS ............................................................................................................11
Requisitos funcionales................................................................................................................13
Requisitos no funcionales ..........................................................................................................13
Informe Técnico LEGOLangUAge 02/2013
2
Definición
Middleware dotCMS es una plataforma Web que permite gestionar usuarios, parámetros y
licencias de uso sobre distintos servicios. Ha sido desarrollada con el sistema de gestión de
contenidos (CMS) dotCMS ya que es la mejor alternativa en cuanto a CMS escritos en lenguaje
Java.
Esta aplicación permite gestionar los servicios creados por la empresa y así tener un catalogo
online mediante el cual los clientes pueden solicitar licencias de uso sobre los servicios que les
interese. Facilita al administrador el control de la expedición de licencias, gestión de permisos
y restricciones. Una vez se haya proporcionado acceso al cliente el middleware se encargará de
proporcionarle el código necesario para hacer uso de los servicios contratados, además
cuando el cliente haga uso de éstos se encargará de realizar las transformaciones necesarias y
comprobaciones para asegurar un uso lícito.
La motivación de este proyecto reside en que actualmente cada servicio tiene su panel de
administración, lo que implica descentralización y dificulta su control. El objetivo de
Middleware dotCMS es centrar toda esta gestión en una única plataforma Web.
El proyecto ha sido desarrollado por el Grupo de Investigación en Procesamiento del Lenguaje
Natural y Sistemas de Información (GPLSI), grupo de investigación de la Universidad de
Alicante.
Funcionalidad y Diseño General
El esquema general del middleware se puede observar en Figura 1.
Figura 1: Estructura general del middleware
1. El cliente mediante un código JavaScript público, que deberá haber insertado en su
web con anterioridad, hará una petición al servlet “getJavascript” que dependiendo
del código hash identificador del widget le devolverá otro código JavaScript
personalizado según la implementación (código del widget del servicio seleccionado en
una tecnología concreta) y según su licencia.
Informe Técnico LEGOLangUAge 02/2013
3
2. Es por esto que se debe consultar a la base de datos la relación entre ese código
identificador del widget, la implementación y la licencia.
3. Tras realizar las operaciones de sustitución de variables (señalizadas mediante
$nombreVar$) personalizando la plantilla de script de implementación, se devolverá al
cliente dicho código que realizará todas las operaciones de inicialización y creación de
la vista.
4. Este código debe hacer peticiones a nuestro servidor para obtener los datos a mostrar
en la vista, este es el propósito del servlet “callService”.
5. Antes de hacer la llamada a los web Services que proporcionarán los datos a devolver
al cliente, se deberán consultar los parámetros de configuración (ej.: parámetros a
solicitar, restricciones de uso) además de las URL de los web Services y el nombre del
wrapper que se comunicará con éstos.
6. Una vez obtenida toda la información se hará una llamada al wrapper concreto con los
parámetros necesarios.
7. El wrapper se encargará de hacer la llamada correctamente a los web Services y de
transformar el resultado a formato JSon.
8. Se devolverá el resultado al servlet “callService” en formato JSon.
9. Se devolverá el resultado al usuario en formato y el script que generó la vista lo
procesará para mostrar los datos en un formato entendible por el usuario.
Entradas y salidas
Ciclo de vida de un servicio
Hemos hablado de hash, widget, códigos de implementación, licencias... pero para poder
obtener todos estos datos primero deberemos añadirlos a la base de datos de nuestro CMS.
Ese es el proceso que se explicará a continuación:
DotCMS nos proporciona una gestión de usuarios que se darán de alta utilizando el enlace
“login” de la pantalla principal:
Informe Técnico LEGOLangUAge 02/2013
4
En esta intranet deberá aparecer un listado con los distintos servicios ofrecidos. Para contratar
uno el usuario lo elegirá y se mandará una solicitud al GPLSI que preparará todo lo necesario
para poder ofrecer dicho servicio (en un futuro deberá ser automático).
Esta lista de servicios se gestionará a través del panel de administración de dotCMS, al que
accederemos agregando al final de la URL ‘/admin’.
1. Dar de alta la empresa y departamento del usuario.
2. Haremos lo mismo con 'Department'.
2. Relacionar al usuario con los datos anteriores.
3. Crear la licencia con sus restricciones
Informe Técnico LEGOLangUAge 02/2013
5
4. Asociarle el servicio seleccionado por el usuario.
5. Estos servicios se relacionan con distintos webservices.
6. El servicio accede a una clase java del paquete 'wrappers'
Informe Técnico LEGOLangUAge 02/2013
6
7. Definir los widgets para ese servicio
8. Crear las implementaciones disponibles sobre cada tecnología.
Informe Técnico LEGOLangUAge 02/2013
7
El usuario deberá tener acceso al panel de control de personalización de ese servicio, donde
personalizará sus widgets creándose automáticamente un widget asociado a ese usuario en
concreto.
A partir de ese momento tendrá disponible un código JavaScript que deberá incrustar en su
web similar a este:
<script type="text/javascript"
src="http://servidor/application/gplsi/gplsi.js"></
script >
<div class ="gplsi-widget" data-gplsi-widget ="$hash$">
Nota: la variable $hash$ se traducirá por el hash real del widget personalizado
El contenido de ese código JavaScript público es el siguiente:
var tags;
window.addEventListener( "load" , init, true);
function init(e) {
tags = $( "[class^='gplsi-widget']" );
var head= document.getElementsByTagName('head')[0];
$.each(tags, function (i, item){
var widgetCode = item.getAttribute('data-gplsi-widget');
var script= document.createElement('script');
script. type= 'text/javascript';
script.src= 'http://servidor/app/getjavascript/?
widget=' +widgetCode;
head.appendChild(script);
});
}
Como podemos ver obtiene las etiquetas HTML cuya clase empiece por gplsi-widget y añade
un link a un fichero JavaScript en elemento head para obtener el código JavaScript asociado a
ese código de widget llamando al servlet getJavascript.
Este código obtenido podría ser similar a este:
$.getJSON( "http://servidor/app/callservice/?
hash=$hash$&text=" +textURI+ "&callback=?" , function (result){
caras(result.resultado);
resaltar(texto, result.Docfeatureweights);
});
Nota: Donde $hash$ sería el código identificador de la licencia del usuario.
Como podemos ver obtenemos el resultado en formato JSON que podrá ser interpretado por
otras funciones para añadir estos datos a la vista. La necesidad del uso de un parámetro
callback viene dado por la política del mismo origen que no permite que se manipule el DOM
de otra ubicación distinta a no ser que el código se ejecute con el mismo protocolo en el
mismo host y puerto.
Informe Técnico LEGOLangUAge 02/2013
8
Funcionalidad y diseño de cada uno de los módulos
Base de datos
Proyecto Java middleware
Dentro del paquete es.ua.middleware tendremos:
- wrappers
Donde hay una clase Wrapper que es una clase abstracta
que define los métodos que deben implementar todas las
clases que se ubiquen en este paquete.
- clients
Clientes de servicios web a los que habrá que hacer las
peticiones para obtener los datos que se mostrarán en el
widget.
- servlets
Paquete donde se encuentran los dos servlets
anteriormente descritos 'GetJavascript' y 'CallService'
además de la clase 'Activator' que sirve para mapear
dichos servicios a una URL en el servidor y crear el
contexto inicial.
Informe Técnico LEGOLangUAge 02/2013
9
En cuanto a la clase Wrapper esta tendrá un método llamado callService que recibirá los
parámetros necesarios y se encargará de llamar correctamente al servicio web asociado. La
respuesta recibida la transformará a formato JSON antes de devolvérsela al servlet
'CallService'. Debido a que cada web service tiene un formato distinto de respuesta,
deberemos crear un wrapper a medida de cada uno.
dotCMS
DotCMS es un CMS extensible cuyo núcleo son las herramientas web de administración pero
además ofrece la capacidad de extenderse y personalizarse mediante su arquitectura plugin.
Dynamic Plugins
El framework OSGI (Open Services Gateway Initiative) es un módulo del sistema y una
plataforma de servicios para el lenguaje de programación Java. Aplicaciones y componentes
pueden ser instaladas, iniciadas, paradas, actualizadas y desinstaladas remotamente sin
requerir un reinicio del CMS. DotCMS implementa OSGI utilizando la librería Apache Felix:
http://felix.apache.org/site/index.html



WEB-INF/felix/bundle: Incluye 6 jars, el runtime y el núcleo de OSGI. No deben
eliminarse o modificarse.
WEB-INF/felix/felix-cache: Almacena la caché y puede ser eliminada si se encuentran
problemas al desplegar una nueva clase.
WEB-INF/felix/load: aquí es donde deberemos añadir nuestros “bundles” (las clases
Java implementadas). Al añadirlo será detectado por OSGI y desplegado
automáticamente.
Informe Técnico LEGOLangUAge 02/2013
10

WEB-INF/felix/undeployed: Aquí es donde se almacenan los “bundles” que eliminemos
desde la interfaz de usuario (backend).
Esta sería la interfaz gráfica mediante la cual se pueden gestionar los plugins mediante la UI:
Cabe destacar el menú superior derecho, ya que como vemos permite cargar plugins desde la
interfaz, sin necesidad de copiar el .jar en la carpeta load. Por otro lado está la opción de
paquetes exportados, muy importante cuando tenemos problemas de dependencias, ya que
para resolverlas deben estar cargadas en el sistema. Cuando guardemos reiniciara el
framework OSGI evitándonos así el reinicio de todo el CMS:
Nota: Físicamente este fichero se encuentra en dotCMS/WEB-INF/felix/osgi-extra.conf.
Instalación dotCMS
Basándonos en las instrucciones de la página oficial de dotCMS se explicarán los pasos de la
instalación basada en la descarga de los fuentes desde el repositorio git:
1. Instalando Java, Ant, y el cliente de GIT
1. Descargamos e instalamos SUN Java JDK 1.6.0_23 o superior.
2. Nos aseguramos de que tenemos la variable de entorno JAVA_HOME apuntando al
directorio raíz de la instalación del jdk.
3. Instalamos un cliente para descargar el contenido del repositorio.
2. Clonar dotcms
Clonamos el proyecto de dotCMS desde el repositorio git:
https://github.com/dotCMS/dotCMS
3. Ejecutar 'ant deploy'
Ejecutamos y desplegamos en el directorio raíz de dotCMS. Esto compilará el CMS y
creará los ficheros SQL requeridos.
Informe Técnico LEGOLangUAge 02/2013
11
4. Crear una base de datos vacía
DotCMS puede ejecutarse sobre 4 tipos de bases de datos: Postgresql, MySQL, MSSQL y
Oracle. Se necesita crear una nueva base de datos y dotar de permisos al usuario que
utilizaremos para conectar a la base de datos.

Creamos una nueva base de datos llamada dotCMS con codificación de caracteres
UTF-8 (ej. mysql):
create database dotCMS default character set = utf8 default collate =
utf8_general_ci;


Creamos un usuario que tenga acceso a dicha base de datos y permisos “create
all”
Configuramos el archivo 'conf/Catalina/localhost/ROOT.xml' (ej. mysql):
<Resource name="jdbc/dotCMSPool" auth="Container"
type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/dotCMS?characterEncoding=UTF-8"
username="user" password="password" maxActive="60" maxIdle="10"
maxWait="60000" removeAbandoned="true" removeAbandonedTimeout="60"
logAbandoned="true" validationQuery="SELECT 1" testOnBorrow="true"/>

En la puesta en marcha dotCMS creará el esquema de la base de datos y los datos
iniciales que necesita.
5. Configurando IP / puerto del servidor
La especificaremos en ./tomcat/conf/server.xml file. Editamos tanto la etiqueta server
como connector:
<Server address="208.250.1.102"
port="8005" shutdown="SHUTDOWN" debug="0">
...
<Connector
address="208.250.1.102" port="80"
maxThreads="150" minSpareThreads="25"
maxSpareThreads="75"
enableLookups="false"
redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" />
...
6. Cambiar los permisos de los scripts
Cambiamos los permisos de los scripts en los directorios /bin:
> chmod 755 ./bin/*.sh
Informe Técnico LEGOLangUAge 02/2013
12
> chmod 755 ./tomcat/bin/*.sh
8. Poner en marcha el servidor
Utilizando el script bin/startup.sh y viendo los logs en tomcat/logs/dotcms.log
9. Intentar hacer login en el backend
La página principal se ubicará en:
http://localhost[:port] (o la dirección IP donde se esté ejecutando Catalina)
y la consola de administración:
http://localhost[:port]/admin
por defecto las credenciales son:
user: admin@dotcms.com
password: admin
Requisitos funcionales












Plataforma de centralización de servicios.
Personalizar parámetros para cada servicio.
Personalizar parámetros, restricciones y permisos de las licencias de uso.
Interfaz para que el usuario pueda contratar servicios.
Gestión de peticiones de licencias y expedición.
Gestión de implementaciones y parámetros.
Página web de acceso a la aplicación.
Página web de gestión de usuarios.
Página web de gestión de servicios.
Documentación completa del API.
Documentación completa de la BD.
Documentación completa de la aplicación.
Requisitos no funcionales
Los requisitos no funcionales son:

SO: 32 o 64 bit, Linux, Windows XP, 2000, Vista o 7, Solaris o Mac OS X
Nota: JVMs de 32 bit están limitadas de ~1.5 a 2.0GB RAM. Como dotCMS cachea
objetos en la RAM esta limitación puede afectar negativamente al rendimiento.



Hardware: Dual Core Pentium 2.0+, 4gb RAM (Shared), 100 GB HD
JVM: Sun Java 1.6.0_23 o superior.
Servidor de aplicaciones: Apache Tomcat 6+
Informe Técnico LEGOLangUAge 02/2013
13


Base de datos: PostgreSQL 8.4+ o MySQL 5.5+
No hay soporte para LDAP en la versión community.
Informe Técnico LEGOLangUAge 02/2013
14
Descargar