lunes, 6 de julio de 2009

Configuración de Liferay y Jackrabbit con PostgreSQL

Este artículo da un vistazo rápido a la configuración de la biblioteca documental de Liferay Portal con Jackrabbit con persistencia en una base de datos PostgreSQL.

Se asume que se parte de una configuración limpia, es decir, que no se hará migración de datos
de una configuración previa.


0. Detener liferay portal

1. Limpiar la configuración de jackrabbit -
Mover el repositorio a un directorio nuevo

$ mv ~/liferay/jackrabbit ~/liferay/jackrabbit.0

2. Configuración inicial de la base de datos
Se creará una base de datos llamada jcr con usuario jcr.

Nota. Es necesario descargar una versión actualizada del driver jdbc para postgres desde http://jdbc.postgresql.org y ubicar el jar ~/server/default/lib/ext

su - postgres
createuser jcr -P
createdb -E utf8 -O jcr jcr

3. Configurar el repositorio de jackrabbit y documentLibrary

En ~/deploy/ROOT.war/WEB-INF/classes/portal-ext.properties
poner las siguientes líneas:

#
# JCR
#
jcr.jackrabbit.repository.root=/home/username/liferay/jcr

#
# DocLibrary
#
dl.hook.impl=com.liferay.documentlibrary.util.JCRHook


4. Iniciar Liferay para que se cree el nuevo repositorio en ~/liferay/jcr

./run.sh

5. Configuración del repositorio

Editar el archivo ~liferay/jcr/repository.xml para que contenga.
Nota. Revisar la configuración de claves de la base de datos.

<!--repository.xml -->
<?xml version="1.0"?>

<Repository>
<!-- Configuracion para PostgreSQL REPOSITORY-->
<FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
<param name="driver" value="org.postgresql.Driver"/>
<param name="url" value="jdbc:postgresql://localhost/jcr" />
<param name="user" value="jcr" />
<param name="password" value="***" />
<param name="schema" value="postgresql"/>
<param name="schemaObjectPrefix" value="J_R_FS_"/>
</FileSystem>
<PersistenceManager class="org.apache.jackrabbit.core.state.db.SimpleDbPersistenceManager">
<param name="driver" value="org.postgresql.Driver" />
<param name="url" value="jdbc:postgresql://localhost/jcr" />
<param name="user" value="jcr" />
<param name="password" value="***" />
<param name="schema" value="postgresql" />
<param name="schemaObjectPrefix" value="J_R_PM_" />
<param name="externalBLOBs" value="false" />
</PersistenceManager>

<Security appName="Jackrabbit">
<AccessManager class="org.apache.jackrabbit.core.security.SimpleAccessManager" />
<LoginModule class="org.apache.jackrabbit.core.security.SimpleLoginModule">
<param name="anonymousId" value="anonymous" />
</LoginModule>
</Security>
<Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="liferay" />
<Workspace name="liferay">
<!-- Configuracion para PostgreSQL PM-->
<FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
<param name="driver" value="org.postgresql.Driver"/>
<param name="url" value="jdbc:postgresql://localhost/jcr" />
<param name="user" value="jcr" />
<param name="password" value="***" />
<param name="schema" value="postgresql"/>
<param name="schemaObjectPrefix" value="J_FS_"/>
</FileSystem>
<PersistenceManager class="org.apache.jackrabbit.core.state.db.SimpleDbPersistenceManager">
<param name="driver" value="org.postgresql.Driver" />
<param name="url" value="jdbc:postgresql://localhost/jcr" />
<param name="user" value="jcr" />
<param name="password" value="***" />
<param name="schema" value="postgresql" />
<param name="schemaObjectPrefix" value="J_PM_" />
<param name="externalBLOBs" value="false" />
</PersistenceManager>

</Workspace>
<Versioning rootPath="${rep.home}/version">
<!-- Configuracion para PostgreSQL VERSIONING-->
<FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
<param name="driver" value="org.postgresql.Driver"/>
<param name="url" value="jdbc:postgresql://localhost/jcr" />
<param name="user" value="jcr" />
<param name="password" value="***" />
<param name="schema" value="postgresql"/>
<param name="schemaObjectPrefix" value="J_V_FS_"/>
</FileSystem>
<PersistenceManager class="org.apache.jackrabbit.core.state.db.SimpleDbPersistenceManager">
<param name="driver" value="org.postgresql.Driver" />
<param name="url" value="jdbc:postgresql://localhost/jcr" />
<param name="user" value="jcr" />
<param name="password" value="***" />
<param name="schema" value="postgresql" />
<param name="schemaObjectPrefix" value="J_V_PM_" />
<param name="externalBLOBs" value="false" />
</PersistenceManager>
</Versioning>
<DataStore class="org.apache.jackrabbit.core.data.db.DbDataStore">
<param name="url" value="jdbc:postgresql:jcr"/>
<param name="user" value="jcr"/>
<param name="password" value="***"/>
<param name="databaseType" value="postgresql"/>
<param name="driver" value="org.postgresql.Driver"/>
<param name="minRecordLength" value="1024"/>
<param name="maxConnections" value="3"/>
<param name="copyWhenReading" value="true"/>
<param name="tablePrefix" value=""/>
<param name="schemaObjectPrefix" value="JCR_"/>
</DataStore>
</Repository>

6. Reiniciar liferay.

7. Verificar que los objetos se crearon correctamente en la base y que no hay errores en consola, haciendo una prueba de upload de archivo a la DocumentLibrary

8. Eso es todo !


Referencias

http://jackrabbit.apache.org/getting-started-with-apache-jackrabbit.html

http://www.onjava.com/pub/a/onjava/2006/10/04/what-is-java-content-repository.html?page=1

http://www.ibm.com/developerworks/java/library/j-jcr/