ServerConfigurationGuide: различия между версиями
Nvasiliev (обсуждение | вклад) |
Dofs197 (обсуждение | вклад) |
||
(не показано 117 промежуточных версий 2 участников) | |||
Строка 8: | Строка 8: | ||
Для настроечного файла resource можно определить файл расширения настроек в том же формате с названием wfe.custom.resource. | Для настроечного файла resource можно определить файл расширения настроек в том же формате с названием wfe.custom.resource. | ||
Допускается использование не более 1-го расширяющего файла wfe.custom.resource для файла базовых настроек resource. | Допускается использование не более 1-го расширяющего файла wfe.custom.resource для файла базовых настроек resource. | ||
Расширяющие файлы wfe.custom.* могут находиться: | Расширяющие файлы wfe.custom.* могут находиться: | ||
* в classpath приложения | * в classpath приложения | ||
* в составе любого jar, находящегося в директории расширений wfe.custom | * в составе любого jar, находящегося в директории расширений wfe.custom . | ||
{{Note|В classpath приложения в случае использования Jboss4 входят: | {{Note|В classpath приложения в случае использования Jboss4 входят: | ||
Строка 18: | Строка 20: | ||
* внутри runawfe.ear, в корне | * внутри runawfe.ear, в корне | ||
* внутри runawfe.ear в составе любого jar | * внутри runawfe.ear в составе любого jar | ||
* директория для расширений wfe.custom (полный путь ${JBOSS4_HOME}/server/default/wfe.custom) | * директория для расширений wfe.custom (полный путь ${JBOSS4_HOME}/server/default/wfe.custom)}} | ||
}} | |||
{{Note|В classpath приложения в случае использования Jboss7 входят: | {{Note|В classpath приложения в случае использования Jboss7 входят: | ||
* внутри runawfe.ear в составе любого jar | * внутри runawfe.ear в составе любого jar | ||
* директория для расширений wfe.custom (полный путь ${JBOSS7_HOME}/standalone/wfe.custom) | * директория для расширений wfe.custom (полный путь ${JBOSS7_HOME}/standalone/wfe.custom)}} | ||
}} | |||
== {{Title|OverrideProperties|Правило переопределения настроек, определенных в properties файлах}} == | == {{Title|OverrideProperties|Правило переопределения настроек, определенных в properties-файлах}} == | ||
Используются базовые настройки из файла file.properties, включенные в дистрибутив системы (как правило размещенные в одном из jar внутри runawfe.ear), перезаписываемые из более приоритетного файла wfe.custom.file.properties по совпадающим ключам. | Используются базовые настройки из файла file.properties, включенные в дистрибутив системы (как правило размещенные в одном из jar внутри runawfe.ear), перезаписываемые из более приоритетного файла wfe.custom.file.properties по совпадающим ключам. | ||
Пример файла | Пример файла '''wfe.custom.database.properties''', определяющего тип соединения с MSSQL Server: | ||
hibernate.connection.datasource=java:/mssqlds | hibernate.connection.datasource=java:/mssqlds | ||
hibernate.dialect=ru.runa.wfe.commons.hibernate.SqlServerUnicodeDialect | hibernate.dialect=ru.runa.wfe.commons.hibernate.SqlServerUnicodeDialect | ||
=== {{Title|OverridePropertiesExample|Примеры переопределения настроек, определенных в properties файлах}} === | === {{Title|OverridePropertiesExample|Примеры переопределения настроек, определенных в properties-файлах}} === | ||
==== Пример включения возможности изменения значений переменных экземпляра БП ==== | |||
За эту возможность отвечает настройка [[ServerConfigurationGuide#executionServiceAPI.updateVariables.enabled|executionServiceAPI.updateVariables.enabled]], которая по умолчанию имеет значение false {{Since|4.1.2}} т.е. выключена. Включить данную возможность можно как через веб интерфейс (Меню "Настройки", раздел "Основные настройки", параметр "executionServiceAPI.updateVariables.enabled") так и с помощью правила переопределения настроек, определенных в properties файлах. Рассмотрим подробно второй вариант. | За эту возможность отвечает настройка [[ServerConfigurationGuide#executionServiceAPI.updateVariables.enabled|executionServiceAPI.updateVariables.enabled]], которая по умолчанию имеет значение false{{Since|4.1.2}}, т.е. выключена. Включить данную возможность можно как через веб-интерфейс (Меню "Настройки", раздел "Основные настройки", параметр "executionServiceAPI.updateVariables.enabled"), так и с помощью правила переопределения настроек, определенных в properties-файлах. Рассмотрим подробно второй вариант. | ||
Данный параметр определен в основных настройках ''system.properties'', поэтому требуется переопределить его в файле '''system.properties'''. Согласно правилу переопределения, необходимо создать файл '''wfe.custom.system.properties''' в каталоге | Данный параметр определен в основных настройках ''system.properties'', поэтому требуется переопределить его в файле '''system.properties'''. Согласно правилу переопределения, необходимо создать файл '''wfe.custom.system.properties''' в каталоге '''..\standalone\wfe.custom''' (если директория''' wfe.custom''' не существует, то надо её создать). Например, для Windows версии RunaWFE файл '''wfe.custom.system.properties''' должен быть помещен в '''C:\Program Files\RunaWFE\Simulation\standalone\wfe.custom\'''. | ||
Строка 49: | Строка 49: | ||
'''Замечание''' | '''Замечание:''' Переопределенные настройки применяются только после перезапуска сервера. | ||
Если все было выполнено верно, то в свойствах экземпляра процесса в секции "Переменные процесса" должна появиться ссылка "'''Изменить значение'''", как показано на следующем рисунке: | |||
[[ | [[Файл:UpdateVariabless.png|900px|мини|центр]] | ||
По ссылке будет открыт интерфейс для изменения значения переменных экземпляра БП | По ссылке будет открыт интерфейс для изменения значения переменных экземпляра БП: | ||
[[File:updateVariabless2.png]] | [[File:updateVariabless2.png]] | ||
==== Пример включения административного назначения роли ==== | |||
Данная возможность позволяет разрешить изменение исполнителя в экземпляре процесса. Параметр, отвечающий за это - [[ServerConfigurationGuide#process.swimlane.assignment.enabled|process.swimlane.assignment.enabled]], расположен в ''web.properties'' и имеет по умолчанию значение false {{Since|4.3.0}}. | |||
Согласно правилу переопределения, необходимо создать файл '''wfe.custom.web.properties''' в каталоге '''..\standalone\wfe.custom''' (если директория''' wfe.custom''' не существует, то надо её создать). Например, для Windows-версии RunaWFE файл '''wfe.custom.web.properties''' должен быть помещен в '''C:\Program Files\RunaWFE\Simulation\standalone\wfe.custom\'''. | |||
Согласно правилу переопределения, необходимо создать файл '''wfe.custom.web.properties''' в каталоге | |||
Добавьте в файл строку | Добавьте в файл строку: | ||
process.swimlane.assignment.enabled = true | process.swimlane.assignment.enabled = true | ||
'''Замечание''' | '''Замечание:''' Переопределенные настройки применяются только после перезапуска сервера. | ||
Если все было выполнено верно, то в свойствах экземпляра процесса | Если все было выполнено верно, то в свойствах экземпляра процесса в секции "Роли процесса" появится ссылка "Изменить исполнителя": | ||
[[ | [[Файл:SwimlaneAssign1.png|900px|мини|центр]] | ||
По ссылке будет открыт интерфейс для изменения исполнителя | По ссылке будет открыт интерфейс для изменения исполнителя: | ||
[[File:swimlaneAssign2.png]] | [[File:swimlaneAssign2.png]] | ||
== {{Title|ExtendingXmlSettings|Правило расширения настроек, определенных в xml файлах}} == | == {{Title|ExtendingXmlSettings|Правило расширения настроек, определенных в xml-файлах}} == | ||
Для большинства таких настроек действует правило: используются базовые настройки из файла file.xml, включенные в дистрибутив системы (как правило размещенные в одном из jar внутри runawfe.ear) + настройки из файла wfe.custom.file.xml в таком же формате. | Для большинства таких настроек действует правило: используются базовые настройки из файла file.xml, включенные в дистрибутив системы (как правило размещенные в одном из jar внутри runawfe.ear) + настройки из файла wfe.custom.file.xml в таком же формате. | ||
Строка 94: | Строка 91: | ||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
<validators> | <validators> | ||
<validator name="IntersectedVacationsDataValidator" class="ru.runa.wf.validators.IntersectedVacationsDataValidator"/> | <validator name="IntersectedVacationsDataValidator" | ||
class="ru.runa.wf.validators.IntersectedVacationsDataValidator"/> | |||
</validators> | </validators> | ||
Строка 102: | Строка 100: | ||
Это позволит переопределить существующие бины по идентификатору или определить новые. | Это позволит переопределить существующие бины по идентификатору или определить новые. | ||
Пример файла для переопределения логики инициализации | Пример файла для переопределения логики инициализации класса-реализации бизнес-календаря: | ||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
Строка 150: | Строка 148: | ||
== {{Title|devmode|Режим разработки}} == | == {{Title|devmode|Режим разработки}} == | ||
При установке в исполняемом файле (bat, sh) системной переменной '''devmode''' будет включен режим разработки, см. SystemProperties.isDevMode() | При установке в исполняемом файле (bat, sh) системной переменной '''devmode''' будет включен режим разработки, см. SystemProperties.isDevMode(). | ||
== {{Title|v3compatibility|Режим обратной совместимости}} == | == {{Title|v3compatibility|Режим обратной совместимости}} == | ||
При установке в исполняемом файле (bat, sh) системной переменной '''v3compatibility''' будет включен режим совместимости по исполнению процессов с 3-й версией, см. SystemProperties.isV3CompatibilityMode() | При установке в исполняемом файле (bat, sh) системной переменной '''v3compatibility''' будет включен режим совместимости по исполнению процессов с 3-й версией, см. SystemProperties.isV3CompatibilityMode(). | ||
== {{Title|system.properties|Основные настройки (system.properties)}} == | == {{Title|system.properties|Основные настройки (system.properties)}} == | ||
{| class="prettytable" border="1" | {| class="prettytable" border="1" | ||
| <center>''' | | <center>'''Название'''</center> | ||
| <center>''' | | <center>'''Описание'''</center> | ||
| <center>''' | | <center>'''Значение по умолчанию'''</center> | ||
|- | |- | ||
Строка 171: | Строка 169: | ||
| <div id="default.administrator.name"></div> default.administrator.name | | <div id="default.administrator.name"></div> default.administrator.name | ||
| Логин администратора, создаваемый при первом запуске системы | | Логин администратора, создаваемый при первом запуске системы | ||
| Administrator | | <center>Administrator</center> | ||
|- | |- | ||
| <div id="default.administrator.password"></div> default.administrator.password | | <div id="default.administrator.password"></div> default.administrator.password | ||
| | | Пароль администратора, устанавливаемый при первом запуске системы | ||
| wf | | <center>wf</center> | ||
|- | |- | ||
| <div id="default.administrators.group.name"></div> default.administrators.group.name | | <div id="default.administrators.group.name"></div> default.administrators.group.name | ||
| Название группы администраторов, создаваемая при первом запуске системы | | Название группы администраторов, создаваемая при первом запуске системы | ||
| Administrators | | <center>Administrators</center> | ||
|- | |- | ||
| <div id="default.bots.group.name"></div> default.bots.group.name | | <div id="default.bots.group.name"></div> default.bots.group.name | ||
| Название группы ботов, создаваемая при первом запуске системы | | Название группы ботов, создаваемая при первом запуске системы | ||
| Bots | | <center>Bots</center> | ||
|- | |- | ||
| <div id="strong.passwords.regexp"></div> strong.passwords.regexp | | <div id="strong.passwords.regexp"></div> strong.passwords.regexp | ||
| Для усиления защиты системы можно наложить ограничения на пароли пользователей системы. Если определен этот параметр, то все заводимые пароли пользователей должны соответствовать регулярному выражению. Если пароль не отвечает требованиям безопасности, то смена пароля произведена не будет. | | Для усиления защиты системы можно наложить ограничения на пароли пользователей системы. Если определен этот параметр, то все заводимые пароли пользователей должны соответствовать регулярному выражению. Если пароль не отвечает требованиям безопасности, то смена пароля произведена не будет. | ||
| | | <center>Отсутствует</center> | ||
|- | |- | ||
| <div id="escalation.enabled"></div> escalation.enabled | | <div id="escalation.enabled"></div> escalation.enabled | ||
| Эскалация заданий включена? | | Эскалация заданий включена? | ||
| true | | <center>true</center> | ||
|- | |- | ||
| <div id="escalation.default.hierarchy.loader"></div> escalation.default.hierarchy.loader | | <div id="escalation.default.hierarchy.loader"></div> escalation.default.hierarchy.loader | ||
(до версии 4.1.1 escalation.default.orgFunction) | (до версии 4.1.1 escalation.default. orgFunction) | ||
| Орг. функция или отношение, для определения иерархии эскалации заданий | | Орг. функция или отношение, для определения иерархии эскалации заданий | ||
| ru.runa.wfe.extension.orgfunction.TestOrgFunction (фиктивная орг. функция) | | ru.runa.wfe.extension.orgfunction. TestOrgFunction (фиктивная орг. функция) | ||
Значением может быть либо полное название класса орг. функции, либо отношение в формате @relationName. Обратное отношение задаётся в формате @!relationName. | Значением может быть либо полное название класса орг. функции, либо отношение в формате @relationName. Обратное отношение задаётся в формате @!relationName. | ||
Строка 208: | Строка 206: | ||
| <div id="task.default.deadline"></div> task.default.deadline | | <div id="task.default.deadline"></div> task.default.deadline | ||
| Время исполнения задания по умолчанию (если не установлено явно в Среде разработки) | | Время исполнения задания по умолчанию (если не установлено явно в Среде разработки) | ||
| 2 hours | | <center>2 hours</center> | ||
|- | |- | ||
| <div id="task.almostDeadlinePercents"></div> task.almostDeadlinePercents | | <div id="task.almostDeadlinePercents"></div> task.almostDeadlinePercents | ||
| Процент истечения времени исполнения после которого цвет задания в списке меняется на более приоритетный | | Процент истечения времени исполнения, после которого цвет задания в списке меняется на более приоритетный | ||
| 90 | | <center>90</center> | ||
|- | |- | ||
| <div id="task.delegation.enabled"></div> task.delegation.enabled | | <div id="task.delegation.enabled"></div> task.delegation.enabled | ||
| Включить делегирование задач | | Включить делегирование задач | ||
| true (переехала из web.properties {{Since|4.4.1}}) | | <center>true</center> (переехала из web.properties {{Since|4.4.1}}) | ||
|- | |- | ||
| <div id="authentication.domain.name"></div> authentication.domain.name | | <div id="authentication.domain.name"></div> authentication.domain.name | ||
| Имя домена | | Имя домена | ||
| TEST | | <center>TEST</center> | ||
|- | |- | ||
| <div id="date.format.pattern"></div> date.format.pattern | | <div id="date.format.pattern"></div> date.format.pattern | ||
| Формат даты в системе (также используется при форматировании даты со временем) | | Формат даты в системе (также используется при форматировании даты со временем) | ||
| ДД.ММ.ГГГГ | | <center>ДД.ММ.ГГГГ</center> | ||
|- | |- | ||
| <div id="executionServiceAPI.updateVariables.enabled"></div> <strike>executionServiceAPI.updateVariables.enabled</strike> | | <div id="executionServiceAPI.updateVariables.enabled"></div> <strike>executionServiceAPI.updateVariables. enabled</strike> | ||
| Разрешить выполнение метода ru.runa.wfe.service.impl.ExecutionServiceBean.updateVariables(User, Long, Map<String, Object>) | | Разрешить выполнение метода ru.runa.wfe.service.impl.ExecutionServiceBean. updateVariables (User, Long, Map<String, Object>) | ||
| false {{Since|4.1.2}} | | <center>false {{Since|4.1.2}}</center> <center>true {{Before|4.1.2}}</center> (переехала в web.properties {{Since|4.4.0}}) | ||
|- | |- | ||
| <div id="scriptingServiceAPI.executeGroovyScript.enabled"></div> scriptingServiceAPI.executeGroovyScript.enabled | | <div id="scriptingServiceAPI.executeGroovyScript.enabled"></div> scriptingServiceAPI.executeGroovyScript. enabled | ||
| Разрешить выполнение метода ru.runa.wfe.service.ScriptingService.executeGroovyScript(User, String) | | Разрешить выполнение метода ru.runa.wfe.service.ScriptingService. executeGroovyScript (User, String) | ||
| false | | <center>false</center> | ||
|- | |- | ||
| <div id="token.maximum.depth"></div> token.maximum.depth | | <div id="token.maximum.depth"></div> token.maximum.depth | ||
| Максимально разрешенная вложенность токенов | | Максимально разрешенная вложенность токенов для предотвращения логических циклических ошибок в параллельном шлюзе | ||
| 100 | | <center>100</center> | ||
|- | |- | ||
| <div id="token.maximum.length"></div> token.maximum.length {{Since|4.4.1}} | | <div id="token.maximum.length"></div> token.maximum.length {{Since|4.4.1}} | ||
| Максимально разрешенная длина (количество переходов) токенов для предотвращения логических циклических ошибок | | Максимально разрешенная длина (количество переходов) токенов для предотвращения логических циклических ошибок | ||
| -1 | | <center>-1</center> | ||
|- | |- | ||
| <div id="file.variable.local.storage.enabled"></div> file.variable.local.storage.enabled | | <div id="file.variable.local.storage.enabled"></div> file.variable.local.storage. enabled | ||
| Разрешить использование локального хранилища в файловой системе для больших файлов | | Разрешить использование локального хранилища в файловой системе для больших файлов | ||
| true | | <center>true</center> | ||
|- | |- | ||
| <div id="file.variable.local.storage.path"></div> file.variable.local.storage.path | | <div id="file.variable.local.storage.path"></div> file.variable.local. storage.path | ||
| Путь к директории-хранилищу | | Путь к директории-хранилищу | ||
| Директория wfe.filedata внутри сервера | | Директория wfe.filedata внутри сервера | ||
|- | |- | ||
| <div id="file.variable.local.storage.enableforfilesgreaterthan"></div> file.variable.local.storage.enableforfilesgreaterthan | | <div id="file.variable.local.storage.enableforfilesgreaterthan"></div> file.variable.local.storage. enableforfilesgreaterthan | ||
| Если размер файловой переменной превышает установленный - то файл сохраняется в файловой системе, а не в БД | | Если размер файловой переменной превышает установленный - то файл сохраняется в файловой системе, а не в БД | ||
| 100000 | | <center>100000</center> | ||
|- | |- | ||
| <div id="string.variable.length"></div> string.variable.length | | <div id="string.variable.length"></div> string.variable.length | ||
| Значение длины строковой переменной, изменять не рекомендуется! | | Значение длины строковой переменной, изменять не рекомендуется! | ||
| 1024 | | <center>1024</center> | ||
|- | |- | ||
| <div id="ear.filename"></div> ear.filename | | <div id="ear.filename"></div> ear.filename | ||
| Изменять в случае сборки собственного EAR | | Изменять в случае сборки собственного EAR | ||
| runawfe.ear | | <center>runawfe.ear</center> | ||
|- | |- | ||
| <div id="undefined.variables.allowed"></div> undefined.variables.allowed | | <div id="undefined.variables.allowed"></div> undefined.variables.allowed | ||
| Разрешить создание в процессе переменных, не определенных в Среде разработки? | | Разрешить создание в процессе переменных, не определенных в Среде разработки? | ||
| false | | <center>false</center> | ||
|- | |- | ||
| <div id="strong.variables.format.enabled"></div> strong.variables.format.enabled | | <div id="strong.variables.format.enabled"></div> strong.variables.format. enabled | ||
| Режим строгой типизации. Требовать соответствие типа определенному в Среде разработки при установке значений переменных | | Режим строгой типизации. Требовать соответствие типа определенному в Среде разработки при установке значений переменных | ||
| true | | <center>true</center> | ||
|- | |- | ||
| <div id="variables.autocast.enabled"></div> variables.autocast.enabled | | <div id="variables.autocast.enabled"></div> variables.autocast.enabled | ||
| Выполнять приведение типа к определенному в Среде разработки в случае несоответствия типа значения переменной в режиме строгой типизации | | Выполнять приведение типа к определенному в Среде разработки в случае несоответствия типа значения переменной в режиме строгой типизации | ||
| true | | <center>true</center> | ||
|- | |- | ||
| <div id="timertask.period.millis.job.execution"></div> timertask.period.millis.job.execution {{Since|4.0.6}} | | <div id="timertask.period.millis.job.execution"></div> timertask.period.millis.job.execution {{Since|4.0.6}} | ||
| Период обнаружения просроченных таймеров всех процессов, в миллисекундах | | Период обнаружения просроченных таймеров всех процессов, в миллисекундах | ||
| 60000 | | <center>60000</center> | ||
|- | |- | ||
| <div id="timertask.start.millis.job.execution"></div> timertask.start.millis.job.execution {{Since|4.0.6}} | | <div id="timertask.start.millis.job.execution"></div> timertask.start.millis.job. execution {{Since|4.0.6}} | ||
| Задержка перед первым выполнением просроченных таймеров всех процессов после запуска системы, в миллисекундах | | Задержка перед первым выполнением просроченных таймеров всех процессов после запуска системы, в миллисекундах | ||
| 60000 | | <center>60000</center> | ||
|- | |- | ||
| <div id="job.executor.batch.size"></div> job.executor.batch.size {{Since|4.4.3}} | | <div id="job.executor.batch.size"></div> job.executor.batch. size {{Since|4.4.3}} | ||
| Количество обрабатываемых просроченных таймеров в одной транзакции | | Количество обрабатываемых просроченных таймеров в одной транзакции | ||
| 50 | | <center>50</center> | ||
|- | |- | ||
| <div id="timertask.period.millis.unassigned.tasks.execution"></div> timertask.period.millis.unassigned.tasks.execution {{Since|4.0.6}} | | <div id="timertask.period.millis.unassigned.tasks.execution"></div> timertask.period.millis.unassigned. tasks.execution {{Since|4.0.6}} | ||
| Период между обнаружением не назначенных заданий (и попыткой их назначения), в миллисекундах | | Период между обнаружением не назначенных заданий (и попыткой их назначения), в миллисекундах | ||
| 60000 {{Since|4.2.0}} (600000 {{Before|4.2.0}}) | | <center>60000 {{Since|4.2.0}}</center> <center>(600000 {{Before|4.2.0}})</center> | ||
|- | |- | ||
| <div id="timertask.start.millis.unassigned.tasks.execution"></div> timertask.start.millis.unassigned.tasks.execution {{Since|4.0.6}} | | <div id="timertask.start.millis.unassigned.tasks.execution"></div> timertask.start.millis.unassigned. tasks.execution {{Since|4.0.6}} | ||
| Задержка перед первым обнаружением не назначенных заданий (и попыткой их назначения) после запуска системы, в миллисекундах | | Задержка перед первым обнаружением не назначенных заданий (и попыткой их назначения) после запуска системы, в миллисекундах | ||
| 60000 | | <center>60000</center> | ||
|- | |- | ||
| <div id="timertask.period.millis.remove.temp.groups"></div> timertask.period.millis.remove.temp.groups {{Since|4.3.0}} | | <div id="timertask.period.millis.remove.temp.groups"></div> timertask.period.millis.remove.temp.groups {{Since|4.3.0}} | ||
| Период между очистками временных групп, в миллисекундах | | Период между очистками временных групп, в миллисекундах | ||
| 10800000 | | <center>10800000</center> | ||
|- | |- | ||
| <div id="timertask.start.millis.remove.temp.groups"></div> timertask.start.millis.remove.temp.groups {{Since|4.3.0}} | | <div id="timertask.start.millis.remove.temp.groups"></div> timertask.start.millis.remove. temp.groups {{Since|4.3.0}} | ||
| Задержка перед первым выполнением очистки временных групп после запуска системы, в миллисекундах | | Задержка перед первым выполнением очистки временных групп после запуска системы, в миллисекундах | ||
| 600000 | | <center>600000</center> | ||
|- | |- | ||
| <div id="receive.message.handle.in.sequence.enabled"></div> <strike>receive.message.handle.in.sequence.enabled</strike> | | <div id="receive.message.handle.in.sequence.enabled"></div> <strike>receive.message.handle.in.sequence. enabled</strike> | ||
| Только в 4.1.0, см. [[BPMNImplementation#messagesMultithreadingHandling|описание]] | | Только в 4.1.0, см. [[BPMNImplementation#messagesMultithreadingHandling|описание]] | ||
| true | | <center>true</center> | ||
|- | |- | ||
| <div id="trusted.authentication.enabled"></div> trusted.authentication.enabled {{Since | 4.2.0}} | | <div id="trusted.authentication.enabled"></div> trusted.authentication. enabled {{Since | 4.2.0}} | ||
| Разрешена ли доверенная аутентификация с помощью сервисного аккаунта (AuthenticationService.authenticateByTrsustedPrincipal(User, String)) | | Разрешена ли доверенная аутентификация с помощью сервисного аккаунта (AuthenticationService.authenticateByTrsustedPrincipal (User, String)) | ||
| false | | <center>false</center> | ||
|- | |- | ||
| <div id="upgrade.process.to.definition.version.enabled"></div> upgrade.process.to.definition.version.enabled {{Since | 4.3.0}} | | <div id="upgrade.process.to.definition.version.enabled"></div> upgrade.process.to.definition. version.enabled {{Since | 4.3.0}} | ||
| Разрешено ли обновление версии исполняющегося процесса на другое по версии (полезно для исправления блокирующих ошибок, может иметь непредсказуемые ошибки в случае если определение процесса сильно отличается от текущего) | | Разрешено ли обновление версии исполняющегося процесса на другое по версии (полезно для исправления блокирующих ошибок, может иметь непредсказуемые ошибки в случае, если определение процесса сильно отличается от текущего) | ||
| true (upgrade.process.to.next.definition.version.enabled = false {{Before | 4.3.0}}) | | <center>true</center> (upgrade.process.to.next.definition. version.enabled = false {{Before | 4.3.0}}) | ||
|- | |- | ||
| <div id="process.admin.groups"></div> process.admin.groups {{Since | 4.2.2}} | | <div id="process.admin.groups"></div> process.admin.groups {{Since | 4.2.2}} | ||
| Административное выполнение заданий. Задаётся список названий административных групп, пользователи из которых будут видеть в своём списке заданий чужие задачи. При этом если описание группы не задано, то входящий в неё пользовать видит все задания в системе. Если в описании задать номера БП через запятую - то увидит задания только из этих БП. Он может их выполнить, в логе выполнения БП будет соответствующая запись. В списке выделяются цветом аналогично заданиям, полученным по замещению. Фильтр на такие задания сейчас не распространяется. | | Административное выполнение заданий. Задаётся список названий административных групп, пользователи из которых будут видеть в своём списке заданий чужие задачи. При этом, если описание группы не задано, то входящий в неё пользовать видит все задания в системе. Если в описании задать номера БП через запятую - то увидит задания только из этих БП. Он может их выполнить, в логе выполнения БП будет соответствующая запись. В списке выделяются цветом аналогично заданиям, полученным по замещению. Фильтр на такие задания сейчас не распространяется. | ||
| | | | ||
Строка 356: | Строка 354: | ||
|- | |- | ||
| <div id="base.process.id.variable.name"></div> base.process.id.variable.name {{Since | 4.2.2}} | | <div id="base.process.id.variable.name"></div> base.process.id.variable. name {{Since | 4.2.2}} | ||
| Название переменной БП, которая хранит ID базового БП, из которого будут грузиться переменные если они не заданы в текущем БП. Это позволяет не дублировать значения переменных в некоторых случаях при использовании подпроцессов. Переменные должны быть определены в обоих определениях БП. | | Название переменной БП, которая хранит ID базового БП, из которого будут грузиться переменные, если они не заданы в текущем БП. Это позволяет не дублировать значения переменных в некоторых случаях при использовании подпроцессов. Переменные должны быть определены в обоих определениях БП. | ||
| | | | ||
|- | |- | ||
| <div id="base.process.id.variable.read.all"></div> base.process.id.variable.read.all {{Since | 4.3.0}} | | <div id="base.process.id.variable.read.all"></div> base.process.id.variable. read.all {{Since | 4.3.0}} | ||
| Доступ на чтение в режиме "ID базового БП" ко всем переменным. | | Доступ на чтение в режиме "ID базового БП" ко всем переменным. | ||
| true | | <center>true</center> | ||
|- | |- | ||
| <div id="base.process.id.mapping.variable.prefix"></div> <strike>base.process.id.mapping.variable.prefix</strike> | | <div id="base.process.id.mapping.variable.prefix"></div> <strike>base.process.id.mapping. variable.prefix</strike> | ||
| Только в 4.3.0, не вошло в релиз. Определяло соответсвие переменных для режима "ID базового БП" | | Только в 4.3.0, не вошло в релиз. Определяло соответсвие переменных для режима "ID базового БП" | ||
| | | | ||
|- | |- | ||
| <div id="temporary.groups.set.permissions"></div> temporary.groups.set.permissions {{Since | 4.3.0}} | | <div id="temporary.groups.set.permissions"></div> temporary.groups.set. permissions {{Since | 4.3.0}} | ||
| Выдавать ли полномочия на чтение создаваемой временной группе всем её участникам. | | Выдавать ли полномочия на чтение создаваемой временной группе всем её участникам. | ||
| false (до версии 4.3.0 было поведение, аналогичное значению true) | | <center>false</center> (до версии 4.3.0 было поведение, аналогичное значению true) | ||
|- | |- | ||
| <div id="temporary.groups.delete.on.process.end"></div> temporary.groups.delete.on.process.end {{Since | 4.3.0}} | | <div id="temporary.groups.delete.on.process.end"></div> temporary.groups.delete. on.process.end {{Since | 4.3.0}} | ||
| Удалять временные группы по завершению БП. Если не удалять - то это будет сделано (по умолчанию включено) с помощью периодической задачи чистки неиспользуемых временных групп. | | Удалять временные группы по завершению БП. Если не удалять - то это будет сделано (по умолчанию включено) с помощью периодической задачи чистки неиспользуемых временных групп. | ||
| false | | <center>false</center> | ||
|- | |- | ||
| <div id="temporary.groups.delete.on.task.end"></div> temporary.groups.delete.on.task.end {{Since | 4.3.0}} | | <div id="temporary.groups.delete.on.task.end"></div> temporary.groups.delete. on.task.end {{Since | 4.3.0}} | ||
| Удалять временную группу, на которую назначено задание, при его завершении. Если не удалять - то это будет сделано (по умолчанию включено) с помощью периодической задачи чистки неиспользуемых временных групп. | | Удалять временную группу, на которую назначено задание, при его завершении. Если не удалять - то это будет сделано (по умолчанию включено) с помощью периодической задачи чистки неиспользуемых временных групп. | ||
| false | | <center>false</center> | ||
|- | |- | ||
| <div id="freemarker.static.class.names"></div> freemarker.static.class.names {{Since | 4.3.0}} | | <div id="freemarker.static.class.names"></div> freemarker.static.class.names {{Since | 4.3.0}} | ||
| Список классов, которые доступны по механизму BeansWrapper.getStaticModels() в шаблонах freemarker | | Список классов, которые доступны по механизму BeansWrapper.getStaticModels() в шаблонах freemarker | ||
| Не задано | | <center>Не задано</center> | ||
|- | |- | ||
| <div id="process.suspension.enabled"></div> process.suspension.enabled {{Since | 4.3.0}} | | <div id="process.suspension.enabled"></div> process.suspension.enabled {{Since | 4.3.0}} | ||
| Разрешить ручную приостановку БП администратором системы. | | Разрешить ручную приостановку БП администратором системы. | ||
| true | | <center>true</center> | ||
|- | |- | ||
| <div id="process.execution.node.async.default"></div> process.execution.node.async.default {{Since | 4.3.0}} | | <div id="process.execution.node.async.default"></div> process.execution.node. async.default {{Since | 4.3.0}} | ||
| По умолчанию использовать новую транзакцию для выполнения узлов, [[ProcessTransactions#ConfigurableBoundariesSettings | подробнее]] | | По умолчанию использовать новую транзакцию для выполнения узлов, [[ProcessTransactions#ConfigurableBoundariesSettings | подробнее]] | ||
| true | | <center>true</center> | ||
|- | |- | ||
| <div id="process.execution.node.async.NodeType"></div> process.execution.node.async.NodeType {{Since | 4.3.0}} | | <div id="process.execution.node.async.NodeType"></div> process.execution.node. async.NodeType {{Since | 4.3.0}} | ||
| Использовать новую транзакцию для выполнения узлов определённого типа по умолчанию, [[ProcessTransactions#ConfigurableBoundariesSettings | подробнее]] | | Использовать новую транзакцию для выполнения узлов определённого типа по умолчанию, [[ProcessTransactions#ConfigurableBoundariesSettings | подробнее]] | ||
| Не заданы | | <center>Не заданы</center> | ||
|- | |- | ||
| <div id="process.swimlane.auto.initialization.enabled"></div> process.swimlane.auto.initialization.enabled {{Since | 4.3.0}} | | <div id="process.swimlane.auto.initialization.enabled"></div> process.swimlane.auto. initialization.enabled {{Since | 4.3.0}} | ||
| Разрешить авто-инициализацию роли при доступе к ней как к переменной. | | Разрешить авто-инициализацию роли при доступе к ней как к переменной. | ||
| false | | <center>false</center> | ||
|- | |- | ||
| <div id="check.process.start.permissions"></div> check.process.start.permissions {{Since | 4.3.0}} | | <div id="check.process.start.permissions"></div> check.process.start.permissions {{Since | 4.3.0}} | ||
| Проверять права на запуск БП. Используется только в случае интеграции со сторонней подсистемой полномочий. | | Проверять права на запуск БП. Используется только в случае интеграции со сторонней подсистемой полномочий. | ||
| true | | <center>true</center> | ||
|- | |- | ||
| <div id="definition.comments.empty.allowed"></div> definition.comments.empty.allowed {{Since | 4.3.0}} | | <div id="definition.comments.empty.allowed"></div> definition.comments.empty. allowed {{Since | 4.3.0}} | ||
| Разрешить загрузку определения процесса, в котором нет новых комментариев. | | Разрешить загрузку определения процесса, в котором нет новых комментариев. | ||
| true | | <center>true</center> | ||
|- | |- | ||
| <div id="definition.comments.collisions.allowed"></div> definition.comments.collisions.allowed {{Since | 4.3.0}} | | <div id="definition.comments.collisions.allowed"></div> definition.comments. collisions.allowed {{Since | 4.3.0}} | ||
| Разрешить загрузку определения процесса, в котором отсутствуют некоторые комментарии из прежней версии определения. | | Разрешить загрузку определения процесса, в котором отсутствуют некоторые комментарии из прежней версии определения. | ||
| false | | <center>false</center> | ||
|- | |- | ||
| <div id="process.execution.message.predefined.selector.enabled"></div> process.execution.message.predefined.selector.enabled {{Since | 4.3.0}} | | <div id="process.execution.message.predefined.selector.enabled"></div> process.execution.message. predefined.selector.enabled {{Since | 4.3.0}} | ||
| Использовать ли для обработки узлов-сигналов предвычисленное значение селектора? Использование улучшает производительность обработки сигналов, но накладывает ограничение: значение селектора вычисляется на момент прихода точки управления в узел-приёмник и не изменяется при изменении значения участвующих в нём переменных. | | Использовать ли для обработки узлов-сигналов предвычисленное значение селектора? Использование улучшает производительность обработки сигналов, но накладывает ограничение: значение селектора вычисляется на момент прихода точки управления в узел-приёмник и не изменяется при изменении значения участвующих в нём переменных. | ||
| true | | <center>true</center> | ||
|- | |- | ||
| <div id="process.execution.message.predefined.selector.only.strict.compliance.handling"></div> process.execution.message.predefined.selector.only.strict.compliance.handling {{Since | 4.3.0}} | | <div id="process.execution.message.predefined.selector.only.strict.compliance.handling"></div> process.execution.message. predefined.selector.only. strict.compliance.handling {{Since | 4.3.0}} | ||
| В случае использования предвычисленного значения селектора таблицы маршрутизации: использовать только прямое соответствие? В случае прямого соответствия таблицы маршрутизации узлов отправителя и получателя должны полностью совпадать (что накладывает функциональные ограничения [[BPMNImplementation#messages | на работу сигналов]]), но получается выигрыш по производительности. | | В случае использования предвычисленного значения селектора таблицы маршрутизации: использовать только прямое соответствие? В случае прямого соответствия таблицы маршрутизации узлов отправителя и получателя должны полностью совпадать (что накладывает функциональные ограничения [[BPMNImplementation#messages | на работу сигналов]]), но получается выигрыш по производительности. | ||
| false | | <center>false</center> | ||
|- | |- | ||
| <div id="variables.invalid.default.values.allowed"></div> variables.invalid.default.values.allowed {{Since | 4.4.0}} | | <div id="variables.invalid.default.values.allowed"></div> variables.invalid.default. values.allowed {{Since | 4.4.0}} | ||
| Допускать загрузку | | Допускать загрузку в систему БП, имеющих некорректные значения переменных по умолчанию. | ||
| false (true - до версии 4.3.0 и для БП, загруженных до даты, см. след. настройку) | | <center>false</center> (true - до версии 4.3.0 и для БП, загруженных до даты, см. след. настройку) | ||
|- | |- | ||
| <div id="variables.invalid.default.values.allowed.before"></div> variables.invalid.default.values.allowed.before {{Since | 4.4.0}} | | <div id="variables.invalid.default.values.allowed.before"></div> variables.invalid.default. values.allowed.before {{Since | 4.4.0}} | ||
| Дата, начиная с которой действует настройка variables.invalid.default.values.allowed. Использовать стоит только для обратной совместимости ранее загруженных БП. | | Дата, начиная с которой действует настройка variables.invalid.default.values.allowed. Использовать стоит только для обратной совместимости ранее загруженных БП. | ||
| 01.01.1970 | | <center>01.01.1970</center> | ||
|} | |} | ||
== {{Title|class.presentation.properties|Управление полями представлений (class.presentation.properties)}} == | == {{Title|class.presentation.properties|Управление полями представлений (class.presentation.properties)}} == | ||
Поля представлений, используемых при отображении списка объектов настраиваются и могут находится в 3 состояниях: ENABLED, DISABLED и HIDDEN. По умолчанию все поля находятся в состоянии ENABLED. | Поля представлений, используемых при отображении списка объектов, настраиваются и могут находится в 3 состояниях: ENABLED, DISABLED и HIDDEN. По умолчанию все поля находятся в состоянии ENABLED. | ||
В состоянии ENABLED поле представления отображается в таблице при раскрытии представления. Фильтрация, сортировка и группировка по полю доступны для изменения пользователем и имеют ожидаемый эффект. | В состоянии ENABLED поле представления отображается в таблице при раскрытии представления. Фильтрация, сортировка и группировка по полю доступны для изменения пользователем и имеют ожидаемый эффект. | ||
В состоянии HIDDEN поле представления не отображается в таблице при раскрытии представления. Фильтрация, сортировка и группировка по полю не доступны для изменения пользователем но имеют эффект в системе. Таким образом, если в поле на момент перевода в состояние HIDDEN установлена фильтрация, то фильтрация по полю продолжит применяться при отображении списка объектов. Поля в состоянии HIDDEN наиболее разумно использовать в соединении с автоматическим проставлением свойств поля для установления одинакового вида представления у всех пользователей. Если поле необходимо только убрать из отображения, что бы оно не влияло на систему, то используйте состояние DISABLED. | В состоянии HIDDEN поле представления не отображается в таблице при раскрытии представления. Фильтрация, сортировка и группировка по этому полю не доступны для изменения пользователем, но имеют эффект в системе. Таким образом, если в поле на момент перевода в состояние HIDDEN установлена фильтрация, то фильтрация по этому полю продолжит применяться при отображении списка объектов. Поля в состоянии HIDDEN наиболее разумно использовать в соединении с автоматическим проставлением свойств поля для установления одинакового вида представления у всех пользователей. Если поле необходимо только убрать из отображения, что бы оно не влияло на систему, то используйте состояние DISABLED. | ||
В состоянии DISABLED поле представления не отображается в таблице при раскрытии представления. Фильтрация, сортировка и группировка по полю не доступны для изменения пользователем и не имеют никакого эффекта в системе. Таким образом, если в поле на момент перевода в состояние DISABLED установлена фильтрация, то фильтрация по полю не будет применяться при отображении списка объектов. | В состоянии DISABLED поле представления не отображается в таблице при раскрытии представления. Фильтрация, сортировка и группировка по этому полю не доступны для изменения пользователем и не имеют никакого эффекта в системе. Таким образом, если в поле на момент перевода в состояние DISABLED установлена фильтрация, то фильтрация по этому полю не будет применяться при отображении списка объектов. | ||
В конфигурационном файле уже прописаны по умолчанию все поля, которые могут быть настроены в системе, и установлены в состояние ENABLED. | В конфигурационном файле уже прописаны по умолчанию все поля, которые могут быть настроены в системе, и установлены в состояние ENABLED. | ||
Строка 461: | Строка 459: | ||
{| class="prettytable" border="1" | {| class="prettytable" border="1" | ||
| ''' | | <center>'''Название'''</center> | ||
| ''' | | <center>'''Описание'''</center> | ||
| ''' | | <center>'''Значение по умолчанию'''</center> | ||
|- | |- | ||
| <div id="group.subprocess.enabled"></div> group.subprocess.enabled | | <div id="group.subprocess.enabled"></div> group.subprocess.enabled | ||
| | | Доступна ли группировка по подпроцессам в фильтре? | ||
| true | | <center>true</center> | ||
|- | |- | ||
| <div id="task.form.autoShowNext"></div> task.form.autoShowNext | | <div id="task.form.autoShowNext"></div> task.form.autoShowNext | ||
| | | Автоматически показывать форму следующего задания (в том же токене) | ||
| false | | <center>false</center> | ||
|- | |- | ||
| <div id="task.form.highlightRequiredFields"></div> task.form.highlightRequiredFields | | <div id="task.form.highlightRequiredFields"></div> task.form.highlightRequiredFields | ||
| | | Обозначать обязательные поля на форме задания | ||
| true | | <center>true</center> | ||
|- | |- | ||
| <div id="task.form.ajaxFileInputEnabled"></div> task.form.ajaxFileInputEnabled | | <div id="task.form.ajaxFileInputEnabled"></div> task.form.ajaxFileInputEnabled | ||
| | | Использовать в качестве элемента загрузки файла нестандартный элемент ввода (это обеспечивает сохранение загруженного файла при неуспешной проверке данных и возможность очистки файла; используется jquery file upload). Поддержка браузерами: IE8+, Firefox, Chrome | ||
| true | | <center>true</center> | ||
|- | |- | ||
| <div id="task.form.external.js.libs"></div> task.form.external.js.libs {{Since|4.2.0}} | | <div id="task.form.external.js.libs"></div> task.form.external.js.libs {{Since|4.2.0}} | ||
| | | Использовать внешние библиотеки javascript в формах заданий (значения разделяются точкой с запятой) | ||
| | | <center>Отсутствует</center> | ||
|- | |- | ||
| <div id="view.logs.limit.lines.count"></div> view.logs.limit.lines.count | | <div id="view.logs.limit.lines.count"></div> view.logs.limit.lines.count | ||
| | | Максимальное количество отображаемых строк лога | ||
| 10000 | | <center>10000</center> | ||
|- | |- | ||
| <div id="view.logs.timeout.autoreload.seconds"></div> view.logs.timeout.autoreload.seconds | | <div id="view.logs.timeout.autoreload.seconds"></div> view.logs.timeout.autoreload.seconds | ||
| | | Таймаут перезагрузки лога на странице просмотра логов | ||
| 15 | | <center>15</center> | ||
|- | |- | ||
| <div id="process.graph.autoRefreshInterval.seconds"></div> process.graph.autoRefreshInterval.seconds | | <div id="process.graph.autoRefreshInterval.seconds"></div> process.graph.autoRefreshInterval.seconds | ||
| | | Таймаут для авто-перезагрузки графа процесса | ||
| 15 | | <center>15</center> | ||
|- | |- | ||
| <div id="process.showGraphMode"></div> process.showGraphMode | | <div id="process.showGraphMode"></div> process.showGraphMode | ||
| | | Реализовано два режима просмотра: | ||
1) '''false''' | 1) '''false''': Граф и свойства бизнес-процесса расположены на одной странице | ||
2) '''true''' | |||
| false | 2) '''true''': Граф и свойства бизнес-процесса разнесены на две разные страницы и переход между ними осуществляется по ссылке в правом верхнем углу страницы | ||
| <center>false</center> | |||
|- | |- | ||
| <div id="process.variables.displayJavaType"></div> process.variables.displayJavaType | | <div id="process.variables.displayJavaType"></div> process.variables.displayJavaType | ||
| | | Отображать ли java-тип переменной в списке переменных процесса? | ||
| false | | <center>false</center> | ||
|- | |- | ||
| <div id="ntlm.enabled"></div> ntlm.enabled | | <div id="ntlm.enabled"></div> ntlm.enabled | ||
| | | Разрешить ли аутентификацию по NTLM в вебе? | ||
| false | | <center>false</center> | ||
|- | |- | ||
| <div id="ntlm.domain"></div> ntlm.domain | | <div id="ntlm.domain"></div> ntlm.domain | ||
| | | Название домена | ||
| MYDOMAIN | | <center>MYDOMAIN</center> | ||
|- | |- | ||
| <div id="confirmation"></div> confirmation.* | | <div id="confirmation"></div> confirmation.* | ||
| | | Требовать ли подтверждения пользовательских действий? | ||
| | | <center>По контексту</center> | ||
|- | |- | ||
| <div id="menu.additional_links"></div> menu.additional_links | | <div id="menu.additional_links"></div> menu.additional_links | ||
| | | Класс-провайдер дополнительных ссылок, см. ru.runa.common.WebResources.getAdditionalLinks() | ||
| | | <center>Отсутствует</center> | ||
|- | |- | ||
| <div id="process.definition.ajax.bulk.deployment.enabled"></div> process.definition.ajax.bulk.deployment.enabled {{Since|4.2.0}} | | <div id="process.definition.ajax.bulk.deployment.enabled"></div> process.definition.ajax.bulk.deployment.enabled {{Since|4.2.0}} | ||
| | | Возможность множественной загрузки определений процессов | ||
| true | | <center>true</center> | ||
|- | |- | ||
| <div id="process.removal.enabled"></div> process.removal.enabled {{Since|4.2.0}} | | <div id="process.removal.enabled"></div> process.removal.enabled {{Since|4.2.0}} | ||
| | | Возможность удаления остановленного процесса администратором | ||
| false | | <center>false</center> | ||
|- | |- | ||
| <div id="task.delegation.enabled"></div> <strike>task.delegation.enabled</strike> {{Since|4.2.0}} | | <div id="task.delegation.enabled"></div> <strike>task.delegation.enabled</strike> {{Since|4.2.0}} | ||
| | | Включить ли делегирование задач? | ||
| true (false {{Before|4.3.0}}), переехала в system.properties {{Since|4.4.1}} | | <center>true (false {{Before|4.3.0}}),</center> | ||
переехала в system.properties {{Since|4.4.1}} | |||
|- | |- | ||
| <div id="process.swimlane.assignment.enabled"></div> process.swimlane.assignment.enabled {{Since|4.3.0}} | | <div id="process.swimlane.assignment.enabled"></div> process.swimlane.assignment.enabled {{Since|4.3.0}} | ||
| | | Включить ли административное назначение роли? | ||
| false {{Before|4.4.0}} | | <center>false{{Before|4.4.0}}</center> <center>true{{Since|4.4.0}}</center> | ||
|- | |- | ||
| <div id="process.variable.assignment.enabled"></div> process.variable.assignment.enabled {{Since|4.4.0}} | | <div id="process.variable.assignment.enabled"></div> process.variable.assignment.enabled {{Since|4.4.0}} | ||
| | | Включить ли административное редактирование переменных? | ||
| true | | <center>true</center> | ||
|- | |- | ||
| <div id="process.task.filters.enabled"></div> process.task.filters.enabled {{Since|4.3.0}} | | <div id="process.task.filters.enabled"></div> process.task.filters.enabled {{Since|4.3.0}} | ||
| | | Включить ли использование фильтров по атрибутам задач в списке запущенных процессов? | ||
| false | | <center>false</center> | ||
|- | |- | ||
| <div id="import.export.enabled"></div> import.export.enabled {{Since|4.3.0}} | | <div id="import.export.enabled"></div> import.export.enabled {{Since|4.3.0}} | ||
| | | Включить ли импорт/экспорт данных через файл? | ||
| true | | <center>true</center> | ||
|} | |} | ||
Строка 577: | Строка 577: | ||
{| class="prettytable" border="1" | {| class="prettytable" border="1" | ||
| ''' | | <center>'''Название'''</center> | ||
| ''' | | <center>'''Описание'''</center> | ||
| ''' | | <center>'''Значение по умолчанию'''</center> | ||
|- | |- | ||
| <div id="docx.placeholder.start"></div> docx.placeholder.start | | <div id="docx.placeholder.start"></div> docx.placeholder.start | ||
| | | Начало управляющей последовательности символов | ||
| <nowiki><</nowiki>{{Before|4.1.0}} | | <center><nowiki><</nowiki>{{Before|4.1.0}}<BR> | ||
<nowiki>${</nowiki>{{Since|4.1.0}} | <nowiki>${</nowiki>{{Since|4.1.0}}</center> | ||
|- | |- | ||
| <div id="docx.placeholder.end"></div> docx.placeholder.end | | <div id="docx.placeholder.end"></div> docx.placeholder.end | ||
| | | Окончание управляющей последовательности символов | ||
| <nowiki>></nowiki>{{Before|4.1.0}} | | <center><nowiki>></nowiki>{{Before|4.1.0}}<BR> | ||
<nowiki>}</nowiki>{{Since|4.1.0}} | <nowiki>}</nowiki>{{Since|4.1.0}}</center> | ||
|- | |- | ||
| <div id="docx.element.start"></div> docx.element.start | | <div id="docx.element.start"></div> docx.element.start | ||
| | | Символ указания начала элемента контейнера{{Before|4.3.0}} | ||
| <nowiki>[</nowiki> | | <center><nowiki>[</nowiki></center> | ||
|- | |- | ||
| <div id="docx.element.end"></div> docx.element.end | | <div id="docx.element.end"></div> docx.element.end | ||
| | | Символ указания окончания элемента контейнера{{Before|4.3.0}} | ||
| <nowiki>]</nowiki> | | <center><nowiki>]</nowiki></center> | ||
|- | |- | ||
| <div id="docx.placeholder.vmerge"></div> docx.placeholder.vmerge | | <div id="docx.placeholder.vmerge"></div> docx.placeholder.vmerge | ||
| | | Символ для объединения ячейки таблицы по вертикали{{Since|4.4.0}} | ||
| <nowiki>-||-</nowiki> | | <center><nowiki>-||-</nowiki></center> | ||
|} | |} | ||
Строка 613: | Строка 613: | ||
{| class="prettytable" border="1" | {| class="prettytable" border="1" | ||
| ''' | | <center>'''Название'''</center> | ||
| ''' | | <center>'''Описание'''</center> | ||
| ''' | | <center>'''Значение по умолчанию'''</center> | ||
|- | |- | ||
| <div id="edgingOnly"></div> edgingOnly | | <div id="edgingOnly"></div> edgingOnly | ||
| | | Рисовать только рамки поверх скриншота из Среды разработки (иначе - полная генерация картинки) | ||
| true | | <center>true</center> | ||
|- | |- | ||
| <div id="backgroundColor"></div> backgroundColor | | <div id="backgroundColor"></div> backgroundColor | ||
| | | Цвет фона | ||
| 0xF0FFFF | | <center>0xF0FFFF</center> | ||
|- | |- | ||
| <div id="figureBackgroundColor"></div> figureBackgroundColor | | <div id="figureBackgroundColor"></div> figureBackgroundColor | ||
| | | Цвет фона элемента | ||
| 0x009900 | | <center>0x009900</center> | ||
|- | |- | ||
| <div id="activeFigureBackgroundColor"></div> activeFigureBackgroundColor | | <div id="activeFigureBackgroundColor"></div> activeFigureBackgroundColor | ||
| | | Цвет фона активного элемента | ||
| 0xFFFF66 | | <center>0xFFFF66</center> | ||
|- | |- | ||
| <div id="baseColor"></div> baseColor | | <div id="baseColor"></div> baseColor | ||
| | | Цвет рисования элементов | ||
| 0x000000 | | <center>0x000000</center> | ||
|- | |- | ||
| <div id="textColor"></div> textColor | | <div id="textColor"></div> textColor | ||
| | | Цвет текста | ||
| 0x000000 | | <center>0x000000</center> | ||
|- | |- | ||
| <div id="transitionColor"></div> transitionColor | | <div id="transitionColor"></div> transitionColor | ||
| | | Цвет рисования переходов | ||
| 0xCCCCCC | | <center>0xCCCCCC</center> | ||
|- | |- | ||
| <div id="highlightColor"></div> highlightColor | | <div id="highlightColor"></div> highlightColor | ||
| | | Цвет рисования задействованных элементов и переходов | ||
| 0x009900 | | <center>0x009900</center> | ||
|- | |- | ||
| <div id="alarmColor"></div> alarmColor | | <div id="alarmColor"></div> alarmColor | ||
| | | Цвет просроченных заданий | ||
| 0xFF3333 | | <center>0xFF3333</center> | ||
|- | |- | ||
| <div id="lightAlarmColor"></div> lightAlarmColor | | <div id="lightAlarmColor"></div> lightAlarmColor | ||
| | | Цвет заданий, почти просроченных | ||
| 0x996633 | | <center>0x996633</center> | ||
|- | |- | ||
| <div id="fontSize "></div> fontSize | | <div id="fontSize "></div> fontSize | ||
| | | Размер шрифта (только в режиме полной отрисовки) | ||
| 9 | | <center>9</center> | ||
|- | |- | ||
| <div id="fontFamily "></div> fontFamily | | <div id="fontFamily "></div> fontFamily | ||
| | | Шрифт (только в режиме полной отрисовки) | ||
| Verdana | | <center>Verdana</center> | ||
|- | |- | ||
| <div id="bpmn.showSwimlane"></div> bpmn.showSwimlane | | <div id="bpmn.showSwimlane"></div> bpmn.showSwimlane | ||
| | | Рисовать название ролей на графе (только в режиме полной отрисовки) | ||
| true | | <center>true</center> | ||
|- | |- | ||
| <div id="logs.enabled"></div> logs.enabled | | <div id="logs.enabled"></div> logs.enabled | ||
| | | Показывать историю выполнения процесса на графе | ||
| true | | <center>true</center> | ||
|} | |} | ||
Строка 692: | Строка 692: | ||
См. [[BusinessCalendar | статью о бизнес-календаре]] | См. [[BusinessCalendar | статью о бизнес-календаре]]. | ||
== {{Title|cache.properties|Настройки кеширования (cache.properties)}} == | == {{Title|cache.properties|Настройки кеширования (cache.properties)}} == | ||
В системе существуют кешы на уровне логики некоторых сущностей: список заданий, правила замещения, исполнители, определения процессов. | В системе существуют кешы на уровне логики некоторых сущностей: список заданий, правила замещения, исполнители, определения процессов. | ||
Они хранят информацию в сложных структурах, например: список заданий по пользователям (с учетом замещений), пользователи групп, последние версии определений процессов и т.п. | Они хранят информацию в сложных структурах, например: список заданий по пользователям (с учетом замещений), пользователи групп, последние версии определений процессов и т.п.. | ||
По умолчанию включен режим работы '''smart'''. Он заключается в том что при изменении объекта пересчитывается только затрагиваемая часть кеша. | По умолчанию включен режим работы '''smart'''. Он заключается в том, что при изменении объекта пересчитывается только затрагиваемая часть кеша. | ||
Кеширование не может быть отключено полностью. | Кеширование не может быть отключено полностью. | ||
{| class="prettytable" border="1" | {| class="prettytable" border="1" | ||
| ''' | | <center>'''Название'''</center> | ||
| ''' | | <center>'''Описание'''</center> | ||
| ''' | | <center>'''Значение по умолчанию'''</center> | ||
|- | |- | ||
| <div id="smart_cache"></div> smart_cache | | <div id="smart_cache"></div> smart_cache | ||
| | | Включен режим работы '''smart''' | ||
| true | | <center>true</center> | ||
|} | |} | ||
== {{Title|botstation.properties|Настройки бот станции (botstation.properties)}} == | == {{Title|botstation.properties|Настройки бот-станции (botstation.properties)}} == | ||
{| class="prettytable" border="1" | {| class="prettytable" border="1" | ||
| ''' | | <center>'''Название'''</center> | ||
| ''' | | <center>'''Описание'''</center> | ||
| ''' | | <center>'''Значение по умолчанию'''</center> | ||
|- | |- | ||
| <div id="botstation.invocation.period.seconds"></div> botstation.invocation.period.seconds | | <div id="botstation.invocation.period.seconds"></div> botstation.invocation.period.seconds | ||
| | | При включенной периодической активации бот-станции таймаут между работой ботов, в секундах | ||
| 300 (3 {{Before|4.3.1}}) | | <center>300</center> <center>(3 {{Before|4.3.1}})</center> | ||
|- | |- | ||
| <div id="botstation.system.username"></div> botstation.system.username | | <div id="botstation.system.username"></div> botstation.system.username | ||
| | | Логин пользователя с правами на работу с бот-станцией | ||
| Administrator | | <center>Administrator</center> | ||
|- | |- | ||
| <div id="botstation.system.password"></div> botstation.system.password | | <div id="botstation.system.password"></div> botstation.system.password | ||
| | | Пароль пользователя с правами на работу с бот-станцией | ||
| wf | | <center>wf</center> | ||
|- | |- | ||
| <div id="thread.pool.size"></div> thread.pool.size | | <div id="thread.pool.size"></div> thread.pool.size | ||
| | | Количество потоков, в которых работает бот-станция | ||
| 1 | | <center>1</center> | ||
|- | |- | ||
| <div id="taskhandler.jar.names"></div> taskhandler.jar.names | | <div id="taskhandler.jar.names"></div> taskhandler.jar.names | ||
| | | Поиск обработчиков ботов для списка в веб-интерфейсе осуществляется по этим библиотекам | ||
| wfe-bots-*.jar | | <center>wfe-bots-*.jar</center> <center>*wfe-core-*.jar</center> <center>*wfe-office-*.jar</center> | ||
|- | |- | ||
| <div id="bot.logger.class"></div> bot.logger.class | | <div id="bot.logger.class"></div> bot.logger.class | ||
| | | Дополнительное логирование: класс, реализующий ru.runa.wf.logic.bot.BotLogger | ||
| | | <center>Отсутствует</center> | ||
|- | |- | ||
| <div id="botstations.autostart.enabled"></div> botstations.autostart.enabled {{Since|4.2.0}} | | <div id="botstations.autostart.enabled"></div> botstations.autostart.enabled {{Since|4.2.0}} | ||
| | | Автоматический запуск периодического выполнения всех бот-станций при запуске системы | ||
| false (true {{Before|4.3.1}}) | | <center>false</center> <center>(true {{Before|4.3.1}})</center> | ||
|- | |- | ||
| <div id="botstation.failedExecutionInitialDelaySeconds"></div> botstation.failedExecutionInitialDelaySeconds {{Since|4.2.0}} | | <div id="botstation.failedExecutionInitialDelaySeconds"></div> botstation.failedExecutionInitialDelaySeconds {{Since|4.2.0}} | ||
| | | Начальное значение задержки после неудачного выполнения задачи бота (следующее значение удвоится) (в секундах) | ||
| 30 | | <center>30</center> | ||
|- | |- | ||
| <div id="botstation.failedExecutionMaxDelaySeconds"></div> botstation.failedExecutionMaxDelaySeconds {{Since|4.2.0}} | | <div id="botstation.failedExecutionMaxDelaySeconds"></div> botstation.failedExecutionMaxDelaySeconds {{Since|4.2.0}} | ||
| | | Максимальное значение задержки после неудачного выполнения задачи бота (в секундах) | ||
| 7200 | | <center>7200</center> | ||
|- | |- | ||
| <div id="botstation.stuck.timeout.minutes"></div> botstation.stuck.timeout.minutes {{Since|4.3.0}} | | <div id="botstation.stuck.timeout.minutes"></div> botstation.stuck.timeout.minutes {{Since|4.3.0}} | ||
| | | Таймаут, используемый для обнаружения зависших заданий ботов и аварийного их завершения (в минутах) | ||
| 5 | | <center>5</center> | ||
|} | |} | ||
Строка 779: | Строка 779: | ||
{| class="prettytable" border="1" | {| class="prettytable" border="1" | ||
| ''' | | <center>'''Название'''</center> | ||
| ''' | | <center>'''Описание'''</center> | ||
| ''' | | <center>'''Значение по умолчанию'''</center> | ||
|- | |- | ||
| <div id="ejb.type"></div> ejb.type | | <div id="ejb.type"></div> ejb.type | ||
| | | Тип соединения. local для использования локального интерфейса в той же JVM, иначе - remote | ||
| local | | <center>local</center> | ||
|- | |- | ||
| <div id="ejb.jndiName.format"></div> ejb.jndiName.format | | <div id="ejb.jndiName.format"></div> ejb.jndiName.format | ||
| | | Формат имени JNDI для получения EJB | ||
| | | Подставляется с помощью maven из указанного профиля | ||
|} | |} | ||
В случае использования удаленного интерфейса (ejb remote) нужно использовать файл '''jndi.properties''' | В случае использования удаленного интерфейса (ejb remote) нужно использовать файл '''jndi.properties'''. | ||
{| class="prettytable" border="1" | {| class="prettytable" border="1" | ||
| ''' | | <center>'''Название'''</center> | ||
| ''' | | <center>'''Описание'''</center> | ||
| ''' | | <center>'''Значение для jboss4'''</center> | ||
| ''' | | <center>'''Значение для jboss7'''</center> | ||
|- | |- | ||
| <div id="java.naming.factory.initial"></div> java.naming.factory.initial | | <div id="java.naming.factory.initial"></div> java.naming.factory.initial | ||
| | | Фабрика JNDI | ||
| org.jnp.interfaces.NamingContextFactory | | org.jnp.interfaces.NamingContextFactory | ||
| org.jboss.naming.remote.client.InitialContextFactory | | org.jboss.naming.remote.client. InitialContextFactory | ||
|- | |- | ||
| <div id="java.naming.provider.url"></div> java.naming.provider.url | | <div id="java.naming.provider.url"></div> java.naming.provider.url | ||
| | | Строка соединения | ||
| jnp://localhost:10099 | | jnp://localhost:10099 | ||
| remote://localhost:4447 | | remote://localhost:4447 | ||
Строка 817: | Строка 817: | ||
|- | |- | ||
| <div id="java.naming.factory.url.pkgs"></div> java.naming.factory.url.pkgs | | <div id="java.naming.factory.url.pkgs"></div> java.naming.factory.url.pkgs | ||
| | | Используется только в случае jboss4 | ||
| org.jboss.naming:org.jnp.interfaces | | org.jboss.naming:org.jnp.interfaces | ||
| - | | <center>-</center> | ||
|- | |- | ||
| <div id="jboss.naming.client.ejb.context"></div> jboss.naming.client.ejb.context | | <div id="jboss.naming.client.ejb.context"></div> jboss.naming.client.ejb.context | ||
| | | Используется только в случае jboss7 | ||
| - | | <center>-</center> | ||
| true | | <center>true</center> | ||
|} | |} | ||
Строка 831: | Строка 831: | ||
== {{Title|sql.orgfunction.properties|Настройки орг. функций для работы с БД (sql.orgfunction.properties)}} == | == {{Title|sql.orgfunction.properties|Настройки орг. функций для работы с БД (sql.orgfunction.properties)}} == | ||
Орг. функции с названием класса '''SQL*Function''' (SQLChiefFunction, SQLChiefRecursiveFunction, SQLDirectorFunction, SQLSubordinateFunction, SQLSubordinateRecursiveFunction) настраиваются в файле '''sql.orgfunction.properties''' | Орг. функции с названием класса '''SQL*Function''' (SQLChiefFunction, SQLChiefRecursiveFunction, SQLDirectorFunction, SQLSubordinateFunction, SQLSubordinateRecursiveFunction) настраиваются в файле '''sql.orgfunction.properties'''. | ||
{| class="prettytable" border="1" | {| class="prettytable" border="1" | ||
| ''' | | <center>'''Название'''</center> | ||
| ''' | | <center>'''Описание'''</center> | ||
| ''' | | <center>'''Значение по умолчанию'''</center> | ||
|- | |- | ||
| <div id="datasource"></div> datasource | | <div id="datasource"></div> datasource | ||
| | | Название источника данных БД | ||
| java:/OrgFunctionDS | | java:/OrgFunctionDS | ||
|- | |- | ||
| <div id="chief.code.by.subordinate.code.sql"></div> chief.code.by.subordinate.code.sql | | <div id="chief.code.by.subordinate.code.sql"></div> chief.code.by.subordinate.code.sql | ||
| | | Запрос на получение руководителя сотрудника | ||
| select CHIEF_ID from EMPLOYEES where ID = ? | | select CHIEF_ID from EMPLOYEES where ID = ? | ||
|- | |- | ||
| <div id="subordinate.codes.by.chief.code.sql"></div> subordinate.codes.by.chief.code.sql | | <div id="subordinate.codes.by.chief.code.sql"></div> subordinate.codes.by.chief.code.sql | ||
| | | Запрос на получение подчиненных сотрудников руководителя | ||
| select ID from EMPLOYEES where CHIEF_ID = ? | | select ID from EMPLOYEES where CHIEF_ID = ? | ||
|- | |- | ||
| <div id="get.all.directors.codes.sql"></div> get.all.directors.codes.sql | | <div id="get.all.directors.codes.sql"></div> get.all.directors.codes.sql | ||
| | | Запрос на получение директора | ||
| SELECT ID FROM DIRECTORS | | SELECT ID FROM DIRECTORS | ||
Строка 880: | Строка 880: | ||
== {{Title|KerberosAuthentication|Настройка Kerberos аутентификации}} == | == {{Title|KerberosAuthentication|Настройка Kerberos аутентификации}} == | ||
[[KerberosAuthentication | Руководство по настройке аутентификации Kerberos]] | [[KerberosAuthentication | Руководство по настройке аутентификации Kerberos.]] | ||
== {{Title|LdapAuthentication|Настройка LDAP аутентификации}} == | == {{Title|LdapAuthentication|Настройка LDAP аутентификации}} == | ||
[[LdapIntegration#Authentication | Руководство по настройке аутентификации LDAP]] | [[LdapIntegration#Authentication | Руководство по настройке аутентификации LDAP.]] | ||
= {{Title|DataSources|Настройка соединения с БД}} = | = {{Title|DataSources|Настройка соединения с БД}} = | ||
Строка 897: | Строка 897: | ||
# отдельно настраивается СУБД для хранения сообщений (её не нужно настраивать если в процессах не используются узлы-сообщения или на них не возложена критичная логика). TODO: примеры настройки | # отдельно настраивается СУБД для хранения сообщений (её не нужно настраивать если в процессах не используются узлы-сообщения или на них не возложена критичная логика). TODO: примеры настройки | ||
Файл '''database.properties''' | Файл '''database.properties''' помимо этого содержит дополнительные настройки, информацию по которым [http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html можно получить в оригинале]. | ||
== {{Title|DBCreation|Инициализация базы данных}} == | == {{Title|DBCreation|Инициализация базы данных}} == | ||
При первом запуске системы структура базы данных будет создана автоматически. | При первом запуске системы структура базы данных будет создана автоматически. | ||
Перед этим необходимо создать пустую БД (или использовать существующую | Перед этим необходимо создать пустую БД (или использовать существующую с неконфликтными названиями объектов БД) и предоставить пользователю, который указан в источнике данных, прав на создание объектов БД (таблиц и последовательностей). После инициализации БД изменение структуры БД в дальнейшем не происходит, за исключением патчей БД при обновлении версии. Поэтому рекомендуется отнимать права создания и изменения объектов БД в штатном режиме работы. | ||
== {{Title|Wildfly10DataSource|При использовании Wildfly10 (и старше)}} == | == {{Title|Wildfly10DataSource|При использовании Wildfly10 (и старше)}} == | ||
Строка 908: | Строка 908: | ||
=== {{Title|Wildfly10Oracle|Oracle}} === | === {{Title|Wildfly10Oracle|Oracle}} === | ||
Создайте модуль '''com.oraclejdbc''' | Создайте модуль '''com.oraclejdbc'''. | ||
Структура модуля: | Структура модуля: | ||
Строка 929: | Строка 929: | ||
- ojdbc6_g.jar | - ojdbc6_g.jar | ||
'''module.xml''' | '''module.xml''': | ||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
Строка 942: | Строка 942: | ||
</module> | </module> | ||
Добавьте секцию источника данных и драйвера в '''standalone.xml''' | Добавьте секцию источника данных и драйвера в '''standalone.xml''': | ||
<datasource jndi-name="java:jboss/datasources/OracleDS" pool-name="OracleDS"> | <datasource jndi-name="java:jboss/datasources/OracleDS" pool-name="OracleDS"> | ||
<connection-url>jdbc:oracle:thin:@localhost:1521: | <connection-url>jdbc:oracle:thin:@localhost:1521:ORCL</connection-url> | ||
<driver>oracle</driver> | <driver>oracle</driver> | ||
<transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation> | <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation> | ||
Строка 954: | Строка 954: | ||
</pool> | </pool> | ||
<security> | <security> | ||
<user-name> | <user-name>WFE</user-name> | ||
<password> | <password>1</password> | ||
</security> | </security> | ||
<validation> | <validation> | ||
Строка 975: | Строка 975: | ||
<drivers> | <drivers> | ||
<driver name="oracle" module="com.oraclejdbc"> | <driver name="oracle" module="com.oraclejdbc"> | ||
<xa-datasource-class>oracle.jdbc. | <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class> | ||
</driver> | </driver> | ||
</drivers> | </drivers> | ||
В database.properties установите hibernate.connection.datasource=jboss/datasources/OracleDS и диалект hibernate.dialect=org.hibernate.dialect.OracleDialect | В database.properties установите hibernate.connection.datasource=jboss/datasources/OracleDS и диалект hibernate.dialect=org.hibernate.dialect.OracleDialect (или org.hibernate.dialect.Oracle10gDialect). | ||
(или org.hibernate.dialect.Oracle10gDialect) | |||
{{Note|Для работы с версией XE в standalone.conf.bat установите переменные окружения}} | {{Note|Для работы с версией XE в standalone.conf.bat установите переменные окружения}} | ||
set JAVA_OPTS=%JAVA_OPTS% -Duser.language=en -Duser.country=us | set JAVA_OPTS=%JAVA_OPTS% -Duser.language=en -Duser.country=us | ||
В СУБД должен быть создан пользователь с пустой схемой, например так: | |||
CREATE USER WFE IDENTIFIED BY "1" | |||
DEFAULT TABLESPACE "USERS" | |||
TEMPORARY TABLESPACE "TEMP"; | |||
ALTER USER WFE QUOTA UNLIMITED ON USERS; | |||
-- ROLES | |||
GRANT "CONNECT" TO WFE; | |||
GRANT "RESOURCE" TO WFE; | |||
-- вот почему-то oracle не включил это полномочие в RESOURCE ROLE | |||
GRANT CREATE ANY VIEW TO WFE; | |||
-- для патчей ХД | |||
GRANT CREATE USER TO WFE; -- CREATE USER internalstorage | |||
GRANT GRANT ANY PRIVILEGE TO WFE; -- GRANT CREATE SESSION TO internalstorage | |||
GRANT ALTER USER TO WFE; -- ALTER USER internalstorage QUOTA UNLIMITED ON USERS | |||
-- для работы ХД | |||
GRANT SELECT ON DBA_SEQUENCES TO WFE; | |||
GRANT CREATE ANY SEQUENCE TO WFE; | |||
GRANT CREATE ANY TABLE TO WFE; | |||
GRANT CREATE ANY INDEX TO WFE; | |||
GRANT SELECT ANY TABLE TO WFE; | |||
=== {{Title|Wildfly10PostgreSQL|PostgreSQL}} === | === {{Title|Wildfly10PostgreSQL|PostgreSQL}} === | ||
Создайте модуль '''org.postgresql''' | Создайте модуль '''org.postgresql'''. | ||
Структура модуля: | Структура модуля: | ||
Строка 1009: | Строка 1033: | ||
- postgresql-42.2.4.jar | - postgresql-42.2.4.jar | ||
'''module.xml''' | '''module.xml''': | ||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
Строка 1022: | Строка 1046: | ||
</module> | </module> | ||
Добавьте секцию источника данных и драйвера в '''standalone.xml''' | Добавьте секцию источника данных и драйвера в '''standalone.xml''': | ||
<datasource jndi-name="java:jboss/datasources/PostgreDS" pool-name="PostgreDS"> | <datasource jndi-name="java:jboss/datasources/PostgreDS" pool-name="PostgreDS"> | ||
Строка 1030: | Строка 1054: | ||
<pool> | <pool> | ||
<min-pool-size>10</min-pool-size> | <min-pool-size>10</min-pool-size> | ||
<max-pool-size> | <max-pool-size>90</max-pool-size> | ||
<prefill>true</prefill> | <prefill>true</prefill> | ||
</pool> | </pool> | ||
Строка 1053: | Строка 1077: | ||
</driver> | </driver> | ||
</drivers> | </drivers> | ||
max-pool-size должен быть не больше чем "max_connections - res_for_super" (https://www.postgresql.org/docs/current/runtime-config-connection.html), по умолчанию он 100. | |||
В database.properties установите | В database.properties установите: | ||
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect | hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect | ||
hibernate.connection.datasource=jboss/datasources/PostgreDS | hibernate.connection.datasource=jboss/datasources/PostgreDS | ||
Строка 1060: | Строка 1086: | ||
=== {{Title|Wildfly10MSSQL|MSSQL}} === | === {{Title|Wildfly10MSSQL|MSSQL}} === | ||
Создайте модуль '''com.microsoft.sqlserver''' | Создайте модуль '''com.microsoft.sqlserver'''. | ||
Структура модуля: | Структура модуля: | ||
Строка 1077: | Строка 1103: | ||
- mssql-jdbc-7.0.0.jre8.jar | - mssql-jdbc-7.0.0.jre8.jar | ||
'''module.xml''' | '''module.xml''': | ||
<module xmlns="urn:jboss:module:1.3" name="com.microsoft.sqlserver"> | <module xmlns="urn:jboss:module:1.3" name="com.microsoft.sqlserver"> | ||
Строка 1089: | Строка 1115: | ||
</module> | </module> | ||
Добавьте секцию источника данных и драйвера в '''standalone.xml''' | Добавьте секцию источника данных и драйвера в '''standalone.xml''': | ||
<datasources> | <datasources> | ||
Строка 1113: | Строка 1139: | ||
</datasources> | </datasources> | ||
В database.properties установите ru.runa.wfe.commons.hibernate.SqlServerUnicodeDialect | В database.properties установите ru.runa.wfe.commons.hibernate.SqlServerUnicodeDialect. | ||
{{Note|В случае возникновения ошибки вида ''"Тип данных столбца bpm_process.ID не совпадает с типом данных ссылающегося столбца BPM_SUBPROCESS.root_process_id во внешнем ключе fk_subprocess_root"'' при переходе на следующую версию RunaWFE Free, требуется использовать диалект SqlServerUnicodeAnd2012BigintBackCompatibilityDialect | {{Note|В случае возникновения ошибки вида ''"Тип данных столбца bpm_process.ID не совпадает с типом данных ссылающегося столбца BPM_SUBPROCESS.root_process_id во внешнем ключе fk_subprocess_root"'' при переходе на следующую версию RunaWFE Free, требуется использовать диалект SqlServerUnicodeAnd2012BigintBackCompatibilityDialect}} | ||
{{Note|Если не используется unicode - dialect.SQLServerDialect (или SqlServerAnd2012BigintBackCompatibilityDialect)}} | {{Note|Если не используется unicode - dialect.SQLServerDialect (или SqlServerAnd2012BigintBackCompatibilityDialect)}} | ||
=== {{Title|Wildfly10MySQL|MySQL (Поддержка ожидается)}} === | === {{Title|Wildfly10MySQL|MySQL (Поддержка ожидается)}} === | ||
'''Замечание''' | '''Замечание:''' '' Ожидается поддержка''. | ||
Создайте модуль '''com.mysql''' со структурой: | Создайте модуль '''com.mysql''' со структурой: | ||
Строка 1136: | Строка 1161: | ||
- mysql-connector-java-8.0.21.jar | - mysql-connector-java-8.0.21.jar | ||
'''module.xml''' | '''module.xml''': | ||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
Строка 1149: | Строка 1174: | ||
</module> | </module> | ||
Добавьте в '''standalone.xml''' | Добавьте в '''standalone.xml''': | ||
<datasource jndi-name="java:/mysqlds" pool-name="java:/mysqlds_Pool" enabled="true" use-java-context="true"> | <datasource jndi-name="java:/mysqlds" pool-name="java:/mysqlds_Pool" enabled="true" use-java-context="true"> | ||
Строка 1181: | Строка 1206: | ||
</drivers> | </drivers> | ||
В файле database.properties установите hibernate.dialect=ru.runa.wfe.commons.hibernate.MySQL5UnicodeDialect, hibernate.connection.datasource=java:/mysqlds | В файле database.properties установите hibernate.dialect=ru.runa.wfe.commons.hibernate.MySQL5UnicodeDialect, hibernate.connection.datasource=java:/mysqlds . | ||
== {{Title|Jboss7DataSource|При использовании Jboss7}} == | == {{Title|Jboss7DataSource|При использовании Jboss7}} == | ||
Строка 1190: | Строка 1215: | ||
# создания модуля для jdbc драйвера | # создания модуля для jdbc драйвера | ||
# регистрации источника данных в '''standalone.xml''' (<nowiki><subsystem xmlns="urn:jboss:domain:datasources:1.0"><datasources></nowiki>) | # регистрации источника данных в '''standalone.xml''' (<nowiki><subsystem xmlns="urn:jboss:domain:datasources:1.0"><datasources></nowiki>) | ||
# привязки источника данных и установке соответствующего диалекта в '''database.properties''' | # привязки источника данных и установке соответствующего диалекта в '''database.properties'''. | ||
=== {{Title|Jboss7PostgreSQL|PostgreSQL}} === | === {{Title|Jboss7PostgreSQL|PostgreSQL}} === | ||
Создайте модуль '''org.postgresql''' | Создайте модуль '''org.postgresql'''. | ||
Структура модуля: | Структура модуля: | ||
Строка 1208: | Строка 1233: | ||
- postgresql-8.4-701.jdbc4.jar | - postgresql-8.4-701.jdbc4.jar | ||
'''module.xml''' | '''module.xml''': | ||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
Строка 1221: | Строка 1246: | ||
</module> | </module> | ||
Добавьте секцию источника данных и драйвера в '''standalone.xml''' | Добавьте секцию источника данных и драйвера в '''standalone.xml''': | ||
<datasource jndi-name="java:jboss/datasources/PostgreDS" pool-name="PostgreDS"> | <datasource jndi-name="java:jboss/datasources/PostgreDS" pool-name="PostgreDS"> | ||
Строка 1252: | Строка 1277: | ||
</drivers> | </drivers> | ||
В database.properties установите hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect, hibernate.connection.datasource=jboss/datasources/PostgreDS | В database.properties установите hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect, hibernate.connection.datasource=jboss/datasources/PostgreDS . | ||
=== {{Title|Jboss7Oracle|Oracle}} === | === {{Title|Jboss7Oracle|Oracle}} === | ||
Создайте модуль '''com.oraclejdbc''' | Создайте модуль '''com.oraclejdbc'''. | ||
Структура модуля: | Структура модуля: | ||
Строка 1271: | Строка 1296: | ||
- ojdbc6_g.jar | - ojdbc6_g.jar | ||
'''module.xml''' | '''module.xml''': | ||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
Строка 1284: | Строка 1309: | ||
</module> | </module> | ||
Добавьте секцию источника данных и драйвера в '''standalone.xml''' | Добавьте секцию источника данных и драйвера в '''standalone.xml''': | ||
<datasource jndi-name="java:jboss/datasources/OracleDS" pool-name="OracleDS"> | <datasource jndi-name="java:jboss/datasources/OracleDS" pool-name="OracleDS"> | ||
Строка 1321: | Строка 1346: | ||
</drivers> | </drivers> | ||
В database.properties установите hibernate.dialect=org.hibernate.dialect.OracleDialect, hibernate.connection.datasource=jboss/datasources/OracleDS | В database.properties установите hibernate.dialect=org.hibernate.dialect.OracleDialect, hibernate.connection.datasource=jboss/datasources/OracleDS . | ||
{{Note|Для работы с версией XE в standalone.conf.bat установите переменные окружения}} | {{Note|Для работы с версией XE в standalone.conf.bat установите переменные окружения}} | ||
Строка 1328: | Строка 1353: | ||
=== {{Title|Jboss7Tibero|Tibero}} === | === {{Title|Jboss7Tibero|Tibero}} === | ||
Создайте модуль '''com.tmax.tibero''' | Создайте модуль '''com.tmax.tibero'''. | ||
Структура модуля: | Структура модуля: | ||
Строка 1345: | Строка 1370: | ||
- tibero5-jdbc.jar | - tibero5-jdbc.jar | ||
'''module.xml''' | '''module.xml''': | ||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
Строка 1358: | Строка 1383: | ||
</module> | </module> | ||
Добавьте секцию источника данных и драйвера в '''standalone.xml''' | Добавьте секцию источника данных и драйвера в '''standalone.xml''': | ||
<datasource jndi-name="java:jboss/datasources/TiberoDS" pool-name="TiberoDS"> | <datasource jndi-name="java:jboss/datasources/TiberoDS" pool-name="TiberoDS"> | ||
Строка 1389: | Строка 1414: | ||
</drivers> | </drivers> | ||
В database.properties установите hibernate.dialect=org.hibernate.dialect.OracleDialect, hibernate.connection.datasource=jboss/datasources/TiberoDS | В database.properties установите hibernate.dialect=org.hibernate.dialect.OracleDialect, hibernate.connection.datasource=jboss/datasources/TiberoDS . | ||
=== {{Title|Jboss7Derby|Derby}} === | === {{Title|Jboss7Derby|Derby}} === | ||
Создайте модуль '''org.apache.derby''' | Создайте модуль '''org.apache.derby'''. | ||
Структура модуля: | Структура модуля: | ||
Строка 1410: | Строка 1435: | ||
- derby.jar | - derby.jar | ||
'''module.xml''' | '''module.xml''': | ||
<module xmlns="urn:jboss:module:1.0" name="org.apache.derby"> | <module xmlns="urn:jboss:module:1.0" name="org.apache.derby"> | ||
Строка 1423: | Строка 1448: | ||
</module> | </module> | ||
Добавьте секцию источника данных и драйвера в '''standalone.xml''' | Добавьте секцию источника данных и драйвера в '''standalone.xml''': | ||
<datasource jndi-name="java:jboss/datasources/DerbyDS" pool-name="DerbyDS"> | <datasource jndi-name="java:jboss/datasources/DerbyDS" pool-name="DerbyDS"> | ||
Строка 1437: | Строка 1462: | ||
</drivers> | </drivers> | ||
В database.properties установите hibernate.dialect=org.hibernate.dialect.DerbyDialect, hibernate.connection.datasource=jboss/datasources/DerbyDS | В database.properties установите hibernate.dialect=org.hibernate.dialect.DerbyDialect, hibernate.connection.datasource=jboss/datasources/DerbyDS . | ||
=== {{Title|Jboss7SQLServer|SQL Server}} === | === {{Title|Jboss7SQLServer|SQL Server}} === | ||
Создайте модуль '''net.sourceforge.jtds''' | Создайте модуль '''net.sourceforge.jtds'''. | ||
Структура модуля: | Структура модуля: | ||
Строка 1458: | Строка 1483: | ||
- jtds-1.2.7.jar | - jtds-1.2.7.jar | ||
'''module.xml''' | '''module.xml''': | ||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
Строка 1471: | Строка 1496: | ||
</module> | </module> | ||
Добавьте секцию источника данных и драйвера в '''standalone.xml''' | Добавьте секцию источника данных и драйвера в '''standalone.xml''': | ||
<datasource jndi-name="java:jboss/datasources/RunawfeDS" pool-name="RunawfeDS"> | <datasource jndi-name="java:jboss/datasources/RunawfeDS" pool-name="RunawfeDS"> | ||
Строка 1496: | Строка 1521: | ||
</driver> | </driver> | ||
В database.properties установите hibernate.dialect=org.hibernate.dialect.SQLServerDialect (или ru.runa.wfe.commons.hibernate.SqlServerUnicodeDialect), hibernate.connection.datasource=jboss/datasources/RunawfeDS | В database.properties установите hibernate.dialect=org.hibernate.dialect.SQLServerDialect (или ru.runa.wfe.commons.hibernate.SqlServerUnicodeDialect), hibernate.connection.datasource=jboss/datasources/RunawfeDS . | ||
=== {{Title|Jboss7MySQL|MySQL}} === | === {{Title|Jboss7MySQL|MySQL}} === | ||
'''Замечание''' | '''Замечание:''' ''Вместо MySQL для RunaWFE лучше использовать PostgreSQL. RunaWFE работает с MySQL, но в настоящее время мы не предоставляем патчи обновления системы для этой БД. Если вы все-таки используете RunaWFE с MySQL, то обновление БД можно произвести вручную (но это не легко). Подробнее можно посмотреть'' [[DatabasePatches | здесь]]. | ||
Создайте модуль '''com.mysql''' со структурой: | Создайте модуль '''com.mysql''' со структурой: | ||
Строка 1515: | Строка 1540: | ||
- mysql-connector-java-5.1.7-bin.jar | - mysql-connector-java-5.1.7-bin.jar | ||
'''module.xml''' | '''module.xml''': | ||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
Строка 1528: | Строка 1553: | ||
</module> | </module> | ||
Добавьте в '''standalone.xml''' | Добавьте в '''standalone.xml''': | ||
<datasource jndi-name="java:jboss/datasources/RunawfeDS" pool-name="RunawfeDS"> | <datasource jndi-name="java:jboss/datasources/RunawfeDS" pool-name="RunawfeDS"> | ||
Строка 1559: | Строка 1584: | ||
</drivers> | </drivers> | ||
В файле database.properties установите hibernate.dialect=org.hibernate.dialect.MySQL5Dialect, hibernate.connection.datasource=jboss/datasources/RunawfeDS | В файле database.properties установите hibernate.dialect=org.hibernate.dialect.MySQL5Dialect, hibernate.connection.datasource=jboss/datasources/RunawfeDS . | ||
= {{Title|Performance|Настройки производительности}} = | = {{Title|Performance|Настройки производительности}} = | ||
Требования к аппаратным ресурсам сильно | Требования к аппаратным ресурсам сильно зависят от числа одновременно работающих пользователей и числа выполняющихся экземпляров процессов. Но в любом случае необходимо настраивать параметры JVM под существующие аппаратные ресурсы. | ||
== {{Title|JVMSettings|Настройки JVM}} == | == {{Title|JVMSettings|Настройки JVM}} == | ||
Строка 1570: | Строка 1595: | ||
В нем измените параметры JVM (JAVA_OPTS). | В нем измените параметры JVM (JAVA_OPTS). | ||
Например, в run.bat отредактируйте строку | Например, в run.bat отредактируйте строку: | ||
''set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m'' | ''set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m'' | ||
Строка 1576: | Строка 1601: | ||
Для большинства случаев можно: | Для большинства случаев можно: | ||
# Выделить максимальное кол-во памяти процессу (-Xmx8GB) | # Выделить максимальное кол-во памяти процессу (-Xmx8GB) | ||
# Установить размер памяти (perm gen) в 256M (-XX:MaxPermSize:256m) | # Установить размер памяти (perm gen) в 256M (-XX:MaxPermSize:256m) | ||
# Убедиться что используется опция "server" VM (-server) | # Убедиться что используется опция "server" VM (-server). | ||
Чтобы не использовался файл подкачки удостоверьтесь, что размер памяти, указанный с помощью опции -Xmx не превышает размер физической памяти ОЗУ. Также стоит зарезервировать некий запас памяти для ОС и других приложений. | Чтобы не использовался файл подкачки, удостоверьтесь, что размер памяти, указанный с помощью опции "-Xmx", не превышает размер физической памяти ОЗУ. Также стоит зарезервировать некий запас памяти для ОС и других приложений. | ||
Если выделить процессу менее 1Гб ОЗУ, то настройка других параметров особой пользы не принесет. В ином случае остальные параметры могут сильно повлиять на производительность системы. | Если выделить процессу менее 1Гб ОЗУ, то настройка других параметров особой пользы не принесет. В ином случае остальные параметры могут сильно повлиять на производительность системы. | ||
Пример конфигурации (32-бит, dual-core per CPU, 4GB ОЗУ): | |||
'''Пример конфигурации (32-бит, dual-core per CPU, 4GB ОЗУ):''' | |||
-server -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+CMSClassUnloadingEnabled -Xms512m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintConcurrentLocks -XX:MaxPermSize=256m | -server -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+CMSClassUnloadingEnabled -Xms512m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintConcurrentLocks -XX:MaxPermSize=256m | ||
Примеры конфигурации на многопроцессорном сервере (64-бит ОС, JVM; multi-CPU, 8GB) | '''Примеры конфигурации на многопроцессорном сервере (64-бит ОС, JVM; multi-CPU, 8GB):''' | ||
-server -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -Xms1g -Xmx4g -Xss256k -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintConcurrentLocks | -server -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -Xms1g -Xmx4g -Xss256k -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintConcurrentLocks | ||
Опции для включения параллельного сборщика мусора | '''Опции для включения параллельного сборщика мусора:''' | ||
-XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+ParallelRefProcEnabled -XX:NewRatio=5 -XX:+CMSScavengeBeforeRemark | -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+ParallelRefProcEnabled -XX:NewRatio=5 -XX:+CMSScavengeBeforeRemark | ||
Опции для анализа исполнения сборщика мусора и его настройки | '''Опции для анализа исполнения сборщика мусора и его настройки:''' | ||
-XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:"../server/default/log/gc.log" | -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:"../server/default/log/gc.log" | ||
Строка 1604: | Строка 1630: | ||
=== {{Title|JDKUtilities|Используя утилиты JDK}} === | === {{Title|JDKUtilities|Используя утилиты JDK}} === | ||
Перейдите в директорию ${JDK}\bin\. | Перейдите в директорию "${JDK}\bin\". | ||
Для получения дампа памяти выполните команду | Для получения дампа памяти выполните команду: | ||
jmap -dump:format=b,file=heap.bin pid, где - pid - идентификатор процесса | jmap -dump:format=b,file=heap.bin pid, где - pid - идентификатор процесса. | ||
Для получения дампа стека JVM выполните команду | Для получения дампа стека JVM выполните команду: | ||
jstack pid, где - pid - идентификатор процесса | jstack pid, где - pid - идентификатор процесса. | ||
При возникновении проблем (например, | При возникновении проблем (например, "Недостаточно памяти для выполнения команды"), рекомендуем воспользоваться любым из нижеописанных способов. | ||
=== {{Title|javamelody|Используя JavaMelody}} === | === {{Title|javamelody|Используя JavaMelody}} === | ||
Строка 1621: | Строка 1647: | ||
Адрес проекта: http://code.google.com/p/javamelody/ | Адрес проекта: http://code.google.com/p/javamelody/ | ||
С помощью данного инструмента можно не только | С помощью данного инструмента можно не только получать дампы, но и анализировать поведение системы. Дополнительная нагрузка в штатном режиме незначительна, что позволяет использовать данный инструмент в режиме эксплуатации. | ||
Дамп стека потоков можно получить: Threads -> Details -> Dump threads as text | Дамп стека потоков можно получить: Threads -> Details -> Dump threads as text . | ||
Дамп памяти JVM можно получить: Generate a heap dump | Дамп памяти JVM можно получить: Generate a heap dump . | ||
Отключить javamelody можно: | |||
# закомментировав строку ''hibernate.jdbc.factory_class=net.bull.javamelody.HibernateBatcherFactory'' в '''database.properties''' | # закомментировав строку ''hibernate.jdbc.factory_class=net.bull.javamelody.HibernateBatcherFactory'' в '''database.properties''' | ||
# в web.xml закомментировать или удалить фрагмент | # в web.xml закомментировать или удалить фрагмент: | ||
<filter> | <filter> | ||
Строка 1646: | Строка 1672: | ||
=== {{Title|VisualVM|Используя VisualVM}} === | === {{Title|VisualVM|Используя VisualVM}} === | ||
Адрес проекта: visualvm.java.net | Адрес проекта: visualvm.java.net . | ||
Если вы запускаете VisualVM на том же компьютере, где запущен WFE, и VisualVM обнаружил процесс WFE, то дополнительных настроек производить не нужно. | Если вы запускаете VisualVM на том же компьютере, где запущен WFE, и VisualVM обнаружил процесс WFE, то дополнительных настроек производить не нужно. | ||
Строка 1655: | Строка 1681: | ||
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=6767 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false | set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=6767 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false | ||
После этого убедиться что порт 6767 не закрыт с помощью Firewall. | После этого убедиться, что порт 6767 не закрыт с помощью Firewall. | ||
VisualVM соединится путем JMX Connection. | |||
После успешного соединения по правой кнопке мыши на выбранном процессе доступны элементы меню Thread Dump, Heap Dump. Также с помощью этого инструмента можно понаблюдать за процессом, но не советуем оставлять надолго соединение активным в режиме эксплуатации, т.к. происходит постоянная пересылка данных JVM в VisualVM. | После успешного соединения по правой кнопке мыши на выбранном процессе будут доступны элементы меню Thread Dump, Heap Dump. Также с помощью этого инструмента можно понаблюдать за процессом, но не советуем оставлять надолго соединение активным в режиме эксплуатации, т.к. происходит постоянная пересылка данных JVM в VisualVM. | ||
= {{Title|Messaging|Настройки среды для узлов-сообщений}} = | = {{Title|Messaging|Настройки среды для узлов-сообщений}} = | ||
Строка 1666: | Строка 1692: | ||
Используется JbossMessaging, все возможности настройки можно узнать из оригинала http://www.jboss.org/jbossmessaging. | Используется JbossMessaging, все возможности настройки можно узнать из оригинала http://www.jboss.org/jbossmessaging. | ||
Основные настройки в файле '''runawfe.ear!/runawfe-jms-service.xml''' | Основные настройки в файле '''runawfe.ear!/runawfe-jms-service.xml''': | ||
параметр /server/mbean/attribute[name="DefaultMaxDeliveryAttempts"] максимальное кол-во попыток отправки сообщений при отсутствии получателя | * параметр /server/mbean/attribute[name="DefaultMaxDeliveryAttempts"] максимальное кол-во попыток отправки сообщений при отсутствии получателя | ||
параметр /server/mbean/attribute[name="DefaultRedeliveryDelay"] задержка повторной отправки сообщения при отсутствии получателя | * параметр /server/mbean/attribute[name="DefaultRedeliveryDelay"] задержка повторной отправки сообщения при отсутствии получателя. | ||
При параметрах DefaultMaxDeliveryAttempts=43200, DefaultRedeliveryDelay=60000 время жизни сообщения будет 1 месяц, | При параметрах DefaultMaxDeliveryAttempts=43200, DefaultRedeliveryDelay=60000 время жизни сообщения будет 1 месяц, | ||
Строка 1677: | Строка 1703: | ||
== {{Title|Jboss7Messaging|В wildfly/Jboss версии 7}} == | == {{Title|Jboss7Messaging|В wildfly/Jboss версии 7}} == | ||
При использовании HornetMQ все возможности настройки можно узнать из оригинала http://www.jboss.org/hornetq/docs. | |||
= {{Title|OtherSettings|Другие настройки}} = | = {{Title|OtherSettings|Другие настройки}} = | ||
Строка 1684: | Строка 1710: | ||
Для изменения длительности активной пользовательской сессии в браузере по умолчанию (30 минут) | Для изменения длительности активной пользовательской сессии в браузере по умолчанию (30 минут) | ||
в ${RunaWFE}/server/default/deploy/wfe.war!/WEB-INF/web.xml добавьте в элемент <web-app> | в ${RunaWFE}/server/default/deploy/wfe.war!/WEB-INF/web.xml добавьте в элемент <web-app>: | ||
<session-config> | <session-config> | ||
Строка 1690: | Строка 1716: | ||
</session-config> | </session-config> | ||
где N - количество минут. | |||
== {{Title|TasksNotifier|Оповещение пользователей по электронной почте}} == | == {{Title|TasksNotifier|Оповещение пользователей по электронной почте}} == | ||
Строка 1696: | Строка 1722: | ||
В RunaWFE есть возможность настроить оповещение пользователей о поступивших и просроченных заданиях. | В RunaWFE есть возможность настроить оповещение пользователей о поступивших и просроченных заданиях. | ||
Для этого необходимо определить конфигурацию отправки email сообщения. | Для этого необходимо определить конфигурацию отправки email-сообщения. | ||
Содержимое '''email.config.xml''' ([[Handlers#SendEmailActionHandler|формат конфигурации аналогичен обработчику]]) | Содержимое '''email.config.xml''' ([[Handlers#SendEmailActionHandler|формат конфигурации аналогичен обработчику]]): | ||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
Строка 1727: | Строка 1753: | ||
</email-config> | </email-config> | ||
Для отправки сообщений о поступивших заданиях необходимо в '''wfe.custom.system.context.xml''' определить '''ru.runa.wfe.task.EmailTaskNotifier''' | Для отправки сообщений о поступивших заданиях необходимо в '''wfe.custom.system.context.xml''' определить '''ru.runa.wfe.task.EmailTaskNotifier'''. | ||
Пример настройки | Пример настройки: | ||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
Строка 1768: | Строка 1794: | ||
</beans> | </beans> | ||
Для отправки сообщений о просроченных заданиях необходимо в '''wfe.custom.system.context.xml''' определить job '''ru.runa.wfe.job.impl.ExpiredTasksNotifier''' | Для отправки сообщений о просроченных заданиях необходимо в '''wfe.custom.system.context.xml''' определить job '''ru.runa.wfe.job.impl.ExpiredTasksNotifier'''. | ||
Пример настройки | Пример настройки: | ||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
Строка 1813: | Строка 1839: | ||
</task:scheduled-tasks> | </task:scheduled-tasks> | ||
</beans> | </beans> | ||
где: | где: | ||
Строка 1823: | Строка 1848: | ||
* excludeEmailsFilter{{Since|4.3.0}} - список email для исключения из рассылки, допускаются подстановочные символы | * excludeEmailsFilter{{Since|4.3.0}} - список email для исключения из рассылки, допускаются подстановочные символы | ||
* includeProcessNameFilter {{Since|4.3.0}} - список названий БП для включения в рассылку, допускаются подстановочные символы | * includeProcessNameFilter {{Since|4.3.0}} - список названий БП для включения в рассылку, допускаются подстановочные символы | ||
* excludeProcessNameFilter {{Since|4.3.0}} - список названий БП исключения из рассылки, допускаются подстановочные символы | * excludeProcessNameFilter {{Since|4.3.0}} - список названий БП исключения из рассылки, допускаются подстановочные символы. | ||
{{Note|Подстановочные символы: * - любой набор символов, ? - любой символ}} | {{Note|Подстановочные символы: * - любой набор символов, ? - любой символ}} | ||
Строка 1841: | Строка 1866: | ||
'''Получатели уведомления''' (${emails}, java.lang.String) | '''Получатели уведомления''' (${emails}, java.lang.String) | ||
Формируется из корректных email пользователей, на которых назначается задание (их может быть несколько если задание назначается на группу). | Формируется из корректных email пользователей, на которых назначается задание (их может быть несколько, если задание назначается на группу). | ||
'''Задание''' (${task}, ru.runa.wfe.task.Task) | '''Задание''' (${task}, ru.runa.wfe.task.Task) | ||
Строка 1881: | Строка 1906: | ||
* boot.log – информация о загрузке | * boot.log – информация о загрузке | ||
* server.log.* – основные логи, генерируемые во время работы системы | * server.log.* – основные логи, генерируемые во время работы системы. | ||
Настраивается в файле standalone.xml по документации https://docs.jboss.org/author/display/AS71/Logging+Configuration. | Настраивается в файле standalone.xml по документации https://docs.jboss.org/author/display/AS71/Logging+Configuration . | ||
=== {{Title|LogSizeRotation|Настройка логирования с ограничением по размеру}} === | === {{Title|LogSizeRotation|Настройка логирования с ограничением по размеру}} === | ||
Для включения возможности нужно настроить https://docs.jboss.org/author/display/AS71/Logging+Configuration#LoggingConfiguration-sizerotatingfilehandler. | Для включения возможности нужно настроить https://docs.jboss.org/author/display/AS71/Logging+Configuration#LoggingConfiguration-sizerotatingfilehandler . | ||
Пример для ограничения директории с логами в 1Гб: | Пример для ограничения директории с логами в 1Гб: | ||
Строка 1915: | Строка 1940: | ||
find /opt/jboss/standalone/log/ -iname "server.log.*" -not -name "*.gz" -mtime +7 -exec gzip "{}" \; | find /opt/jboss/standalone/log/ -iname "server.log.*" -not -name "*.gz" -mtime +7 -exec gzip "{}" \; | ||
mv /opt/jboss/standalone/log/*gz /opt/jboss/standalone/log/old/ | mv /opt/jboss/standalone/log/*gz /opt/jboss/standalone/log/old/ | ||
<!-- | |||
= ЗАМЕЧАНИЯ (Николай Васильев) = | |||
1) В главе 1 находятся 2 замечания (Note), в которых не согласуются падежи. Надо это пригладить. | |||
--> | |||
[[Категория:Документация]] | [[Категория:Документация]] |
Текущая версия на 13:50, 2 апреля 2025
Сервер. Руководство по настройке
Версия 4.6.0
© 2015-2023, ООО "Процессные технологии"
# Концепция настроек
Настройки системы разделяются на 2 вида: в виде ключ=значение (properties) и в виде списков (xml). Для настроечного файла resource можно определить файл расширения настроек в том же формате с названием wfe.custom.resource. Допускается использование не более 1-го расширяющего файла wfe.custom.resource для файла базовых настроек resource.
Расширяющие файлы wfe.custom.* могут находиться:
- в classpath приложения
- в составе любого jar, находящегося в директории расширений wfe.custom .
В classpath приложения в случае использования Jboss4 входят:
- директория conf
- внутри любого jar, находящегося в deploy
- внутри runawfe.ear, в корне
- внутри runawfe.ear в составе любого jar
- директория для расширений wfe.custom (полный путь ${JBOSS4_HOME}/server/default/wfe.custom).
В classpath приложения в случае использования Jboss7 входят:
- внутри runawfe.ear в составе любого jar
- директория для расширений wfe.custom (полный путь ${JBOSS7_HOME}/standalone/wfe.custom).
# Правило переопределения настроек, определенных в properties-файлах
Используются базовые настройки из файла file.properties, включенные в дистрибутив системы (как правило размещенные в одном из jar внутри runawfe.ear), перезаписываемые из более приоритетного файла wfe.custom.file.properties по совпадающим ключам.
Пример файла wfe.custom.database.properties, определяющего тип соединения с MSSQL Server:
hibernate.connection.datasource=java:/mssqlds hibernate.dialect=ru.runa.wfe.commons.hibernate.SqlServerUnicodeDialect
# Примеры переопределения настроек, определенных в properties-файлах
Пример включения возможности изменения значений переменных экземпляра БП
За эту возможность отвечает настройка executionServiceAPI.updateVariables.enabled, которая по умолчанию имеет значение false4.1.2+, т.е. выключена. Включить данную возможность можно как через веб-интерфейс (Меню "Настройки", раздел "Основные настройки", параметр "executionServiceAPI.updateVariables.enabled"), так и с помощью правила переопределения настроек, определенных в properties-файлах. Рассмотрим подробно второй вариант.
Данный параметр определен в основных настройках system.properties, поэтому требуется переопределить его в файле system.properties. Согласно правилу переопределения, необходимо создать файл wfe.custom.system.properties в каталоге ..\standalone\wfe.custom (если директория wfe.custom не существует, то надо её создать). Например, для Windows версии RunaWFE файл wfe.custom.system.properties должен быть помещен в C:\Program Files\RunaWFE\Simulation\standalone\wfe.custom\.
В файл необходимо добавить следующую строку:
executionServiceAPI.updateVariables.enabled = true
Замечание: Переопределенные настройки применяются только после перезапуска сервера.
Если все было выполнено верно, то в свойствах экземпляра процесса в секции "Переменные процесса" должна появиться ссылка "Изменить значение", как показано на следующем рисунке:
По ссылке будет открыт интерфейс для изменения значения переменных экземпляра БП:
Пример включения административного назначения роли
Данная возможность позволяет разрешить изменение исполнителя в экземпляре процесса. Параметр, отвечающий за это - process.swimlane.assignment.enabled, расположен в web.properties и имеет по умолчанию значение false 4.3.0+.
Согласно правилу переопределения, необходимо создать файл wfe.custom.web.properties в каталоге ..\standalone\wfe.custom (если директория wfe.custom не существует, то надо её создать). Например, для Windows-версии RunaWFE файл wfe.custom.web.properties должен быть помещен в C:\Program Files\RunaWFE\Simulation\standalone\wfe.custom\.
Добавьте в файл строку:
process.swimlane.assignment.enabled = true
Замечание: Переопределенные настройки применяются только после перезапуска сервера.
Если все было выполнено верно, то в свойствах экземпляра процесса в секции "Роли процесса" появится ссылка "Изменить исполнителя":
По ссылке будет открыт интерфейс для изменения исполнителя:
# Правило расширения настроек, определенных в xml-файлах
Для большинства таких настроек действует правило: используются базовые настройки из файла file.xml, включенные в дистрибутив системы (как правило размещенные в одном из jar внутри runawfe.ear) + настройки из файла wfe.custom.file.xml в таком же формате.
Пример файла, определяющего новый валидатор wfe.custom.validators.xml:
<?xml version="1.0" encoding="UTF-8"?> <validators> <validator name="IntersectedVacationsDataValidator" class="ru.runa.wf.validators.IntersectedVacationsDataValidator"/> </validators>
# Расширение контекста Spring
Cоздайте файл wfe.custom.system.context.xml. Это позволит переопределить существующие бины по идентификатору или определить новые.
Пример файла для переопределения логики инициализации класса-реализации бизнес-календаря:
<?xml version="1.0" encoding="UTF-8"?> <beans ...> <bean id="executorLogic" class="ru.runa.wfe.user.logic.ExecutorLogic"> <property name="passwordCheckPattern" value="${strong.passwords.regexp}" /> <property name="setStatusHandlers"> <list> <bean class="ru.runa.wfe.synchronizer.online.ActorStatusSynchronizer" /> </list> </property> </bean> <bean id="initializerLogic" class="ru.runa.common.AlfwfInitializerLogic" /> <bean id="businessCalendar" class="ru.runa.calendar.BusinessCalendarRunaImpl" /> </beans>
Пример файла для переопределения логики инициализации и расширения DAO-уровня:
<?xml version="1.0" encoding="UTF-8"?> <beans ...> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="hibernateProperties" ref="hibernateProperties" /> <property name="entityInterceptor"> <bean class="ru.runa.wfe.commons.hibernate.CacheInterceptor" /> </property> <property name="packagesToScan"> <list> <value>ru.runa.wfe</value> <value>ru.runa.rkdemo.dao</value> </list> </property> </bean> <bean id="organizationDAO" class="ru.runa.rkdemo.dao.OrganizationDAO"> <property name="hibernateTemplate" ref="hibernateTemplate" /> </bean> <bean id="visitorDAO" class="ru.runa.rkdemo.dao.VisitorDAO"> <property name="hibernateTemplate" ref="hibernateTemplate" /> </bean> <bean id="roomDAO" class="ru.runa.rkdemo.dao.RoomDAO"> <property name="hibernateTemplate" ref="hibernateTemplate" /> </bean> <bean id="initializerLogic" class="ru.runa.rkdemo.logic.RkDemoInitializerLogic" /> </beans>
# Перечень настроек
# Режим разработки
При установке в исполняемом файле (bat, sh) системной переменной devmode будет включен режим разработки, см. SystemProperties.isDevMode().
# Режим обратной совместимости
При установке в исполняемом файле (bat, sh) системной переменной v3compatibility будет включен режим совместимости по исполнению процессов с 3-й версией, см. SystemProperties.isV3CompatibilityMode().
# Основные настройки (system.properties)
version | Версия системы | Версия системы из pom.xml, проставляется при сборке |
default.administrator.name | Логин администратора, создаваемый при первом запуске системы | |
default.administrator.password | Пароль администратора, устанавливаемый при первом запуске системы | |
default.administrators.group.name | Название группы администраторов, создаваемая при первом запуске системы | |
default.bots.group.name | Название группы ботов, создаваемая при первом запуске системы | |
strong.passwords.regexp | Для усиления защиты системы можно наложить ограничения на пароли пользователей системы. Если определен этот параметр, то все заводимые пароли пользователей должны соответствовать регулярному выражению. Если пароль не отвечает требованиям безопасности, то смена пароля произведена не будет. | |
escalation.enabled | Эскалация заданий включена? | |
escalation.default.hierarchy.loader
(до версии 4.1.1 escalation.default. orgFunction) |
Орг. функция или отношение, для определения иерархии эскалации заданий | ru.runa.wfe.extension.orgfunction. TestOrgFunction (фиктивная орг. функция)
Значением может быть либо полное название класса орг. функции, либо отношение в формате @relationName. Обратное отношение задаётся в формате @!relationName. |
task.default.deadline | Время исполнения задания по умолчанию (если не установлено явно в Среде разработки) | |
task.almostDeadlinePercents | Процент истечения времени исполнения, после которого цвет задания в списке меняется на более приоритетный | |
task.delegation.enabled | Включить делегирование задач | |
authentication.domain.name | Имя домена | |
date.format.pattern | Формат даты в системе (также используется при форматировании даты со временем) | |
|
Разрешить выполнение метода ru.runa.wfe.service.impl.ExecutionServiceBean. updateVariables (User, Long, Map<String, Object>) | |
scriptingServiceAPI.executeGroovyScript. enabled | Разрешить выполнение метода ru.runa.wfe.service.ScriptingService. executeGroovyScript (User, String) | |
token.maximum.depth | Максимально разрешенная вложенность токенов для предотвращения логических циклических ошибок в параллельном шлюзе | |
token.maximum.length 4.4.1+ | Максимально разрешенная длина (количество переходов) токенов для предотвращения логических циклических ошибок | |
file.variable.local.storage. enabled | Разрешить использование локального хранилища в файловой системе для больших файлов | |
file.variable.local. storage.path | Путь к директории-хранилищу | Директория wfe.filedata внутри сервера |
file.variable.local.storage. enableforfilesgreaterthan | Если размер файловой переменной превышает установленный - то файл сохраняется в файловой системе, а не в БД | |
string.variable.length | Значение длины строковой переменной, изменять не рекомендуется! | |
ear.filename | Изменять в случае сборки собственного EAR | |
undefined.variables.allowed | Разрешить создание в процессе переменных, не определенных в Среде разработки? | |
strong.variables.format. enabled | Режим строгой типизации. Требовать соответствие типа определенному в Среде разработки при установке значений переменных | |
variables.autocast.enabled | Выполнять приведение типа к определенному в Среде разработки в случае несоответствия типа значения переменной в режиме строгой типизации | |
timertask.period.millis.job.execution 4.0.6+ | Период обнаружения просроченных таймеров всех процессов, в миллисекундах | |
timertask.start.millis.job. execution 4.0.6+ | Задержка перед первым выполнением просроченных таймеров всех процессов после запуска системы, в миллисекундах | |
job.executor.batch. size 4.4.3+ | Количество обрабатываемых просроченных таймеров в одной транзакции | |
timertask.period.millis.unassigned. tasks.execution 4.0.6+ | Период между обнаружением не назначенных заданий (и попыткой их назначения), в миллисекундах | |
timertask.start.millis.unassigned. tasks.execution 4.0.6+ | Задержка перед первым обнаружением не назначенных заданий (и попыткой их назначения) после запуска системы, в миллисекундах | |
timertask.period.millis.remove.temp.groups 4.3.0+ | Период между очистками временных групп, в миллисекундах | |
timertask.start.millis.remove. temp.groups 4.3.0+ | Задержка перед первым выполнением очистки временных групп после запуска системы, в миллисекундах | |
|
Только в 4.1.0, см. описание | |
trusted.authentication. enabled 4.2.0+ | Разрешена ли доверенная аутентификация с помощью сервисного аккаунта (AuthenticationService.authenticateByTrsustedPrincipal (User, String)) | |
upgrade.process.to.definition. version.enabled 4.3.0+ | Разрешено ли обновление версии исполняющегося процесса на другое по версии (полезно для исправления блокирующих ошибок, может иметь непредсказуемые ошибки в случае, если определение процесса сильно отличается от текущего) | |
process.admin.groups 4.2.2+ | Административное выполнение заданий. Задаётся список названий административных групп, пользователи из которых будут видеть в своём списке заданий чужие задачи. При этом, если описание группы не задано, то входящий в неё пользовать видит все задания в системе. Если в описании задать номера БП через запятую - то увидит задания только из этих БП. Он может их выполнить, в логе выполнения БП будет соответствующая запись. В списке выделяются цветом аналогично заданиям, полученным по замещению. Фильтр на такие задания сейчас не распространяется. | |
process.end.handlers 4.2.2+ | Список классов обработчиков, реализующих ProcessEndHandler, которые будут вызваны по завершению БП | |
process.execution.listeners 4.3.0+ | Список классов обработчиков, реализующих IProcessExecutionListener, которые будут вызваны во время выполнения БП | |
base.process.id.variable. name 4.2.2+ | Название переменной БП, которая хранит ID базового БП, из которого будут грузиться переменные, если они не заданы в текущем БП. Это позволяет не дублировать значения переменных в некоторых случаях при использовании подпроцессов. Переменные должны быть определены в обоих определениях БП. | |
base.process.id.variable. read.all 4.3.0+ | Доступ на чтение в режиме "ID базового БП" ко всем переменным. | |
|
Только в 4.3.0, не вошло в релиз. Определяло соответсвие переменных для режима "ID базового БП" | |
temporary.groups.set. permissions 4.3.0+ | Выдавать ли полномочия на чтение создаваемой временной группе всем её участникам. | |
temporary.groups.delete. on.process.end 4.3.0+ | Удалять временные группы по завершению БП. Если не удалять - то это будет сделано (по умолчанию включено) с помощью периодической задачи чистки неиспользуемых временных групп. | |
temporary.groups.delete. on.task.end 4.3.0+ | Удалять временную группу, на которую назначено задание, при его завершении. Если не удалять - то это будет сделано (по умолчанию включено) с помощью периодической задачи чистки неиспользуемых временных групп. | |
freemarker.static.class.names 4.3.0+ | Список классов, которые доступны по механизму BeansWrapper.getStaticModels() в шаблонах freemarker | |
process.suspension.enabled 4.3.0+ | Разрешить ручную приостановку БП администратором системы. | |
process.execution.node. async.default 4.3.0+ | По умолчанию использовать новую транзакцию для выполнения узлов, подробнее | |
process.execution.node. async.NodeType 4.3.0+ | Использовать новую транзакцию для выполнения узлов определённого типа по умолчанию, подробнее | |
process.swimlane.auto. initialization.enabled 4.3.0+ | Разрешить авто-инициализацию роли при доступе к ней как к переменной. | |
check.process.start.permissions 4.3.0+ | Проверять права на запуск БП. Используется только в случае интеграции со сторонней подсистемой полномочий. | |
definition.comments.empty. allowed 4.3.0+ | Разрешить загрузку определения процесса, в котором нет новых комментариев. | |
definition.comments. collisions.allowed 4.3.0+ | Разрешить загрузку определения процесса, в котором отсутствуют некоторые комментарии из прежней версии определения. | |
process.execution.message. predefined.selector.enabled 4.3.0+ | Использовать ли для обработки узлов-сигналов предвычисленное значение селектора? Использование улучшает производительность обработки сигналов, но накладывает ограничение: значение селектора вычисляется на момент прихода точки управления в узел-приёмник и не изменяется при изменении значения участвующих в нём переменных. | |
process.execution.message. predefined.selector.only. strict.compliance.handling 4.3.0+ | В случае использования предвычисленного значения селектора таблицы маршрутизации: использовать только прямое соответствие? В случае прямого соответствия таблицы маршрутизации узлов отправителя и получателя должны полностью совпадать (что накладывает функциональные ограничения на работу сигналов), но получается выигрыш по производительности. | |
variables.invalid.default. values.allowed 4.4.0+ | Допускать загрузку в систему БП, имеющих некорректные значения переменных по умолчанию. | |
variables.invalid.default. values.allowed.before 4.4.0+ | Дата, начиная с которой действует настройка variables.invalid.default.values.allowed. Использовать стоит только для обратной совместимости ранее загруженных БП. |
# Управление полями представлений (class.presentation.properties)
Поля представлений, используемых при отображении списка объектов, настраиваются и могут находится в 3 состояниях: ENABLED, DISABLED и HIDDEN. По умолчанию все поля находятся в состоянии ENABLED.
В состоянии ENABLED поле представления отображается в таблице при раскрытии представления. Фильтрация, сортировка и группировка по полю доступны для изменения пользователем и имеют ожидаемый эффект.
В состоянии HIDDEN поле представления не отображается в таблице при раскрытии представления. Фильтрация, сортировка и группировка по этому полю не доступны для изменения пользователем, но имеют эффект в системе. Таким образом, если в поле на момент перевода в состояние HIDDEN установлена фильтрация, то фильтрация по этому полю продолжит применяться при отображении списка объектов. Поля в состоянии HIDDEN наиболее разумно использовать в соединении с автоматическим проставлением свойств поля для установления одинакового вида представления у всех пользователей. Если поле необходимо только убрать из отображения, что бы оно не влияло на систему, то используйте состояние DISABLED.
В состоянии DISABLED поле представления не отображается в таблице при раскрытии представления. Фильтрация, сортировка и группировка по этому полю не доступны для изменения пользователем и не имеют никакого эффекта в системе. Таким образом, если в поле на момент перевода в состояние DISABLED установлена фильтрация, то фильтрация по этому полю не будет применяться при отображении списка объектов.
В конфигурационном файле уже прописаны по умолчанию все поля, которые могут быть настроены в системе, и установлены в состояние ENABLED.
# Настройка веб-интерфейса (web.properties)
group.subprocess.enabled | Доступна ли группировка по подпроцессам в фильтре? | |
task.form.autoShowNext | Автоматически показывать форму следующего задания (в том же токене) | |
task.form.highlightRequiredFields | Обозначать обязательные поля на форме задания | |
task.form.ajaxFileInputEnabled | Использовать в качестве элемента загрузки файла нестандартный элемент ввода (это обеспечивает сохранение загруженного файла при неуспешной проверке данных и возможность очистки файла; используется jquery file upload). Поддержка браузерами: IE8+, Firefox, Chrome | |
task.form.external.js.libs 4.2.0+ | Использовать внешние библиотеки javascript в формах заданий (значения разделяются точкой с запятой) | |
view.logs.limit.lines.count | Максимальное количество отображаемых строк лога | |
view.logs.timeout.autoreload.seconds | Таймаут перезагрузки лога на странице просмотра логов | |
process.graph.autoRefreshInterval.seconds | Таймаут для авто-перезагрузки графа процесса | |
process.showGraphMode | Реализовано два режима просмотра:
1) false: Граф и свойства бизнес-процесса расположены на одной странице 2) true: Граф и свойства бизнес-процесса разнесены на две разные страницы и переход между ними осуществляется по ссылке в правом верхнем углу страницы |
|
process.variables.displayJavaType | Отображать ли java-тип переменной в списке переменных процесса? | |
ntlm.enabled | Разрешить ли аутентификацию по NTLM в вебе? | |
ntlm.domain | Название домена | |
confirmation.* | Требовать ли подтверждения пользовательских действий? | |
menu.additional_links | Класс-провайдер дополнительных ссылок, см. ru.runa.common.WebResources.getAdditionalLinks() | |
process.definition.ajax.bulk.deployment.enabled 4.2.0+ | Возможность множественной загрузки определений процессов | |
process.removal.enabled 4.2.0+ | Возможность удаления остановленного процесса администратором | |
|
Включить ли делегирование задач? | переехала в system.properties 4.4.1+ |
process.swimlane.assignment.enabled 4.3.0+ | Включить ли административное назначение роли? | |
process.variable.assignment.enabled 4.4.0+ | Включить ли административное редактирование переменных? | |
process.task.filters.enabled 4.3.0+ | Включить ли использование фильтров по атрибутам задач в списке запущенных процессов? | |
import.export.enabled 4.3.0+ | Включить ли импорт/экспорт данных через файл? |
# Настройка работы с приложениями Office (office.properties)
docx.placeholder.start | Начало управляющей последовательности символов | ${4.1.0+ |
docx.placeholder.end | Окончание управляющей последовательности символов | }4.1.0+ |
docx.element.start | Символ указания начала элемента контейнера4.3.0- | |
docx.element.end | Символ указания окончания элемента контейнера4.3.0- | |
docx.placeholder.vmerge | Символ для объединения ячейки таблицы по вертикали4.4.0+ |
# Настройка графа процесса (graph.properties)
edgingOnly | Рисовать только рамки поверх скриншота из Среды разработки (иначе - полная генерация картинки) | |
backgroundColor | Цвет фона | |
figureBackgroundColor | Цвет фона элемента | |
activeFigureBackgroundColor | Цвет фона активного элемента | |
baseColor | Цвет рисования элементов | |
textColor | Цвет текста | |
transitionColor | Цвет рисования переходов | |
highlightColor | Цвет рисования задействованных элементов и переходов | |
alarmColor | Цвет просроченных заданий | |
lightAlarmColor | Цвет заданий, почти просроченных | |
fontSize | Размер шрифта (только в режиме полной отрисовки) | |
fontFamily | Шрифт (только в режиме полной отрисовки) | |
bpmn.showSwimlane | Рисовать название ролей на графе (только в режиме полной отрисовки) | |
logs.enabled | Показывать историю выполнения процесса на графе |
# Настройки бизнес-календаря (business.calendar.properties)
См. статью о бизнес-календаре.
# Настройки кеширования (cache.properties)
В системе существуют кешы на уровне логики некоторых сущностей: список заданий, правила замещения, исполнители, определения процессов. Они хранят информацию в сложных структурах, например: список заданий по пользователям (с учетом замещений), пользователи групп, последние версии определений процессов и т.п..
По умолчанию включен режим работы smart. Он заключается в том, что при изменении объекта пересчитывается только затрагиваемая часть кеша.
Кеширование не может быть отключено полностью.
smart_cache | Включен режим работы smart |
# Настройки бот-станции (botstation.properties)
botstation.invocation.period.seconds | При включенной периодической активации бот-станции таймаут между работой ботов, в секундах | |
botstation.system.username | Логин пользователя с правами на работу с бот-станцией | |
botstation.system.password | Пароль пользователя с правами на работу с бот-станцией | |
thread.pool.size | Количество потоков, в которых работает бот-станция | |
taskhandler.jar.names | Поиск обработчиков ботов для списка в веб-интерфейсе осуществляется по этим библиотекам | |
bot.logger.class | Дополнительное логирование: класс, реализующий ru.runa.wf.logic.bot.BotLogger | |
botstations.autostart.enabled 4.2.0+ | Автоматический запуск периодического выполнения всех бот-станций при запуске системы | |
botstation.failedExecutionInitialDelaySeconds 4.2.0+ | Начальное значение задержки после неудачного выполнения задачи бота (следующее значение удвоится) (в секундах) | |
botstation.failedExecutionMaxDelaySeconds 4.2.0+ | Максимальное значение задержки после неудачного выполнения задачи бота (в секундах) | |
botstation.stuck.timeout.minutes 4.3.0+ | Таймаут, используемый для обнаружения зависших заданий ботов и аварийного их завершения (в минутах) |
# Настройки соединения по Java API с EJB (ejb.properties)
Если вы используете слой делегатов в wfe-service.jar, то необходимо настроить соединение с EJB.
ejb.type | Тип соединения. local для использования локального интерфейса в той же JVM, иначе - remote | |
ejb.jndiName.format | Формат имени JNDI для получения EJB | Подставляется с помощью maven из указанного профиля |
В случае использования удаленного интерфейса (ejb remote) нужно использовать файл jndi.properties.
java.naming.factory.initial | Фабрика JNDI | org.jnp.interfaces.NamingContextFactory | org.jboss.naming.remote.client. InitialContextFactory |
java.naming.provider.url | Строка соединения | jnp://localhost:10099 | remote://localhost:4447 |
java.naming.factory.url.pkgs | Используется только в случае jboss4 | org.jboss.naming:org.jnp.interfaces | |
jboss.naming.client.ejb.context | Используется только в случае jboss7 |
# Настройки орг. функций для работы с БД (sql.orgfunction.properties)
Орг. функции с названием класса SQL*Function (SQLChiefFunction, SQLChiefRecursiveFunction, SQLDirectorFunction, SQLSubordinateFunction, SQLSubordinateRecursiveFunction) настраиваются в файле sql.orgfunction.properties.
datasource | Название источника данных БД | java:/OrgFunctionDS |
chief.code.by.subordinate.code.sql | Запрос на получение руководителя сотрудника | select CHIEF_ID from EMPLOYEES where ID = ? |
subordinate.codes.by.chief.code.sql | Запрос на получение подчиненных сотрудников руководителя | select ID from EMPLOYEES where CHIEF_ID = ? |
get.all.directors.codes.sql | Запрос на получение директора | SELECT ID FROM DIRECTORS |
# Настройка аутентификации
В контексте Spring (system.context.xml) есть бин, ответственный за список логин-модулей, используемых для аутентификации:
<bean id="loginModuleConfiguration" class="ru.runa.wfe.security.auth.LoginModuleConfiguration"> <property name="loginModuleClassNames"> <list> <value>ru.runa.wfe.security.auth.InternalDBPasswordLoginModule</value> <value>ru.runa.wfe.security.auth.KerberosLoginModule</value> <value>ru.runa.wfe.security.auth.TrustedLoginModule</value> </list> </property> </bean>
Нужно включить требуемые и отключить неиспользуемые.
# Настройка Kerberos аутентификации
Руководство по настройке аутентификации Kerberos.
# Настройка LDAP аутентификации
Руководство по настройке аутентификации LDAP.
# Настройка соединения с БД
Система использует Hibernate ORM и может работать на любой СУБД. Тестирование системы производится на: PostgreSQL, MS SQL Server, Oracle, HSQL.
Настройка осуществляется путем:
- регистрации класса-драйвера в сервере приложений
- регистрации источника данных в сервере приложений
- привязки источника данных и установке соответствующего диалекта в database.properties
- отдельно настраивается СУБД для хранения сообщений (её не нужно настраивать если в процессах не используются узлы-сообщения или на них не возложена критичная логика). TODO: примеры настройки
Файл database.properties помимо этого содержит дополнительные настройки, информацию по которым можно получить в оригинале.
# Инициализация базы данных
При первом запуске системы структура базы данных будет создана автоматически. Перед этим необходимо создать пустую БД (или использовать существующую с неконфликтными названиями объектов БД) и предоставить пользователю, который указан в источнике данных, прав на создание объектов БД (таблиц и последовательностей). После инициализации БД изменение структуры БД в дальнейшем не происходит, за исключением патчей БД при обновлении версии. Поэтому рекомендуется отнимать права создания и изменения объектов БД в штатном режиме работы.
# При использовании Wildfly10 (и старше)
# Oracle
Создайте модуль com.oraclejdbc.
Структура модуля:
modules \ - system \ - layers \ - base \ - com \ - oraclejdbc \ - main \ - module.xml - ojdbc6_g.jar
module.xml:
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.3" name="com.oraclejdbc"> <resources> <resource-root path="ojdbc6_g.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
Добавьте секцию источника данных и драйвера в standalone.xml:
<datasource jndi-name="java:jboss/datasources/OracleDS" pool-name="OracleDS"> <connection-url>jdbc:oracle:thin:@localhost:1521:ORCL</connection-url> <driver>oracle</driver> <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation> <pool> <min-pool-size>10</min-pool-size> <max-pool-size>100</max-pool-size> <prefill>true</prefill> </pool> <security> <user-name>WFE</user-name> <password>1</password> </security> <validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/> <validate-on-match>true</validate-on-match> <background-validation>false</background-validation> <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/> </validation> <timeout> <blocking-timeout-millis>5000</blocking-timeout-millis> <idle-timeout-minutes>5</idle-timeout-minutes> </timeout> <statement> <prepared-statement-cache-size>32</prepared-statement-cache-size> <share-prepared-statements>true</share-prepared-statements> </statement> </datasource> <drivers> <driver name="oracle" module="com.oraclejdbc"> <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class> </driver> </drivers>
В database.properties установите hibernate.connection.datasource=jboss/datasources/OracleDS и диалект hibernate.dialect=org.hibernate.dialect.OracleDialect (или org.hibernate.dialect.Oracle10gDialect).
Для работы с версией XE в standalone.conf.bat установите переменные окружения.
set JAVA_OPTS=%JAVA_OPTS% -Duser.language=en -Duser.country=us
В СУБД должен быть создан пользователь с пустой схемой, например так:
CREATE USER WFE IDENTIFIED BY "1" DEFAULT TABLESPACE "USERS" TEMPORARY TABLESPACE "TEMP";
ALTER USER WFE QUOTA UNLIMITED ON USERS;
-- ROLES GRANT "CONNECT" TO WFE; GRANT "RESOURCE" TO WFE;
-- вот почему-то oracle не включил это полномочие в RESOURCE ROLE GRANT CREATE ANY VIEW TO WFE; -- для патчей ХД GRANT CREATE USER TO WFE; -- CREATE USER internalstorage GRANT GRANT ANY PRIVILEGE TO WFE; -- GRANT CREATE SESSION TO internalstorage GRANT ALTER USER TO WFE; -- ALTER USER internalstorage QUOTA UNLIMITED ON USERS
-- для работы ХД GRANT SELECT ON DBA_SEQUENCES TO WFE; GRANT CREATE ANY SEQUENCE TO WFE; GRANT CREATE ANY TABLE TO WFE; GRANT CREATE ANY INDEX TO WFE; GRANT SELECT ANY TABLE TO WFE;
# PostgreSQL
Создайте модуль org.postgresql.
Структура модуля:
modules \ - system \ - layers \ - base \ - org \ - postgresql \ - main \ - module.xml - postgresql-42.2.4.jar
module.xml:
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.3" name="org.postgresql"> <resources> <resource-root path="postgresql-42.2.4.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
Добавьте секцию источника данных и драйвера в standalone.xml:
<datasource jndi-name="java:jboss/datasources/PostgreDS" pool-name="PostgreDS"> <connection-url>jdbc:postgresql://localhost:5432/runawfe</connection-url> <driver>postgresql</driver> <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation> <pool> <min-pool-size>10</min-pool-size> <max-pool-size>90</max-pool-size> <prefill>true</prefill> </pool> <security> <user-name>runawfe</user-name> <password>1</password> </security> <validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/> <validate-on-match>true</validate-on-match> <background-validation>false</background-validation> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/> </validation> <statement> <prepared-statement-cache-size>32</prepared-statement-cache-size> <share-prepared-statements>true</share-prepared-statements> </statement> </datasource> <drivers> <driver name="postgresql" module="org.postgresql"> <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class> </driver> </drivers>
max-pool-size должен быть не больше чем "max_connections - res_for_super" (https://www.postgresql.org/docs/current/runtime-config-connection.html), по умолчанию он 100.
В database.properties установите:
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect hibernate.connection.datasource=jboss/datasources/PostgreDS
# MSSQL
Создайте модуль com.microsoft.sqlserver.
Структура модуля:
modules \ - com \ - microsoft \ - sqlserver \ - main \ - module.xml - mssql-jdbc-7.0.0.jre8.jar
module.xml:
<module xmlns="urn:jboss:module:1.3" name="com.microsoft.sqlserver"> <resources> <resource-root path="mssql-jdbc-7.0.0.jre8.jar" /> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
Добавьте секцию источника данных и драйвера в standalone.xml:
<datasources> <datasource jndi-name="java:/mssqlds" pool-name="java:/mssqlds_Pool" enabled="true" use-java-context="true"> <connection-url>jdbc:sqlserver://localhost:1433;DatabaseName=runawfe</connection-url> <driver>mssql</driver> <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation> <pool> <min-pool-size>5</min-pool-size> <max-pool-size>30</max-pool-size> </pool> <security> <user-name>runawfe</user-name> <password>wfe</password> </security> </datasource> <drivers> <driver name="mssql" module="com.microsoft.sqlserver"> <driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class> <xa-datasource-class>com.microsoft.sqlserver.jdbc.SQLServerXADataSource</xa-datasource-class> </driver> </drivers> </datasources>
В database.properties установите ru.runa.wfe.commons.hibernate.SqlServerUnicodeDialect.
В случае возникновения ошибки вида "Тип данных столбца bpm_process.ID не совпадает с типом данных ссылающегося столбца BPM_SUBPROCESS.root_process_id во внешнем ключе fk_subprocess_root" при переходе на следующую версию RunaWFE Free, требуется использовать диалект SqlServerUnicodeAnd2012BigintBackCompatibilityDialect.
Если не используется unicode - dialect.SQLServerDialect (или SqlServerAnd2012BigintBackCompatibilityDialect).
# MySQL (Поддержка ожидается)
Замечание: Ожидается поддержка.
Создайте модуль com.mysql со структурой:
modules \ - com \ - mysql \ - main \ - module.xml - mysql-connector-java-8.0.21.jar
module.xml:
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.0" name="com.mysql"> <resources> <resource-root path="mysql-connector-java-8.0.21.jar" /> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
Добавьте в standalone.xml:
<datasource jndi-name="java:/mysqlds" pool-name="java:/mysqlds_Pool" enabled="true" use-java-context="true"> <connection-url>jdbc:mysql://localhost:3306/wfe_1?UseUnicode=true&characterEncoding=UTF-8&useOldAliasMetadataBehavior=true&serverTimezone=UTC</connection-url> <driver>mysql</driver> <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation> <pool> <min-pool-size>10</min-pool-size> <max-pool-size>100</max-pool-size> <prefill>true</prefill> </pool> <security> <user-name>root</user-name> <password>***</password> </security> <validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/> <validate-on-match>true</validate-on-match> <background-validation>false</background-validation> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/> </validation> <statement> <prepared-statement-cache-size>32</prepared-statement-cache-size> <share-prepared-statements>true</share-prepared-statements> </statement> </datasource> <drivers> <driver name="mysql" module="com.mysql"> <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class> </driver> </drivers>
В файле database.properties установите hibernate.dialect=ru.runa.wfe.commons.hibernate.MySQL5UnicodeDialect, hibernate.connection.datasource=java:/mysqlds .
# При использовании Jboss7
По умолчанию в системе используется H2 в режиме пересоздания при перезагрузке сервера. Для перевода в другой режим измените строку соединения в standalone.xml.
Настройка осуществляется путем:
- создания модуля для jdbc драйвера
- регистрации источника данных в standalone.xml (<subsystem xmlns="urn:jboss:domain:datasources:1.0"><datasources>)
- привязки источника данных и установке соответствующего диалекта в database.properties.
# PostgreSQL
Создайте модуль org.postgresql.
Структура модуля:
modules \ - org \ - postgresql \ - main \ - module.xml - postgresql-8.4-701.jdbc4.jar
module.xml:
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.0" name="org.postgresql"> <resources> <resource-root path="postgresql-8.4-701.jdbc4.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
Добавьте секцию источника данных и драйвера в standalone.xml:
<datasource jndi-name="java:jboss/datasources/PostgreDS" pool-name="PostgreDS"> <connection-url>jdbc:postgresql://localhost:5432/wfe</connection-url> <driver>postgresql</driver> <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation> <pool> <min-pool-size>10</min-pool-size> <max-pool-size>100</max-pool-size> <prefill>true</prefill> </pool> <security> <user-name>wfe</user-name> </security> <validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/> <validate-on-match>true</validate-on-match> <background-validation>false</background-validation> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/> </validation> <statement> <prepared-statement-cache-size>32</prepared-statement-cache-size> <share-prepared-statements>true</share-prepared-statements> </statement> </datasource> <drivers> <driver name="postgresql" module="org.postgresql"> <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class> </driver> </drivers>
В database.properties установите hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect, hibernate.connection.datasource=jboss/datasources/PostgreDS .
# Oracle
Создайте модуль com.oraclejdbc.
Структура модуля:
modules \ - com \ - oraclejdbc \ - main \ - module.xml - ojdbc6_g.jar
module.xml:
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.0" name="com.oraclejdbc"> <resources> <resource-root path="ojdbc6_g.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
Добавьте секцию источника данных и драйвера в standalone.xml:
<datasource jndi-name="java:jboss/datasources/OracleDS" pool-name="OracleDS"> <connection-url>jdbc:oracle:thin:@localhost:1521:XE</connection-url> <driver>oracle</driver> <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation> <pool> <min-pool-size>10</min-pool-size> <max-pool-size>100</max-pool-size> <prefill>true</prefill> </pool> <security> <user-name>wfe</user-name> <password>wfe</password> </security> <validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/> <validate-on-match>true</validate-on-match> <background-validation>false</background-validation> <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/> </validation> <timeout> <blocking-timeout-millis>5000</blocking-timeout-millis> <idle-timeout-minutes>5</idle-timeout-minutes> </timeout> <statement> <prepared-statement-cache-size>32</prepared-statement-cache-size> <share-prepared-statements>true</share-prepared-statements> </statement> </datasource> <drivers> <driver name="oracle" module="com.oraclejdbc"> <xa-datasource-class>oracle.jdbc.driver.OracleDriver</xa-datasource-class> </driver> </drivers>
В database.properties установите hibernate.dialect=org.hibernate.dialect.OracleDialect, hibernate.connection.datasource=jboss/datasources/OracleDS .
Для работы с версией XE в standalone.conf.bat установите переменные окружения.
set JAVA_OPTS=%JAVA_OPTS% -Duser.language=en -Duser.country=us
# Tibero
Создайте модуль com.tmax.tibero.
Структура модуля:
modules \ - com \ - tmax \ - tibero \ - main \ - module.xml - tibero5-jdbc.jar
module.xml:
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.0" name="com.tmax.tibero"> <resources> <resource-root path="tibero5-jdbc.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
Добавьте секцию источника данных и драйвера в standalone.xml:
<datasource jndi-name="java:jboss/datasources/TiberoDS" pool-name="TiberoDS"> <connection-url>jdbc:tibero:thin:@localhost:8629:tibero</connection-url> <driver>tibero</driver> <security> <user-name>wfe</user-name> <password>wfe</password> </security> <validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/> <validate-on-match>true</validate-on-match> <background-validation>false</background-validation> <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/> </validation> <timeout> <blocking-timeout-millis>5000</blocking-timeout-millis> <idle-timeout-minutes>5</idle-timeout-minutes> </timeout> <statement> <prepared-statement-cache-size>32</prepared-statement-cache-size> <share-prepared-statements>true</share-prepared-statements> </statement> </datasource> <drivers> <driver name="tibero" module="com.tmax.tibero"> <xa-datasource-class>com.tmax.tibero.jdbc.TbDriver</xa-datasource-class> </driver> </drivers>
В database.properties установите hibernate.dialect=org.hibernate.dialect.OracleDialect, hibernate.connection.datasource=jboss/datasources/TiberoDS .
# Derby
Создайте модуль org.apache.derby.
Структура модуля:
modules \ - org \ - apache \ - derby \ - main \ - module.xml - derby.jar
module.xml:
<module xmlns="urn:jboss:module:1.0" name="org.apache.derby"> <resources> <resource-root path="derby.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> <module name="javax.servlet.api" optional="true"/> </dependencies> </module>
Добавьте секцию источника данных и драйвера в standalone.xml:
<datasource jndi-name="java:jboss/datasources/DerbyDS" pool-name="DerbyDS"> <connection-url>jdbc:derby:runawfe;restoreFrom=~/backupdirectory/runawfe</connection-url> <driver>derby</driver> <security> <user-name>wfe</user-name> <password>wfe</password> </security> </datasource> <drivers> <driver name="derby" module="org.apache.derby"/> </drivers>
В database.properties установите hibernate.dialect=org.hibernate.dialect.DerbyDialect, hibernate.connection.datasource=jboss/datasources/DerbyDS .
# SQL Server
Создайте модуль net.sourceforge.jtds.
Структура модуля:
modules \ - net \ - sourceforge \ - jtds \ - main \ - module.xml - jtds-1.2.7.jar
module.xml:
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.0" name="net.sourceforge.jtds"> <resources> <resource-root path="jtds-1.2.7.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
Добавьте секцию источника данных и драйвера в standalone.xml:
<datasource jndi-name="java:jboss/datasources/RunawfeDS" pool-name="RunawfeDS"> <connection-url>jdbc:jtds:sqlserver://localhost;DatabaseName=runawfe</connection-url> <driver>mssql</driver> <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation> <pool> <min-pool-size>5</min-pool-size> <max-pool-size>30</max-pool-size> </pool> <security> <user-name>runawfe</user-name> <password>wfe</password> </security> <validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker"/> <validate-on-match>true</validate-on-match> <background-validation>false</background-validation> </validation> </datasource> <driver name="mssql" module="net.sourceforge.jtds"> <driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class> <xa-datasource-class>net.sourceforge.jtds.jdbcx.JtdsDataSource</xa-datasource-class> </driver>
В database.properties установите hibernate.dialect=org.hibernate.dialect.SQLServerDialect (или ru.runa.wfe.commons.hibernate.SqlServerUnicodeDialect), hibernate.connection.datasource=jboss/datasources/RunawfeDS .
# MySQL
Замечание: Вместо MySQL для RunaWFE лучше использовать PostgreSQL. RunaWFE работает с MySQL, но в настоящее время мы не предоставляем патчи обновления системы для этой БД. Если вы все-таки используете RunaWFE с MySQL, то обновление БД можно произвести вручную (но это не легко). Подробнее можно посмотреть здесь.
Создайте модуль com.mysql со структурой:
modules \ - com \ - mysql \ - main \ - module.xml - mysql-connector-java-5.1.7-bin.jar
module.xml:
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.0" name="com.mysql"> <resources> <resource-root path="mysql-connector-java-5.1.7-bin.jar" /> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
Добавьте в standalone.xml:
<datasource jndi-name="java:jboss/datasources/RunawfeDS" pool-name="RunawfeDS"> <connection-url>jdbc:mysql://localhost:3306/wfe?UseUnicode=true&characterEncoding=UTF-8&useOldAliasMetadataBehavior=true</connection-url> <driver>mysql</driver> <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation> <pool> <min-pool-size>10</min-pool-size> <max-pool-size>100</max-pool-size> <prefill>true</prefill> </pool> <security> <user-name>root</user-name> </security> <validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/> <validate-on-match>true</validate-on-match> <background-validation>false</background-validation> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/> </validation> <statement> <prepared-statement-cache-size>32</prepared-statement-cache-size> <share-prepared-statements>true</share-prepared-statements> </statement> </datasource> <drivers> <driver name="mysql" module="com.mysql"> <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class> </driver> </drivers>
В файле database.properties установите hibernate.dialect=org.hibernate.dialect.MySQL5Dialect, hibernate.connection.datasource=jboss/datasources/RunawfeDS .
# Настройки производительности
Требования к аппаратным ресурсам сильно зависят от числа одновременно работающих пользователей и числа выполняющихся экземпляров процессов. Но в любом случае необходимо настраивать параметры JVM под существующие аппаратные ресурсы.
# Настройки JVM
Используйте файл run.bat (в Windows) или run.sh в Linux. В нем измените параметры JVM (JAVA_OPTS).
Например, в run.bat отредактируйте строку:
set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m
Для большинства случаев можно:
- Выделить максимальное кол-во памяти процессу (-Xmx8GB)
- Установить размер памяти (perm gen) в 256M (-XX:MaxPermSize:256m)
- Убедиться что используется опция "server" VM (-server).
Чтобы не использовался файл подкачки, удостоверьтесь, что размер памяти, указанный с помощью опции "-Xmx", не превышает размер физической памяти ОЗУ. Также стоит зарезервировать некий запас памяти для ОС и других приложений.
Если выделить процессу менее 1Гб ОЗУ, то настройка других параметров особой пользы не принесет. В ином случае остальные параметры могут сильно повлиять на производительность системы.
Пример конфигурации (32-бит, dual-core per CPU, 4GB ОЗУ):
-server -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+CMSClassUnloadingEnabled -Xms512m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintConcurrentLocks -XX:MaxPermSize=256m
Примеры конфигурации на многопроцессорном сервере (64-бит ОС, JVM; multi-CPU, 8GB):
-server -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -Xms1g -Xmx4g -Xss256k -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintConcurrentLocks
Опции для включения параллельного сборщика мусора:
-XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+ParallelRefProcEnabled -XX:NewRatio=5 -XX:+CMSScavengeBeforeRemark
Опции для анализа исполнения сборщика мусора и его настройки:
-XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:"../server/default/log/gc.log"
# Получение дампов памяти и стека JVM для анализа производительности
# Используя утилиты JDK
Перейдите в директорию "${JDK}\bin\".
Для получения дампа памяти выполните команду:
jmap -dump:format=b,file=heap.bin pid, где - pid - идентификатор процесса.
Для получения дампа стека JVM выполните команду:
jstack pid, где - pid - идентификатор процесса.
При возникновении проблем (например, "Недостаточно памяти для выполнения команды"), рекомендуем воспользоваться любым из нижеописанных способов.
# Используя JavaMelody
В 4-й версии она настроена в дистрибутиве и доступна по ссылке http://localhost:8080/wfe/monitoring. Падение производительности может составлять до 30%.
Адрес проекта: http://code.google.com/p/javamelody/
С помощью данного инструмента можно не только получать дампы, но и анализировать поведение системы. Дополнительная нагрузка в штатном режиме незначительна, что позволяет использовать данный инструмент в режиме эксплуатации.
Дамп стека потоков можно получить: Threads -> Details -> Dump threads as text .
Дамп памяти JVM можно получить: Generate a heap dump .
Отключить javamelody можно:
- закомментировав строку hibernate.jdbc.factory_class=net.bull.javamelody.HibernateBatcherFactory в database.properties
- в web.xml закомментировать или удалить фрагмент:
<filter> <filter-name>monitoring</filter-name> <filter-class>net.bull.javamelody.MonitoringFilter</filter-class> </filter> <filter-mapping> <filter-name>monitoring</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>net.bull.javamelody.SessionListener</listener-class> </listener>
# Используя VisualVM
Адрес проекта: visualvm.java.net .
Если вы запускаете VisualVM на том же компьютере, где запущен WFE, и VisualVM обнаружил процесс WFE, то дополнительных настроек производить не нужно.
Если же вы запускаете VisualVM на другом компьютере или VisualVM не смог обнаружить процесс WFE (это обычная ситуация, если эти программы запущены под разными пользователями), то нужно произвести настройки: в run.bat (Windows) или run.sh (Linux) нужно добавить параметры в JAVA_OPTS. Например так:
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=6767 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
После этого убедиться, что порт 6767 не закрыт с помощью Firewall.
VisualVM соединится путем JMX Connection.
После успешного соединения по правой кнопке мыши на выбранном процессе будут доступны элементы меню Thread Dump, Heap Dump. Также с помощью этого инструмента можно понаблюдать за процессом, но не советуем оставлять надолго соединение активным в режиме эксплуатации, т.к. происходит постоянная пересылка данных JVM в VisualVM.
# Настройки среды для узлов-сообщений
# В Jboss версии 4
Используется JbossMessaging, все возможности настройки можно узнать из оригинала http://www.jboss.org/jbossmessaging.
Основные настройки в файле runawfe.ear!/runawfe-jms-service.xml:
- параметр /server/mbean/attribute[name="DefaultMaxDeliveryAttempts"] максимальное кол-во попыток отправки сообщений при отсутствии получателя
- параметр /server/mbean/attribute[name="DefaultRedeliveryDelay"] задержка повторной отправки сообщения при отсутствии получателя.
При параметрах DefaultMaxDeliveryAttempts=43200, DefaultRedeliveryDelay=60000 время жизни сообщения будет 1 месяц, задержка между обработкой (в случае неактивного узла "получить сообщение") 1 мин.
# В wildfly/Jboss версии 7
При использовании HornetMQ все возможности настройки можно узнать из оригинала http://www.jboss.org/hornetq/docs.
# Другие настройки
# Длительность активной пользовательской сессии
Для изменения длительности активной пользовательской сессии в браузере по умолчанию (30 минут) в ${RunaWFE}/server/default/deploy/wfe.war!/WEB-INF/web.xml добавьте в элемент <web-app>:
<session-config> <session-timeout>N</session-timeout> </session-config>
где N - количество минут.
# Оповещение пользователей по электронной почте
В RunaWFE есть возможность настроить оповещение пользователей о поступивших и просроченных заданиях.
Для этого необходимо определить конфигурацию отправки email-сообщения.
Содержимое email.config.xml (формат конфигурации аналогичен обработчику):
<?xml version="1.0" encoding="UTF-8"?> <email-config> <common> <param name="throwErrorOnFailure" value="true"/> </common> <headers> <param name="From" value="SMTPbot@robots.runa.ru"/> <param name="To" value="${task.executor.email}"/> </headers> <connection> <param name="mail.transport.protocol" value="smtp"/> <param name="mail.host" value="172.16.100.7"/> <param name="mail.smtp.port" value="25"/> <param name="mail.smtp.auth" value="true"/> <param name="mail.user" value="username"/> <param name="mail.password" value="password"/> </connection> <message> <param name="bodyInlined" value="false"/> <body> <![CDATA[ Process - ${task.process.deployment.name}, Task - ${task.name} ]]> </body> </message> </email-config>
Для отправки сообщений о поступивших заданиях необходимо в wfe.custom.system.context.xml определить ru.runa.wfe.task.EmailTaskNotifier.
Пример настройки:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:context="http://www.springframework.org/schema/context" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"> <bean class="ru.runa.wfe.task.EmailTaskNotifier"> <property name="configLocation" value="email.config.xml" /> <property name="onlyIfTaskActorEmailDefined" value="true" /> <property name="includeProcessNameFilter"> <list> <value>process1</value> <value>process2</value> </list> </property> <property name="excludeEmailsFilter"> <list> <value>ignore@sample.org</value> <value>*@mail.ru</value> </list> </property> </bean> </beans>
Для отправки сообщений о просроченных заданиях необходимо в wfe.custom.system.context.xml определить job ru.runa.wfe.job.impl.ExpiredTasksNotifier.
Пример настройки:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:context="http://www.springframework.org/schema/context" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"> <bean id="expiredTasksNotifier" class="ru.runa.wfe.job.impl.ExpiredTasksNotifier"> <property name="scheduledTimerTaskPeriod" value="60000" /> <property name="configLocation" value="expired.email.config.xml" /> <property name="onlyIfTaskActorEmailDefined" value="true" /> <property name="includeProcessNameFilter"> <list> <value>process1</value> <value>process2</value> </list> </property> <property name="excludeEmailsFilter"> <list> <value>ignore@sample.org</value> <value>*@mail.ru</value> </list> </property> </bean> <task:scheduler id="expiredTasksNotifierScheduler" /> <task:scheduled-tasks scheduler="expiredTasksNotifierScheduler"> <task:scheduled ref="expiredTasksNotifier" method="execute" fixed-delay="60000" /> </task:scheduled-tasks> </beans>
где:
- configLocation (обязательный) - путь к конфигурации отправки email сообщения
- enabled (по умолчанию = true) - задействовать уведомления
- onlyIfTaskActorEmailDefined (по умолчанию = false) - посылать уведомления по заданиям, назначенным только пользователям с установленным адресом электронной почты
- includeEmailsFilter 4.3.0+ - список email для включения в рассылку, допускаются подстановочные символы
- excludeEmailsFilter4.3.0+ - список email для исключения из рассылки, допускаются подстановочные символы
- includeProcessNameFilter 4.3.0+ - список названий БП для включения в рассылку, допускаются подстановочные символы
- excludeProcessNameFilter 4.3.0+ - список названий БП исключения из рассылки, допускаются подстановочные символы.
Подстановочные символы: * - любой набор символов, ? - любой символ.
# Что можно использовать в теле сообщения
В теле сообщения можно использовать все переменные БП по скриптовому названию.
В теле сообщения также доступны контекстные переменные:
Интерактивная форма (${interaction}, ru.runa.wfe.form.Interaction)
Использовать проверку в браузере ${interaction.useJSValidation?string("да", "нет")} Список обязательных переменных ${interaction.requiredVariableNames} Код формы ${interaction.formData} (byte[])
Получатели уведомления (${emails}, java.lang.String)
Формируется из корректных email пользователей, на которых назначается задание (их может быть несколько, если задание назначается на группу).
Задание (${task}, ru.runa.wfe.task.Task)
ID ${task.id} ID задания ${task.nodeId} Название ${task.name} Описание ${task.description} Название роли ${task.swimlane.name} Исполнитель ${task.executor.label} Дата создания ${task.createDate?datetime} Срок выполнения (deadline) ${task.deadlineDate?datetime}
Экземпляр процесса (${task.process}, ru.runa.wfe.execution.Process)
ID ${task.process.id} Дата запуска ${task.process.startDate?datetime} Дата завершения ${task.process.endDate?datetime} (только для асинхронных заданий) Иерархия подпроцессов ${task.process.hierarchyIds}
Определение процесса (${task.process.deployment}, ru.runa.wfe.definition.Deployment)
ID ${task.process.deployment.id} Версия ${task.process.deployment.version} Название ${task.process.deployment.name} Описание ${task.process.deployment.description} Категория ${task.process.deployment.category} Загружено в систему ${task.process.deployment.createDate?datetime}
# Логирование HTTP запросов
# В Jboss версии 7
Поместить Файл:Jboss-web.xml в runawfe.ear!/wfe-web-x.y.z.war!/META-INF (переменовать в jboss-web.xml).
# Логирование
Настройки по умолчанию в системе обеспечивают следующее:
- boot.log – информация о загрузке
- server.log.* – основные логи, генерируемые во время работы системы.
Настраивается в файле standalone.xml по документации https://docs.jboss.org/author/display/AS71/Logging+Configuration .
# Настройка логирования с ограничением по размеру
Для включения возможности нужно настроить https://docs.jboss.org/author/display/AS71/Logging+Configuration#LoggingConfiguration-sizerotatingfilehandler .
Пример для ограничения директории с логами в 1Гб:
<size-rotating-file-handler name="FILE"> <level name="DEBUG"/> <formatter> <pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/> </formatter> <file relative-to="jboss.server.log.dir" path="server.log"/> <rotate-size value="100m"/> <max-backup-index value="10"/> <append value="true"/> </size-rotating-file-handler>
# Настройка архивирования логов
Настраивается внешними средствами ОС.
В Linux можно использовать crontab, в Windows планировщик задач.
Делается исполняемый файл (sh или bat), в котором старые логи перемещаются в архивную папку с архивированием.
Пример файла для linux:
#!/bin/bash find /opt/jboss/standalone/log/ -iname "server.log.*" -not -name "*.gz" -mtime +7 -exec gzip "{}" \; mv /opt/jboss/standalone/log/*gz /opt/jboss/standalone/log/old/