No description
Find a file
kochetkov 93fb0e2b83 Merge branch 'develop' into update/3.178
# Conflicts:
#	frontend/package-lock.json
#	frontend/package.json
#	packages/ru.cg.webbpm.packages.base.resources/.flattened-pom.xml
#	packages/ru.cg.webbpm.packages.base.resources/META-INF/components/docs/component/grids/NavigateOnGridCellOrRow.html
#	packages/ru.cg.webbpm.packages.base.resources/META-INF/package-descriptor.xml
#	packages/ru.cg.webbpm.packages.base.resources/component/buttons/Button.component
#	packages/ru.cg.webbpm.packages.base.resources/component/buttons/CancelButton.component
#	packages/ru.cg.webbpm.packages.base.resources/component/buttons/ClearFilterButton.component
#	packages/ru.cg.webbpm.packages.base.resources/component/buttons/DeleteButton.component
#	packages/ru.cg.webbpm.packages.base.resources/component/buttons/DownloadButton.component
#	packages/ru.cg.webbpm.packages.base.resources/component/buttons/ErrorButton.component
#	packages/ru.cg.webbpm.packages.base.resources/component/buttons/ExecProcessButton.component
#	packages/ru.cg.webbpm.packages.base.resources/component/buttons/ExecuteSqlButton.component
#	packages/ru.cg.webbpm.packages.base.resources/component/buttons/FilterButton.component
#	packages/ru.cg.webbpm.packages.base.resources/component/buttons/NavigationButton.component
#	packages/ru.cg.webbpm.packages.base.resources/component/buttons/SaveButton.component
#	packages/ru.cg.webbpm.packages.base.resources/component/buttons/SelectButton.component
#	packages/ru.cg.webbpm.packages.base.resources/component/buttons/SignButton.component
#	packages/ru.cg.webbpm.packages.base.resources/component/buttons/StartProcessButton.component
#	packages/ru.cg.webbpm.packages.base.resources/component/buttons/reporting/EntityGraphReportingButton.component
#	packages/ru.cg.webbpm.packages.base.resources/component/buttons/reporting/FormReportingButton.component
#	packages/ru.cg.webbpm.packages.base.resources/component/containers/CollapsiblePanel.component
#	packages/ru.cg.webbpm.packages.base.resources/component/containers/Dialog.component
#	packages/ru.cg.webbpm.packages.base.resources/component/containers/DropDown.component
#	packages/ru.cg.webbpm.packages.base.resources/component/containers/FieldSet.component
#	packages/ru.cg.webbpm.packages.base.resources/component/containers/FilterGroup.component
#	packages/ru.cg.webbpm.packages.base.resources/component/containers/Form.component
#	packages/ru.cg.webbpm.packages.base.resources/component/containers/HBox.component
#	packages/ru.cg.webbpm.packages.base.resources/component/containers/TabContainer.component
#	packages/ru.cg.webbpm.packages.base.resources/component/containers/TabItem.component
#	packages/ru.cg.webbpm.packages.base.resources/component/containers/VBox.component
#	packages/ru.cg.webbpm.packages.base.resources/component/containers/Window.component
#	packages/ru.cg.webbpm.packages.base.resources/component/editable-grids/EditableGrid.component
#	packages/ru.cg.webbpm.packages.base.resources/component/editable-grids/columns/AutocompleteGridColumn.component
#	packages/ru.cg.webbpm.packages.base.resources/component/editable-grids/columns/CheckBoxGridColumn.component
#	packages/ru.cg.webbpm.packages.base.resources/component/editable-grids/columns/ComboBoxGridColumn.component
#	packages/ru.cg.webbpm.packages.base.resources/component/editable-grids/columns/DateTimePickerGridColumn.component
#	packages/ru.cg.webbpm.packages.base.resources/component/editable-grids/columns/MoneyFieldGridColumn.component
#	packages/ru.cg.webbpm.packages.base.resources/component/editable-grids/columns/NumberFieldGridColumn.component
#	packages/ru.cg.webbpm.packages.base.resources/component/editable-grids/columns/OneToManyGridColumn.component
#	packages/ru.cg.webbpm.packages.base.resources/component/editable-grids/columns/OneToManyGridColumnV2.component
#	packages/ru.cg.webbpm.packages.base.resources/component/editable-grids/columns/ReadonlyClientGridColumn.component
#	packages/ru.cg.webbpm.packages.base.resources/component/editable-grids/columns/ReadonlyServerGridColumn.component
#	packages/ru.cg.webbpm.packages.base.resources/component/editable-grids/columns/StaticComboBoxGridColumn.component
#	packages/ru.cg.webbpm.packages.base.resources/component/editable-grids/columns/TextAreaGridColumn.component
#	packages/ru.cg.webbpm.packages.base.resources/component/editable-grids/columns/TextFieldGridColumn.component
#	packages/ru.cg.webbpm.packages.base.resources/component/editable-grids/columns/TimePickerGridColumn.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/Address.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/Autocomplete.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/CheckBox.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/ComboBox.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/DateTimePicker.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/EditableOneToMany.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/FilePreview.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/FileUpload.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/ManyToMany.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/ManyToManyField.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/MoneyField.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/NumberField.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/OneToMany.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/OneToManyV2.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/RadioButton.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/SignVerification.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/StaticComboBox.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/StaticRadioButton.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/Text.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/TextArea.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/TextField.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/TimePicker.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/TreeField.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/editableonetomany/EditableGrid.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/editableonetomany/Form.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/fileupload/FileUploadField.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/filters/FilterAddress.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/filters/FilterAutocomplete.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/filters/FilterBoolean.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/filters/FilterCheckBox.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/filters/FilterComboBox.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/filters/FilterDateTimePicker.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/filters/FilterNumberField.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/filters/FilterRadioButton.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/filters/FilterStaticComboBox.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/filters/FilterTextArea.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/filters/FilterTextField.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/treefield/LinkField.component
#	packages/ru.cg.webbpm.packages.base.resources/component/fields/treefield/MultiValueField.component
#	packages/ru.cg.webbpm.packages.base.resources/component/grids/Grid.component
#	packages/ru.cg.webbpm.packages.base.resources/component/grids/GridV2.component
#	packages/ru.cg.webbpm.packages.base.resources/component/grids/GridV2Column.component
#	packages/ru.cg.webbpm.packages.base.resources/component/grids/GridV2Group.component
#	packages/ru.cg.webbpm.packages.base.resources/component/grids/PagingGrid.component
#	packages/ru.cg.webbpm.packages.base.resources/component/grids/TreeGrid.component
#	packages/ru.cg.webbpm.packages.base.resources/component/uncategorized/ActionController.component
#	packages/ru.cg.webbpm.packages.base.resources/component/uncategorized/Calendar.component
#	packages/ru.cg.webbpm.packages.base.resources/component/uncategorized/Chart.component
#	packages/ru.cg.webbpm.packages.base.resources/component/uncategorized/ChartV2.component
#	packages/ru.cg.webbpm.packages.base.resources/component/uncategorized/EventCalendar.component
#	packages/ru.cg.webbpm.packages.base.resources/component/uncategorized/GanttChart.component
#	packages/ru.cg.webbpm.packages.base.resources/component/uncategorized/HyperLink.component
#	packages/ru.cg.webbpm.packages.base.resources/component/uncategorized/IFrame.component
#	packages/ru.cg.webbpm.packages.base.resources/component/uncategorized/InnerHtml.component
#	packages/ru.cg.webbpm.packages.base.resources/component/uncategorized/MenuGroup.component
#	packages/ru.cg.webbpm.packages.base.resources/component/uncategorized/MenuItem.component
#	packages/ru.cg.webbpm.packages.base.resources/component/uncategorized/ValidationController.component
#	packages/ru.cg.webbpm.packages.base.resources/converters/converters.jar
#	packages/ru.cg.webbpm.packages.base.resources/metadata/java.metadata
#	packages/ru.cg.webbpm.packages.base.resources/metadata/typescript.metadata.json
#	packages/ru.cg.webbpm.packages.base.resources/process-instance/ProcessInstance.component
#	packages/ru.cg.webbpm.packages.base.resources/process-instance/ProcessInstanceDiagram.component
#	packages/ru.cg.webbpm.packages.base.resources/process-instance/ProcessInstanceList.component
#	packages/ru.cg.webbpm.packages.base.resources/user-management/Groups.component
#	packages/ru.cg.webbpm.packages.base.resources/user-management/GroupsCreate.component
#	packages/ru.cg.webbpm.packages.base.resources/user-management/GroupsEdit.component
#	packages/ru.cg.webbpm.packages.base.resources/user-management/OrganizationEdit.component
#	packages/ru.cg.webbpm.packages.base.resources/user-management/Organizations.component
#	packages/ru.cg.webbpm.packages.base.resources/user-management/Roles.component
#	packages/ru.cg.webbpm.packages.base.resources/user-management/RolesEdit.component
#	packages/ru.cg.webbpm.packages.base.resources/user-management/SecurityFeatures.component
#	packages/ru.cg.webbpm.packages.base.resources/user-management/StaticRouteNavigationButton.component
#	packages/ru.cg.webbpm.packages.base.resources/user-management/StaticRouteSelectButton.component
#	packages/ru.cg.webbpm.packages.base.resources/user-management/UserForm.component
#	packages/ru.cg.webbpm.packages.base.resources/user-management/Users.component
#	packages/ru.cg.webbpm.packages.base.resources/user-management/UsersCreate.component
#	packages/ru.cg.webbpm.packages.base.resources/user-management/UsersEdit.component
#	pom.xml
2024-09-02 13:31:41 +03:00
backend db beans 2024-08-30 16:01:47 +03:00
config DEVOPS-1787 Docker refactoring 2024-08-30 00:24:52 +03:00
distribution WEBBPMNEXT-9188 fix 2024-08-01 15:05:37 +03:00
frontend Merge branch 'develop' into update/3.178 2024-09-02 13:31:41 +03:00
packages update/3.178 2024-08-29 11:58:59 +03:00
pentaho_scripts pentaho 1->0 2024-08-14 19:10:41 +05:00
resources фиксы 2024-08-31 22:31:22 +03:00
test WEBBPMNEXT-9188 fix 2024-08-01 15:05:37 +03:00
.gitignore first commit 2024-06-25 13:45:54 +03:00
.studioignore first commit 2024-06-25 13:45:54 +03:00
config.md first commit 2024-06-25 13:45:54 +03:00
pom.xml Merge branch 'develop' into update/3.178 2024-09-02 13:31:41 +03:00
project.md first commit 2024-06-25 13:45:54 +03:00
README.md first commit 2024-06-25 13:45:54 +03:00
system-requirements.md first commit 2024-06-25 13:45:54 +03:00

Создание БД проекта

Создание роли для основной схемы БД проекта

CREATE ROLE "<your-project-main-role>" WITH
  LOGIN
  NOSUPERUSER
  INHERIT
  NOCREATEDB
  NOCREATEROLE
  NOREPLICATION
  PASSWORD '<your password>';

Создание роли для схемы безопасности БД проекта

CREATE ROLE "<your-project-security-role>" WITH
  LOGIN
  NOSUPERUSER
  INHERIT
  NOCREATEDB
  NOCREATEROLE
  NOREPLICATION
  PASSWORD '<your password>';

Создание БД проекта

CREATE DATABASE "<your-project-db>"
    WITH 
    OWNER = "<your-project-main-role>";

ВНИМАНИЕ: в общем случае, отдельную БД для безопасности создавать не нужно. В конфигурации источника данных security-ds в файле standalone.xml в качестве имени базы данных используйте базу данных приложения.

Предоставление необходимых прав для роли <your-project-security-role>

GRANT CREATE ON DATABASE "<your-project-db>" TO "<your-project-security-role>";

Создание таблицы 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), 
    '<your-admin-group>', 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 = '<your-admin-group>'), 
    (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 = '<your-admin-group>'), 
    (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 = '<your-admin-group>'), 
    (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/

Сборка проекта

В dev режиме

mvn clean && mvn package

В prod режиме

mvn clean && mvn package -Pprod -DngcCoreCount=4 -DpagePackSizeMb=24

ngcCoreCount - количество ядер, выделяемых процессу компиляции ngc. По умолчанию - количество ядер - 1
pagePackSizeMb - размер пачки в МБ. По умолчанию - количество ядер - 24 МБ.

С обновлением database beans

mvn clean && mvn package -Dwebbpm.generate-db-beans

Версия проекта

Если версия проекта содержит SNAPSHOT (например 1.0-SNAPSHOT), то при установке такой версии на сервере приложений будет запущена процедура остановки запущенных процессов данной версии. Этот режим удобен при отладке процесса на рабочем месте аналитика.
На боевом и тестовом стенде необходимо передавать дистрибутив проекта, с версией, которая не содержит SNAPSHOT. Например - 1.0

Обновление платформы

Обновления версии платформы

С помощью студии

  1. Откройте проект в студии. Версия платформы обновится автоматически

Вручную

  1. Обновите значение webbpm-platform.version в pom.xml. Пример

    <webbpm-platform.version>3.164.0-SNAPSHOT</webbpm-platform.version>
    

Обновление базового пакета компонент

С помощью студии

  1. Откройте проект в студии.

  2. Откройте меню "Проект - Пакеты"

  3. Нажмите обновить.

Вручную

Из удаленного репозитория

mvn webbpm:update-package -DpackageVersion="3.158.8"

Из файла

mvn webbpm:update-package -DexecuteNpmInstall=false -Dpath=resources-<your-version>.jar

Руками

  1. Измените версию платформы и backend модуля в файле pom.xml вашего проекта на нужную версию
  2. Скопируйте ресурсы
из директории: webbpm-platform\components\resources\target\classes\
в директорию:  {your-project}\packages\ru.cg.webbpm.packages.base.resources\
  1. Скопируйте фронт
из директории: webbpm-platform\components\frontend\dist 
в директорию:  {your-project}\frontend\node_modules\@webbpm\base-package\
  1. Запретите выполнение npm install при запуске студии. Для этого добавьте параметр -DexecuteNpmInstall=false в настройках Run/Debug Configurations студии