Информация об изменениях

Сообщение Синхронизация кода в контексте tomcat'а от 11.05.2021 8:21

Изменено 11.05.2021 8:24 teapot2

Синхронизация кода в контексте tomcat'а
Друзья, подскажите такую вещь.

Есть сервер tomcat, есть сайт на нем, все это legacy code. [Псевдо]параллельное исполнение кода в нем реализовано через установку атрибутов и листенеры. Есть некий метод, который выполняет подготовительную работу (загружает в БД данные из внешнего источника) и потом выставляет разные атрибуты, в результате чего запускаются разные обработчики этих данных. Как я понимаю, порядок вызова обработчиков в этом случае не гарантирован и мы можем считать, что они выполняются параллельно в разных потоках. Но теперь потребовалось внести в этот беспорядок немного синхронности. Необходимо сделать так, чтобы этот самый "головной метод" (который вызывает обработчики посредством установки атрибутов) ждал завершения отработки некоторого из вызываемых им обработчиков, затем вносил определенные изменения в данные, затем вызывал другой/другие обработчики. Примерно так:

// Код работает в контексте сервлета, активизируемого через HTTP-запрос

// Здесь мы загружаем данные из внешнего источника
...

// Вызываем обработчик-1
servletContext.setAttribute("Processor1", "1");

// А здесь надо ждать, пока листенер атрибута Processor1 не завершит работу
// Разумеется, необходимо предусмотреть таймаут
...

// Далее мы выполняем манипуляции над загруженными данными
... 

// Вызываем обработчик-2
servletContext.setAttribute("Processor2", "1");


Как нынче принято выполнять в Java подобную синхронизацию? Какие объекты Java лучше использовать?
Синхронизация кода в контексте tomcat'а
Друзья, подскажите такую вещь.

Есть сервер tomcat, есть хитрозаточенный сервер приложений на нем, все это legacy code. [Псевдо]параллельное исполнение кода в нем реализовано через установку атрибутов и листенеры. Есть некий метод, который выполняет подготовительную работу (загружает в БД данные из внешнего источника) и потом выставляет разные атрибуты, в результате чего запускаются разные обработчики этих данных. Как я понимаю, порядок вызова обработчиков в этом случае не гарантирован и мы можем считать, что они выполняются параллельно в разных потоках. Но теперь потребовалось внести в этот беспорядок немного синхронности. Необходимо сделать так, чтобы этот самый "головной метод" (который вызывает обработчики посредством установки атрибутов) ждал завершения отработки некоторого из вызываемых им обработчиков, затем вносил определенные изменения в данные, затем вызывал другой/другие обработчики. Примерно так:

// Код работает в контексте сервлета, активизируемого через HTTP-запрос

// Здесь мы загружаем данные из внешнего источника
...

// Вызываем обработчик-1
servletContext.setAttribute("Processor1", "1");

// А здесь надо ждать, пока листенер атрибута Processor1 не завершит работу
// Разумеется, необходимо предусмотреть таймаут
...

// Далее мы выполняем манипуляции над загруженными данными
... 

// Вызываем обработчик-2
servletContext.setAttribute("Processor2", "1");


Как нынче принято выполнять в Java подобную синхронизацию? Какие объекты Java лучше использовать?