Можно ли получить действительно уникальный идентификатор для конкретного экземпляра JVM? - PullRequest
14 голосов
/ 14 мая 2010

Мне нужен способ уникальной и постоянной идентификации экземпляра JVM из кода Java, работающего в этой JVM.

То есть, если у меня одновременно работают две JVM на одной машине, каждая из них различима. Он также отличается от запуска JVM на других машинах и от будущих выполнений на той же машине, даже если идентификатор процесса используется повторно.

Я полагаю, что мог бы реализовать что-то подобное, определив время запуска, MAC-адрес компьютера и идентификатор процесса, и каким-то образом комбинируя их. Мне интересно, есть ли какой-нибудь стандартный способ добиться этого.

Обновление : Я вижу, что все рекомендовали UUID для всего сеанса. Это кажется хорошей идеей, хотя, возможно, слишком тяжелым. Вот моя проблема: я хочу использовать идентификатор JVM для создания нескольких уникальных идентификаторов в каждом выполнении JVM, которые каким-то образом включают экземпляр JVM.

Насколько я понимаю, вам не следует смешивать другие числа в UUID, потому что уникальность больше не гарантируется. Альтернатива состоит в том, чтобы превратить UUID в строку и связать ее, но тогда она становится слишком длинной. Есть идеи по преодолению этого?

Ответы [ 5 ]

11 голосов
/ 14 мая 2010

Вы можете сгенерировать UUID в начале вашей программы и использовать ее во время работы программы.

UUID id = UUID.randomUUID();

Помимо метода randomUUID() существуют и другие методы для генерации UUID s, которые могут лучше соответствовать вашим потребностям, для получения дополнительной информации см. Документацию API класса java.util.UUID.

4 голосов
/ 14 мая 2010

Вы можете создать UUID при запуске приложения и использовать его для идентификации.

UUID UniqueID = UUID.randomUUID ();

2 голосов
/ 14 мая 2010

Если UUID слишком тяжелые, вам нужно пересмотреть то, что вы подразумеваете под «уникально и навсегда».

Например, если вы должны ограничить «уникальное и постоянное» значением уникальности для машин в данной сети и постоянным на следующие (скажем) 10 лет, вы могли бы использовать тот же подход, который использовался при генерации UUID, но с меньшим количеством биты.

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

1 голос
/ 15 мая 2010

Я не знаю стандартной библиотеки для этого, но вы можете продвинуться далеко самостоятельно со временем запуска (сделать некоторые вычисления с новыми java.util.Date () и System.currentMillis), путем к установке и путь к JVM (можно просто объединить все System.getProperties ()).

У вас есть центральный сервер, с которым можно общаться? Затем uuid можно получить с центрального сервера.

1 голос
/ 14 мая 2010

Почему бы не использовать экземпляр синглтона java.rmi.server.UID?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...