2009-07-27 39 views
6

He creado un portlet JSR-268 para Liferay que usa servicios para interactuar con una base de datos. Puedo implementar el portlet sin problemas o errores, ¡pero la tabla definida por los servicios no se crea!Tabla SQL no creada al implementar un archivo WAR en Liferay

No obtengo el error "tabla no encontrada" cuando pruebo el portlet. ¡No recibo ningún error! La tabla simplemente no está allí en la base de datos. He encontrado otras cosas en Internet que dicen que debería usar el archivo "create.sql" generado que creó Liferay Service Builder, pero no veo ese archivo en ninguna parte.

¿Alguien me puede ayudar?

Respuesta

10

¿Las tablas nunca se han creado? Tuve un problema similar cuando borré las tablas a mano. Pensé que se crearían nuevamente al desplegar el portlet nuevamente, pero no sucedió.

Después de estudiar el código fuente descubrí que almacena Liferay información sobre los portlets en la tabla servicecomponent y cheques de 2 atracciones antes de ejecutar el SQL (pseudo) en META-INF/tables.sql:

  1. El build.number en service.properties debe haber más alto que eso, almacenado en servicecomponent,
  2. El tables.sql debe ser diferente del almacenado en servicecomponent.

Solo entonces se ejecuta tables.sql.

Una manera fácil de lograr eso, es eliminar todas las entradas en servicecomponent dirigiéndose a su portlet.

2

Pruebe borrando una entrada de la tabla servicecomponent. Y vuelva a implementar su portlet.

delete FROM servicecomponent where buildNamespace="<your table namespace>" 
0

Si está utilizando ServiceBuilder en Liferay 6.2 cuando se define una nueva entidad en el esquema de Liferay en service.xml, la primera vez que cualquiera de portlets intenta acceder a la tabla que se creará si no existe .

Existen varios problemas cuando usa un esquema diferente porque a veces Liferay no crea tablas automáticamente. Luego debe lanzar la frase SQL de creación y crearla manualmente y luego acceder a ella a través de LocalServiceUtil.

1

Me he enfrentado al mismo problema y la solución dada a continuación funciona para mí.

Pasos

  1. me han cambiado la build.number en service.properties más altas que la almacenada en ServiceComponent.
  2. Se eliminaron todos los archivos xml de carpeta META-INF.
  3. Se eliminaron todos los archivos sql de la carpeta web webapp/WEB-INF/sql.

Entonces acumulación servicio y desplegar se crea tablas personalizadas que son defiend en service.xml archivo.

Cuestiones relacionadas