4.4.2. Data Stores
Предпочтительный способ работы с данными в CUBA-приложениях - использование сущностей: либо декларативно в источниках данных и связанных с данными компонентах, либо программно через DataManager или EntityManager. Сущности отображаются на данные в хранилище, которое обычно представляет собой реляционную БД. Приложение может работать с несколькими хранилищами, так что его модель данных будет содержать сущности, отображаемые на данные из разных БД.
Некоторая сущность может принадлежать только одному хранилищу. Сущности из разных хранилищ можно отображать на одном экране UI, при этом DataManager
обеспечивает их чтение и запись в соответствующее хранилище. В зависимости от типа сущности, DataManager
выбирает зарегистрированное хранилище, представленное реализацией интерфейса DataStore
, и делегирует ему загрузку или сохранение. При управлении транзакциями и работе с сущностями через EntityManager
необходимо явно указывать, какое хранилище использовать. Подробнее см. методы интерфейса Persistence и параметры аннотации @Transactional.
Платформа содержит единственную реализацию интерфейса DataStore
: RdbmsStore
, предназначенную для работы с реляционными СУБД через слой ORM. Кроме того, в проекте приложения можно реализовать DataStore
для интеграции, например, с нереляционной СУБД или внешней системой, имеющей REST интерфейс.
Каждое CUBA-приложение имеет основное хранилище, которое содержит системные сущности и используется для входа пользователей в приложение. В данном руководстве под базой данных всегда имеется в виду основное хранилище, если явно не оговорено другое. Основное хранилище должно представлять собой реляционную БД, подключенную через источник данных JDBC. Источник данных основного хранилища находится в JNDI с именем, указанным в свойстве приложения cuba.dataSourceJndiName (по умолчанию jdbc/CubaDS
).
Имена дополнительных хранилищ указываются в свойстве приложения cuba.additionalStores. Если дополнительное хранилище является реляционной БД (RdbmsStore
), необходимо указать для него следующие свойства приложения:
-
cuba.dataSourceJndiName_{store_name}
- JNDI-имя соответствующего источника данных JDBC. -
cuba.dbmsType_{store_name}
- тип базы данных хранилища. -
cuba.persistenceConfig_{store_name}
- путь к фалуpersistence.xml
хранилища.
Если вы реализовали интерфейс DataStore
в проекте, укажите имя бина реализации в свойстве приложения cuba.storeImpl_{store_name}
.
Предположим, что в вашем проекте два дополнительных хранилища: db1
(база данных PostgreSQL) and mem1
(некоторое in-memory хранилище, реализованное бином проекта). Тогда необходимо указать следующие свойства приложения в файле app.properties
модуля core:
cuba.additionalStores = db1, mem1
cuba.dataSourceJndiName_db1 = jdbc/db1
cuba.dbmsType_db1 = postgres
cuba.persistenceConfig_db1 = com/company/sample/db1-persistence.xml
cuba.storeImpl_mem1 = sample_InMemoryStore
Свойства cuba.additionalStores
и cuba.persistenceConfig_db1
необходимо также указать в файлах свойств всех используемых блоков приложения (web-app.properties
, portal-app.properties
, и т.д.).
Tip
|
CUBA Studio позволяет настраивать дополнительные хранилища на вкладке Project properties > Advanced. Studio автоматически создает все необходимые свойства приложения и поддерживает соответствующие файлы |