4.3.1.1. Поддержка произвольных СУБД

На уровне прикладного проекта можно реализовать работу с любой СУБД, поддерживаемой фреймворком ORM (OpenJPA). Для этого достаточно выполнить следующее:

  • Указать тип СУБД в виде произвольного кода в свойстве cuba.dbmsType. Код должен отличаться от используемых в платформе кодов hsql, postgres, mssql, oracle.

  • Реализовать интерфейсы DbmsFeatures, SequenceSupport, DbTypeConverter классами с именами соответственно TypeDbmsFeatures, TypeSequenceSupport, TypeDbTypeConverter, где Type - код типа СУБД. Пакет класса имплементации должен быть таким же, как у интерфейса.

  • Если проект включает базовый проект Workflow, необходимо переопределить бин CubaJbpmSpringHelper и его метод getHibernateDialectName() для выбора диалекта Hibernate, используемого в jBPM.

  • Создать скрипты инициализации и обновления БД в каталогах с кодом СУБД. Скрипты инициализации должны включать создание всех объектов БД, необходимых для сущностей платформы (их можно скопировать из имеющихся в каталоге 10-cuba и др. скриптов и исправить для данной СУБД).

  • Для создания и обновления БД задачами Gradle в build.gradle необходимо для этих задач указать дополнительные параметры:

    task createDb(dependsOn: assemble, type: CubaDbCreation) {
      dbms = 'my'                                            // DBMS code
      driver = 'net.my.jdbc.Driver'                          // JDBC driver class
      dbUrl = 'jdbc:my:myserver://192.168.47.45/mydb'        // Database URL
      masterUrl = 'jdbc:my:myserver://192.168.47.45/master'  // URL of a master DB to connect to for creating the application DB
      dropDbSql = 'drop database mydb;'                      // Drop database statement
      createDbSql = 'create database mydb;'                  // Create database statement
      timeStampType = 'datetime'                             // Date and time datatype - needed for SYS_DB_CHANGELOG table creation
      dbUser = 'sa'
      dbPassword = 'saPass1'
    }
    
    task updateDb(dependsOn: assemble, type: CubaDbUpdate) {
      dbms = 'my'                                            // DBMS code
      driver = 'net.my.jdbc.Driver'                          // JDBC driver class
      dbUrl = 'jdbc:my:myserver://192.168.47.45/mydb'        // Database URL
      dbUser = 'sa'
      dbPassword = 'saPass1'
    }