уникальный идентификатор в потоке java - PullRequest
0 голосов
/ 19 января 2012

Мое приложение использует компонент ведения журнала, который должен отслеживать уникальный идентификатор для каждого вызова.

Моя отправная точка - MDB, который, очевидно, инициирует серию вызовов методов для нескольких классов.Каждый класс создает новый объект logger, похожий на log4j, и использует его для записи событий в базу данных.И для каждого создаваемого объекта logger ему присваивается уникальный идентификатор.Этот идентификатор должен следовать за потоком до тех пор, пока не будут возвращены все последующие вызовы, и метод onMessage в моем MDB не завершится.

Проблема заключается в том, что во время обработки одного JmsMessage MDB получает другое сообщение, и мои идентификаторы получаютперепутал.

Я уже некоторое время стучу головой о стол и думаю, что ответ прямо передо мной, но у вас есть какие-нибудь идеи?Как я могу убедиться, что один «процесс» может войти в систему, используя свой собственный идентификатор, даже если другой запущен до того, как завершится первый?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 19 января 2012

Есть ли причина, по которой вы не можете использовать Message.getJMSMessageID()?

Если есть, AtomicLong.incrementAndGet() должно быть всем, что нужно.Сохраните один статический экземпляр, и в методе onMessage() MDB получите идентификатор и сохраняйте его, пока обрабатывается сообщение (возможно, в ThreadLocal).

1 голос
/ 19 января 2012

Обычно вы хотите использовать «дружественное» имя

String name = Thread.currentThread().getName();

Однако это может быть не уникальным или не значащим, в этом случае вы можете использовать уникальный идентификатор.

int id = Thread.currentThread().getId();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...