Значения кэша в Java EE - PullRequest
       83

Значения кэша в Java EE

1 голос
/ 14 июля 2011

Я создаю простое приложение для делегирования сообщений. Сообщения отправляются на обоих концах через JMS. Я использую MDB для обработки входящих сообщений, их преобразования и отправки в целевую очередь. К сожалению, одни и те же сообщения могут быть отправлены во входящую очередь более одного раза, но не допускается пересылка дубликатов.

Так, каков лучший способ достигнуть этого?

Поскольку во входящей очереди может быть несколько MDB, которые прослушивают входящую очередь, необходим один кэш, в котором я могу хранить уникальные идентификаторы входящих сообщений не менее часа. Как получить доступ к этому кешу? Через одноэлементный / статический класс (я использую Java EE 5 и, следовательно, у меня нет одноэлементной аннотации)?

Кроме того, я думаю, что все операции должны быть синхронизированы, верно? Это слишком сильно вредит производительности?

1 Ответ

2 голосов
/ 15 июля 2011

@ Инго: ты в порядке с решением для базы данных.Для этого вы можете использовать полноценный сервер БД или простое решение Apache Derby. Если это так, у вас может быть простая таблица, в которой вы можете хранить уникальный UId сообщения и проверять его на уникальность .... Это решение будет иметь следующие преимущества:

  1. Простой код
  2. Нет необходимости во временном кэше (1 час).Вы можете проверить уникальность сообщения навсегда.
  3. Постоянная запись того, какие сообщения поступили.
  4. Нет необходимости в дорогостоящей синхронизации, вы можете полагаться на уровень изоляции БД для обеспечения согласованности.
  5. централизованное решение для многих возможных приложений.
...