# Создание БД проекта Создание роли для основной схемы БД проекта ``` CREATE ROLE "" WITH LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION PASSWORD ''; ``` Создание роли для схемы безопасности БД проекта ``` CREATE ROLE "" WITH LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION PASSWORD ''; ``` Создание БД проекта ``` CREATE DATABASE "" WITH OWNER = ""; ``` ВНИМАНИЕ: в общем случае, отдельную БД для безопасности создавать не нужно. В конфигурации источника данных security-ds в файле standalone.xml в качестве имени базы данных используйте базу данных приложения. Предоставление необходимых прав для роли <your-project-security-role> ``` GRANT CREATE ON DATABASE "" TO ""; ``` Создание таблицы shedlock для автосинхронизации ``` CREATE TABLE shedlock ( name varchar not null constraint tasks_lock_pkey primary key, lock_until timestamp, locked_at timestamp, locked_by varchar ); comment on table shedlock is 'Таблица для синхронизации выполнения запланированных задач между нодами.'; ALTER TABLE shedlock OWNER to "owner"; ``` ## Дополнительные ограничения базы секьюрити Логин пользователя <user_account.username> и имена ролей <user_role.name> не должны совпадать, так как в ходе работы jbpm-а они сохраняются в одну и ту же таблицу. Пример ошибки при совпадении: username = 'qa_test' и role_name = 'qa_test' (роль привязана к этому пользователю). Ошибка возникает при запуске любого процесса под этим пользователем. ``` ERROR [errorhandling.ExceptionHandlerController] (default task-5) [19usm9-bgyi63] Organizational entity already exists with [GroupImpl:'qa_test'] id, please check that there is no group and user with same id: java.lang.RuntimeException: Organizational entity already exists with [GroupImpl:'qa_test'] id, please check that there is no group and user with same id ``` ## Создание нового администратора Создайте группу <your-admin-group> и предоставьте ей права в модуль администрирования. Для этого выполните в БД проекта ``` INSERT INTO security.user_group( user_group_id, name, access_level_id) (SELECT uuid_in(md5(random()::text || clock_timestamp()::text)::cstring), '', access_level_id FROM security.access_level where level=999); ``` ``` INSERT INTO security.link_user_group_user_role( link_user_group_user_role_id, user_group_id, user_role_id) (SELECT uuid_in(md5(random()::text || clock_timestamp()::text)::cstring), (SELECT user_group_id FROM security.user_group WHERE name = ''), (SELECT user_role_id FROM security.user_role WHERE name = 'Security - User Admin')); ``` ``` INSERT INTO security.link_user_group_user_role( link_user_group_user_role_id, user_group_id, user_role_id) (SELECT uuid_in(md5(random()::text || clock_timestamp()::text)::cstring), (SELECT user_group_id FROM security.user_group WHERE name = ''), (SELECT user_role_id FROM security.user_role WHERE name = 'Security - Group Admin')); ``` ``` INSERT INTO security.link_user_group_user_role( link_user_group_user_role_id, user_group_id, user_role_id) (SELECT uuid_in(md5(random()::text || clock_timestamp()::text)::cstring), (SELECT user_group_id FROM security.user_group WHERE name = ''), (SELECT user_role_id FROM security.user_role WHERE name = 'Security - Role Admin')); ``` # Настройка браузера для входа в систему с помощью Kerberos 1. Запустите браузер firefox. 2. В адресной строке введите about:config, нажать кнопку "я принимаю на себя риск" 3. С помощью поиска найдите параметр network.negotiate-auth.trusted-uris и в качестве значения ввести домен(например для домена example.com надо ввести .example.com) 4. Откройте в браузере приложение. Пример http://app.example.com/ . Приложение должно открыться без запроса логина/пароля # Восстановление структуры БД На основе БД проекта с помощью jOOQ генерируются Java классы для каждого объекта БД. Это происходит по нажатию кнопки Обновить на панели БД в студии. При необходимости можно сформировать DDL на основе данных классов. Пример класса для генерации DDL ``` package ru.cg.webbpm.test_project.db_beans; import org.jooq.*; import org.jooq.impl.*; public class Main { public static void main (String args []) { DefaultConfiguration defaultConfiguration = new DefaultConfiguration(); defaultConfiguration.setSQLDialect(SQLDialect.POSTGRES); Queries ddl = DSL.using(defaultConfiguration).ddl(DefaultCatalog.DEFAULT_CATALOG); for (Query query : ddl.queries()) { System.out.println(query); } } } ``` ** ВНИМАНИЕ: ** - этим способом нельзя восстановить функции/процедуры БД см. также [https://www.jooq.org/doc/latest/manual/sql-building/ddl-statements/generating-ddl/](https://www.jooq.org/doc/latest/manual/sql-building/ddl-statements/generating-ddl/) # Сборка проекта ## В dev режиме ```bash mvn clean && mvn package ``` ## В prod режиме ```bash mvn clean && mvn package -Pprod -DngcCoreCount=4 -DpagePackSizeMb=24 ``` ngcCoreCount - количество ядер, выделяемых процессу компиляции ngc. По умолчанию - количество ядер - 1 pagePackSizeMb - размер пачки в МБ. По умолчанию - количество ядер - 24 МБ. ## С обновлением database beans ```bash mvn clean && mvn package -Dwebbpm.generate-db-beans ``` # Версия проекта Если версия проекта содержит SNAPSHOT (например 1.0-SNAPSHOT), то при установке такой версии на сервере приложений будет запущена процедура остановки запущенных процессов данной версии. Этот режим удобен при отладке процесса на рабочем месте аналитика. На боевом и тестовом стенде необходимо передавать дистрибутив проекта, с версией, которая не содержит SNAPSHOT. Например - 1.0 # Обновление платформы ## Обновления версии платформы ### С помощью студии 1. Откройте проект в студии. Версия платформы обновится автоматически ### Вручную 1. Обновите значение webbpm-platform.version в pom.xml. Пример ```xml 3.164.0-SNAPSHOT ``` ## Обновление базового пакета компонент ### С помощью студии 1. Откройте проект в студии. 2. Откройте меню "Проект - Пакеты" 3. Нажмите обновить. ### Вручную #### Из удаленного репозитория ```bash mvn webbpm:update-package -DpackageVersion="3.158.8" ``` #### Из файла ```bash mvn webbpm:update-package -DexecuteNpmInstall=false -Dpath=resources-.jar ``` #### Руками 1. Измените версию платформы и backend модуля в файле [pom.xml](pom.xml) вашего проекта на нужную версию 2. Скопируйте ресурсы ``` из директории: webbpm-platform\components\resources\target\classes\ в директорию: {your-project}\packages\ru.cg.webbpm.packages.base.resources\ ``` 3. Скопируйте фронт ``` из директории: webbpm-platform\components\frontend\dist в директорию: {your-project}\frontend\node_modules\@webbpm\base-package\ ``` 4. Запретите выполнение npm install при запуске студии. Для этого добавьте параметр `-DexecuteNpmInstall=false` в настройках Run/Debug Configurations студии