2013-11-15 2 views
-1

Мне нужно сгенерировать id, с заданным мной правилом генерации. Например:Как сгенерировать идентификатор один за другим, когда нужно переместить jvm

  1. 0x-111-111-PX-2013-11-11-00001

  2. 0x-111-111-PX-2013-11-11-00002

Это легко сделать в одном jvm. Вопрос в том, что мне нужно пересечь jvm.

крест JVM означает генерировать уникальный идентификатор из различных машин

+0

дополнительное описание, необходимое для кого-то, чтобы помочь. Его непонятно, как вы генерируете в настоящее время и как вы хотите продолжить. –

+0

Мне нужно перекрестное jvm .... Что это значит на разных машинах или разных версиях jvm? Вам нужно генерировать уникальный идентификатор с разных машин ????? – dbw

+0

ye, cross jvm означает генерировать уникальный идентификатор от разных машин. Короче говоря, мое приложение может быть развернуто на другом хосте. – MagiX

ответ

1

1) Вы можете использовать базу данных с хранимой процедурой, которая будет генерировать следующий идентификатор, как вы хотите

2) Java приложения (служба) работает только для идентификатора поколения цели доступного через RMI, например

3) Общий файл, который другие приложения Java обновит uing тот же самый алгоритм

+0

да, база данных конечно можно сделать так. , но я хочу знать, как это сделать в области java – MagiX

+0

еще одно приложение java (service), работающее только для цели генерации id, например, RMI –

1

Создание случайного числа или случайной строки (UUID) всегда является проблемой. Даже обычный java.util.Random - not perfect. Вы уже исключили использование баз данных, которые обеспечили бы случайность в JVM.

Это проблема на подобный на вызов, с которой сталкиваются веб-контейнером для генерировать уникальный идентификатор сеанса. Уникальность гарантируется, если задействована только одна JVM. Но в реальном мире это вряд ли так. Типичное веб-приложение развертывается в кластере серверов. На основе идентификатора сеанса балансировщик нагрузки пересылает запросы на соответствующий сервер.

Поскольку уникальность идентификатора сессии не гарантируется через JVM, каждый сервер добавляет уникальный идентификатор (например, .node1) к идентификатору сессии, который гарантирует, что даже если два сервера генерировать тот же идентификатор сессии, уникальность будет сохраненный добавленной строкой.

Расширение это в вашем случае, вы всегда можете поставить JVM конкретный идентификатор в Ид, поэтому сгенерированный идентификатор может выглядеть,

  1. 0x-111-111-PX-2013-11-11 -00001-M1
  2. 0x-111-111-PX-2013-11-11-00001-M2

Вы можете поставить M1/​​M2 в любом месте строки.

Мне не известны никакие компульсии (на идентификаторах), которые могут возникнуть у вас, но это всего лишь мысль.

Смежные вопросы