17/06/2019 | Javier Jorge Soteras | 148 Visitas

Liferay y los conectores a base de datos

Liferay es una plataforma open source de gestión de contenidos orientada a la construcción de soluciones web a medida. Con el objetivo de hacer frente a la gran variedad de casuísticas existentes, Liferay ofrece soporte a distintos proveedores de bases de datos.

Compatibilidades de Liferay con distintas bases de datos

Como una primera solución rápida y sencilla, Liferay ofrece por defecto una base de datos Hypersonic. Para aquellos que no la conozcan, Hypersonic es una base de datos compacta escrita en Java, útil para pequeños desarrollos o demos. Aun así, tal y como se indica en el arranque de Liferay al configurar la base de datos, no es aconsejable para entornos productivos.

En caso de buscar soluciones más complejas tenderemos a utilizar otros proveedores de bases de datos. Como cualquier otro sistema, Liferay no puede dar soporte a todas las bases de datos existentes en la red. Por tanto, la pregunta que nos hacemos es simple:

¿Sobre qué bases de datos ofrece soporte Liferay?

Depende. A pesar de no haberlo mencionado hasta ahora, Liferay cuenta con dos versiones distintas: Liferay Community Edition (CE), gratuita y de código abierto, y Liferay Digital Experience Platform (DXP), de pago y con constantes mejoras y optimizaciones.

En función de la versión seleccionada, Liferay ofrece soporte a distintos proveedores de bases de datos. Con Liferay Community Edition tendremos soporte sobre bases de datos open-source como son MySQL, PostgreSQL o MariaDB entre otras. En caso de contar con Liferay Digital Experience Platform, además de las bases de datos antes mencionadas, tendremos soporte para bases de datos comerciales como Oracle DB, Microsoft SQL Server o IBM DB2. Para consultar las compatibilidades con las distintas bases de datos, Liferay pone a disposición en su documentación online la matriz de compatibilidades por versión:

 

liferay bases de datos compatibilidades

Alternativas a las bases de datos soportadas

¿Qué ocurre cuando requerimos de una conexión a una base de datos no soportada? Tranquilos, aún hay esperanza. Para solventar este problema, primero tendremos en cuenta que Liferay se basa en Java. Por tanto, ¿Qué nos impide iniciar nuestra propia conexión a una base de datos externa? En realidad, nada. Siendo puritanos, podríamos utilizar la clase DriverManager proporcionada por Java para abrir nuestra propia conexión con una base de datos externa siempre y cuando proporcionemos el driver necesario para ello. Podríamos seguir utilizando un portlet que emplee Hibernate, Spring, etc. El límite está en la imaginación. Lo que si que tendremos que tener en cuenta, es que si empleamos estos trucos, emplear el framework de Liferay para generar entidades ya no estará a nuestra alcance, ¿o si?

Aunque Liferay CE no ofrezca soporte directo, sí nos ofrece la posibilidad de que nosotros mismos desarrollemos el soporte a la base de datos que requiramos. Esto es debido a que Liferay CE ha decidido refactorizar su código para utilizar los SPI (Service Provider Interface) de Java. SPI es un mecanismo que nos permite extender o modificar el comportamiento de un sistema sin cambiar la fuente. Incluye una serie de interfaces, clases y métodos que podemos extender o implementar con el fin de cambiar su funcionalidad habitual. Gracias a esto, podemos implementar la interfaz DBFactory y la clase abstracta BaseDB con el objetivo de dar soporte a otros proveedores de bases de datos.

Como conectar Liferay con bases de datos externas

Recordemos que la base del framework de Liferay para generar servicios está generada con Spring. Gracias a ello, Liferay pone a nuestra disposición la opción de configurar una base de datos externa y evitar el uso de la base de datos que tiene configurada por defecto. Para ello, basta con configurar nuestro service.xml para que apunte al data-source que habremos configurado en el fichero ext-spring.xml de nuestro servicio. Como un ejemplo:

 

service.xml:

<service-builder package-path="com.hiberus.example" >
   <namespace>example</namespace>
   <entity local-service="true" name="MyItem" table="myitem" data-source="externalDataSource" remote-service="false" uuid="false">
      <column name="xxx" db-name="yyy" type="zzz" />
      ...
   </entity>
</service-builder>

 

 

ext.spring.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans default-destroy-method="destroy" default-init-method="afterPropertiesSet"
 xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 
   <bean class="com.liferay.portal.dao.jdbc.spring.DataSourceFactoryBean" id="dataSourceBean">
      <property name="propertyPrefix" value="jdbc." />
      <property name="properties">
         <props>
            <prop key="jdbc.driverClassName">driver_classname</prop>
            <prop key="jdbc.url">jdbc_url</prop>
            <prop key="jdbc.username">username</prop>
            <prop key="jdbc.password">password</prop>
         </props>
      </property>
   </bean>
   <bean class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy" id="customDataSource">
      <property name="targetDataSource" ref="dataSourceBean" />
   </bean>
   <alias alias="externalDataSource" name="customDataSource" />
</beans>

 

Emplear el conector de base de datos sin emplear los services

Seguro que algunas veces habéis querido ejecutar alguna query sencilla en algún momento que no tiene que ver con el servicio que estáis empleando o en momentos en los que no dispones de ningún servicio. para ello, Liferay pone a nuestro alcance un acceso directo al conector que tiene configurado por defecto. Gracias al DataAccess.getConnection() podemos ejecutar esas pequeñas queries que en un momento u otro hemos necesitado y nos hemos tenido que trabajar un servicio para poder obtener la información. Esto ahorra tiempo, pero no es el camino más recomendable, por ello, recordad, un gran poder conlleva una gran responsabilidad.

En resumen, podemos ver como Liferay ofrece soporte a las bases de datos más utilizadas en el mercado hoy en día. Además, en caso de no ofrecer soporte directo, hemos visto que es perfectamente adaptable a cualquier otro proveedor de bases de datos mediante un pequeño desarrollo. Todo esto lo convierte en una plataforma perfectamente adaptable a todo tipo de proveedores de bases de datos.

 

Si quieres leer sobre Liferay, tenemos otros artículos como integraciones con Liferay, creación de temas para Liferay o cómo mejorar el buscador de Liferay.

Tras años de experiencia desarrollando y explotando al máximo las capacidades que ofrece Liferay, desde Hiberus te ayudamos a definir e identificar los objetivos de tu empresa y los requisitos necesarios para alcanzarlos. Contáctanos para solicitar más información sobre cómo podemos ayudarte a adaptar Liferay a tu proyecto.

 

 

Te ayudamos a crear tu intranet con Liferay

Liferay Portal es el líder mundial de soluciones abiertas de portales para empresas utilizando lo último en Java y las tecnologías Web 2.0.

Más que un portal, Liferay es una plataforma para crear aplicaciones y soluciones de negocio efectivas. En Hiberus te ayudamos a sacar el máximo partido a Liferay adaptándolo a las necesidades de tu proyecto.

¿Te ayudamos?

Comentar

Su dirección de correo electrónico no será publicada.Los campos necesarios están marcados *

*

¡Contacta con nosotros!

¿ALGUNA DUDA?

Llámanos y nuestros expertos realizarán un asesoramiento personalizado sin compromiso

902 87 73 92

SOLICITAR INFORMACIÓN

* Campos Obligatorios

Afirmo que he leido el aviso legal y acepto la Política de privacidad
Permito el tratamiento de mis datos personales con la finalidad informada