2009-07-27 4 views
6

Я создал портлет JSR-268 для Liferay, который использует службы для взаимодействия с базой данных. Я могу развернуть портлет без проблем или ошибок, но таблица, определенная службами, не создается!SQL-таблица, не созданная при развертывании WAR-файла в Liferay

При проверке портлета я не получаю ошибку «таблица не найдена». У меня нет никаких ошибок! Таблицы просто нет в базе данных. Я нашел другие вещи в Интернете, говоря, что я должен использовать сгенерированный файл «create.sql», созданный Liferay Service Builder, но я не вижу этот файл нигде.

Может кто-нибудь помочь мне?

ответ

10

Неужели таблицы не были созданы? У меня была аналогичная проблема, когда я удалял таблицы вручную. Я думал, что они снова будут созданы при развертывании портлета, но этого не произошло.

После изучения исходного кода я узнал, что Liferay хранит информацию о портлетов в таблице servicecomponent и проверяет 2 вещи перед выполнением (псевдо) SQL в META-INF/tables.sql:

  1. build.number в service.properties должен быть выше, хранится в servicecomponent,
  2. tables.sql должен отличаться от значения, указанного в servicecomponent.

Только тогда выполняется tables.sql.

Простой способ добиться этого - удалить все записи в servicecomponent, обращаясь к портлету.

2

Попробуйте удалить запись из таблицы servicecomponent. И переустановите портлет.

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

Если вы используете ServiceBuilder в Liferay 6.2 при определении нового лица в схеме Liferay в service.xml, в первый раз, что любой портлет пытается получить доступ к таблице он будет создан, если он не существует ,

Есть несколько проблем, когда вы используете другую схему, потому что иногда Liferay не создает таблицы автоматически. Затем вам нужно выполнить предложение Creation SQL и создать его вручную, а затем получить доступ к нему через LocalServiceUtil.

1

Я столкнулся с той же проблемой и ниже данного решения работает для меня.

Шаги

  1. Я изменил build.number в service.properties выше, хранящейся в servicecomponent.
  2. Удалены все xml-файлы из META-INF папка.
  3. Удалены все файлы sql от webapp/WEB-INF/sql папка.

Затем билд-служба и развертывание будет создает пользовательские таблицы, которые defiend в service.xml файла.

Смежные вопросы