Должны ли классы JavaDelegate для Camunda BPM быть потокобезопасными?

Главный вопрос касается полей статический и экземпляров одиночка (для конфигов и т. д.) - экземпляры один процесс выполняются в разных потоках, как обычные запросы сервлетов?

Если посмотреть глубже - запускается ли разные@ProcessApplication в одной JVM и увидит ли те же синглтоны? Я так не думаю. Я точно знаю, что их классы не видят друг друга и могут иметь одинаковые имена (из-за разных загрузчиков классов?)

Не нашли какой-либо значимой информации по этим важным темам о Камунде, будем благодарны за ваши ответы.

Пожалуйста, добавьте больше описания и иллюстраций.

Lho Ben 08.12.2018 20:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
10
1
1 270
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У меня был тот же вопрос для одного из наших сценариев, и я прочитал их Javadoc, как упоминалось здесь для контейнера сервлетов. Извлечение Javadoc,

Invocation Semantics

When the {@link #execute(java.util.concurrent.Callable)} method is invoked, the servlet process application modifies the context classloader of the current Thread to the classloader that loaded the application-provided subclass of this class. This allows,

  • the process engine to resolve {@link JavaDelegate} implementations using the classloader of the process application

Это в значительной степени объясняет все, что вы хотите знать, поскольку поведение очень похоже на то, как работает веб-контейнер. Если вы хотите знать, как ведут себя другие реализации контейнера, вы можете проверить соответствующие Javadocs классы в этом пакете.


Чтобы ответить на ваш вопрос:

да. Безопасность потоков требуется для общих ресурсов, к которым JavaDelegate обращается в одном и том же приложении процесса. Согласно документация (см. Ниже) они создают новый экземпляр делегата каждый раз, когда задача будет выполняться.

Note!

Each time a delegation class referencing activity is executed, a separate instance of this class will be created. This means that each time an activity is executed there will be used another instance of the class to call execute(DelegateExecution).

Следовательно, в любое время может быть много активных экземпляров делегата из-за многократного вызова Process Definitions. Итак, если они обращаются к общему ресурсу, то они должны быть синхронизированы (потокобезопасны), потому что эти общие ресурсы (статический или одиночка) являются локальными для приложения процесса и загружаются соответствующим загрузчиком классов приложения в соответствии с приведенной выше Javadoc Семантика вызова.

Надеюсь это поможет.

Собственно, помимо этого процессы одновременно выполняются исполнителем заданий Камунды (docs.camunda.org/manual/7.6/user-guide/process-engine/…).

chromanoid 10.12.2018 23:34

Другие вопросы по теме