2009-07-27 15 views
6

Ho creato un portlet JSR-268 per Liferay che utilizza servizi per interagire con un database. Posso distribuire il portlet senza problemi o errori, ma la tabella definita dai servizi non viene creata!Tabella SQL non creata durante la distribuzione di un file WAR su Liferay

Non ottengo errore "tabella non trovata" quando eseguo il test del portlet. Non ho alcun errore! La tabella non è presente nel database. Ho trovato altre cose su internet dicendo che dovrei usare il file "create.sql" generato creato da Liferay Service Builder, ma non vedo quel file da nessuna parte.

Qualcuno può darmi una mano?

risposta

10

Le tabelle non sono mai state create? Ho avuto un problema simile quando ho cancellato le tabelle a mano. Ho pensato che sarebbero stati creati di nuovo durante la distribuzione del portlet, ma non è successo.

Dopo aver studiato il codice sorgente ho scoperto che i negozi Liferay informazioni sui portlet nella tabella servicecomponent e controlli 2 attività prima di eseguire la (pseudo) SQL in META-INF/tables.sql:

  1. Il build.number in service.properties deve essere superiore a quello, memorizzato in servicecomponent,
  2. Il tables.sql deve essere diverso da quello memorizzato in servicecomponent.

Solo a questo punto viene eseguito tables.sql.

Un modo semplice per ottenere ciò è eliminare tutte le voci in servicecomponent indirizzate al portlet.

2

Provare eliminando una voce dalla tabella servicecomponent. E ridistribuire il portlet.

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

Se stai usando ServiceBuilder in Liferay 6.2 quando si definisce una nuova entità nello schema Liferay in service.xml, la prima volta che qualsiasi Portlet tenta di accedere al tavolo verrà creato se non è esiste .

Ci sono diversi problemi quando si utilizza uno schema diverso perché a volte Liferay non crea automaticamente tabelle. Quindi è necessario rilasciare la frase SQL Creazione e crearla manualmente, quindi accedervi tramite LocalServiceUtil.

1

Ho affrontato lo stesso problema e sotto indicata la soluzione funziona per me.

Passi

  1. mi hanno cambiato il build.number in service.properties superiore a quella memorizzata in ServiceComponent.
  2. Rimosso tutti i file xml dalla cartella META-INF.
  3. Rimosso tutti i file sql dalla cartella webapp/WEB-INF/sql.

Poi accumulo di servizio e distribuire si crea tabelle personalizzate che sono defiend in service.xml file.

Problemi correlati