null

Создание текстовых полей неограниченной длины в Liferay Service Builder

Service Builder - это мощный инструмент в составе Liferay Portal, позволяющий разработчикам хранить в базе портала произвольные данные, описывать новые сущности и создавать сервисы для доступа (в том числе, и удалённого) к этим данным. Тема разработки сервисов для Liferay слишком обширна, чтобы её можно было рассмотреть в одной заметке, поэтому сегодня я остановлюсь на решении одной частной проблемы, связанной с заданием нужной длины для текстовых полей, и, в частности, создания полей неограниченной длины (тип "text" в БД).

В основном конфигурационном файле Service Builder, service.xml, длина текстовых полей не регламентируется никак - там задаётся тип данных Java, а он, независимо от длины, у всех строк будет String:

Строковые поля в service.xml

Если всё оставить "как есть", то, например, в случае использования PostgreSQL, мы получим все текстовые поля типа varchar длиной 75 символов, чего во многих случаях явно будет недостаточно:

Длина всех текстовых полей - 75 символов

Несложное гугление позволяет найти решение - чтобы изменить длину поля, надо модифицировать файл src/META-INF/portlet-model-hints.xml:

Вносим изменения в portlet-model-hints.xml

Проверяем - длина полей, действительно, изменилась:

Длина полей изменилась

Резонный вопрос - а как тогда сделать поле неограниченной длины? Проведём эксперимент - выставим в portlet-model-hints.xml в качестве его длины какое-нибудь очень большое число:

It's over 9000!!!

Проверяем базу, и видим очень сильное колдунство:

Уличная магия

Гуглим ещё раз, и узнаём, что никакой уличной магии тут нет - оказывается, на Service Builder, действительно, удивительным образом влияют большие числа, только не 9000 (как можно было бы предположить), а 4000 - все поля с длиной до 4000 символов Service Builder пытается транслировать в varchar, а начиная с 4001 символа - в text.

Таким образом, проблема решена - чтобы наше поле стало неограниченной длины, нужно задать ему в portlet-model-hints.xml длину в 4001 символ или больше.

Коротко о себе:

Работаю ведущим программистом в компании Tune IT и ассистентом кафедры Вычислительной техники в Университете ИТМО .

Занимаюсь проектами, связанными с разработкой разного рода веб-приложений (порталы, CRM-системы, системы электронного документооборота), а также, в рамках научной работы на кафедре, изучаю возможности применения семантического анализа в задачах САПР.