Frage Die SQL-Tabelle wurde beim Bereitstellen einer WAR-Datei für Liferay nicht erstellt


Ich habe ein JSR-268-Portlet für Liferay erstellt, das Dienste für die Interaktion mit einer Datenbank verwendet. Ich kann das Portlet ohne Probleme oder Fehler bereitstellen, aber die von den Diensten definierte Tabelle wird nicht erstellt!

Ich erhalte beim Versuch, das Portlet zu testen, keine Fehlermeldung "Tabelle nicht gefunden". Ich bekomme überhaupt keine Fehler! Die Tabelle ist einfach nicht in der Datenbank vorhanden. Ich habe andere Dinge im Internet gefunden, die sagen, dass ich die generierte "create.sql" -Datei verwenden sollte, die der Liferay Service Builder erstellt hat, aber ich sehe diese Datei nirgends.

Kann mir jemand helfen?


6
2017-07-27 09:23


Ursprung


Antworten:


Wurden die Tabellen nie erstellt? Ich hatte ein ähnliches Problem, als ich die Tabellen von Hand löschte. Ich dachte, sie würden wieder erstellt werden, wenn das Portlet erneut bereitgestellt wird, aber es ist nicht passiert.

Nach dem Studium des Quellcodes habe ich herausgefunden, dass Liferay Informationen über die Portlets in der Tabelle speichert servicecomponent und überprüft 2 Dinge, bevor es das (Pseudo-) SQL ausführt META-INF/tables.sql:

  1. Das build.number im service.properties muss höher sein als das, gespeichert in servicecomponent,
  2. Das tables.sql muss sich von dem in gespeicherten unterscheiden servicecomponent.

Nur dann tables.sql wird ausgeführt.

Eine einfache Möglichkeit, dies zu erreichen, ist das Löschen aller Einträge in servicecomponent Adressierung Ihres Portlets


10
2018-01-07 12:47



Versuchen Sie, indem Sie einen Eintrag aus der Servicekomponenten-Tabelle löschen. Stellen Sie Ihr Portlet erneut bereit.

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

2
2018-04-09 09:13



Ich habe das gleiche Problem und die unten angegebene Lösung funktioniert bei mir.

Schritte

  1. Ich habe das geändert Build.Nummer im service.properties höher als die in Service-Komponente gespeichert.
  2. Entfernt alle XML-Dateien aus META-INF Mappe.
  3. Entfernt alle SQL-Dateien aus webapp / WEB-INF / sql Mappe.

Dann Build-Service und bereitstellen erstellt benutzerdefinierte Tabellen, die definiert sind service.xml Datei.


1
2017-10-11 10:42



Wenn Sie serviceBuilder in Liferay 6.2 verwenden, wenn Sie eine neue Entität im Liferay-Schema in service.xml definieren, wird das Portlet beim ersten Zugriff auf die Tabelle zum ersten Mal erstellt, wenn es nicht existiert.

Wenn Sie ein anderes Schema verwenden, gibt es mehrere Probleme, da Liferay manchmal Tabellen nicht automatisch erstellt. Dann müssen Sie den Creation SQL-Satz laden und manuell erstellen und dann über LocalServiceUtil darauf zugreifen.


0
2017-10-04 10:29