Мы только начинаем строить нашу архитектуру JMS и имеем следующую базовую настройку:
- GLassfish v2.1
- MDB прослушивание темы через фабрику TopicConnection (все на локальном сервере)
Теперь MDB порождает рабочий поток, когда приходит новое сообщение, и хотя у нас есть порядок доставки сообщений, нам нужен механизм синхронизации, чтобы потоки проверяли определенное условие перед одновременной обработкой запроса.
Есть ли способ для этих потоков обмениваться данными? Или есть какие-то другие механизмы (кроме блокировки таблиц / строк в базе данных), которые мы можем использовать для синхронизации?
Заранее спасибо.
Чтобы уточнить, я не создаю свои собственные темы. Как все правильно отметили, контейнер делает это для меня. Позвольте мне помочь объяснить мою дилемму на примере.
- Сообщение A приходит в момент времени t = 0, что «создает» идентификатор данных 1
- Сообщение B достигает t = 0,1, что «обновляет» идентификатор данных 1
Теперь, предполагая, что контейнер порождает 2 рабочих для обработки A & B, и что для создания данных требуется гораздо больше времени, чем для обновления, обновление будет выполняться раньше и не будет иметь никакого эффекта.
Чтобы быть понятнее,
-При обработке сообщения B я бы искал данные с идентификатором 1 при t = 1 (не нашел бы его и, таким образом, закончил, ничего не делая).
-Данный идентификатор 1 будет создан при обработке сообщения А при t = 2.