Я нуждаюсь в пути к исключительно и постоянно определяю экземпляр JVM из кода Java, работающего в той JVM.
Таким образом, если у меня есть два JVMs, работающие одновременно на той же машине, каждый различим. Это также различимо от выполнения JVMs на других машинах и от будущего выполнения на той же машине, даже если идентификатор процесса снова используется.
Я полагаю, что мог реализовать что-то вроде этого путем идентификации времени начала, машина MAC и идентификатор процесса, и объединения их в некотором роде. Я задаюсь вопросом, существует ли некоторый стандартный способ достигнуть этого.
Обновление: Я вижу, что все рекомендовали UUID для всей сессии. Это походит на хорошую идею хотя возможно немного слишком тяжелый. Вот моя проблема хотя: Я хочу использовать идентификатор JVM для создания нескольких уникальных идентификаторов в каждом выполнении JVM, которые так или иначе включают экземпляр JVM.
Мое понимание - то, что Вы не должны действительно смешивать другие числа в UUID, потому что уникальность больше не гарантируется. Альтернатива должна превратить UUID в строку и объединить его в цепочку, но затем это становится слишком длинным. Какие-либо идеи преодолеть это?
Вы можете создать UUID при запуске приложения и использовать это для идентификации.
UUID UniqueID = UUID.randomUUID ();
Если UUID слишком тяжеловесны, вам нужно пересмотреть, что вы подразумеваете под "уникально и постоянно".
Например, если вы хотите ограничить понятие "уникальный и постоянный" тем, что оно означает уникальный для машин в данной сети и постоянный в течение следующих (скажем) 10 лет, вы можете использовать тот же подход, что и при генерации UUID, но с меньшим количеством битов.
В качестве альтернативы, если создать службу генерации уникальных идентификаторов с постоянным хранилищем и привязать понятие "постоянный" к времени жизни этого хранилища, то уникальные идентификаторы могут быть просто увеличивающейся последовательностью целых чисел.
Почему бы не использовать экземпляр удержания Singleton для java.rmi.server.UID
?
Вы можете генерировать UUID
в начале вашей программы и использовать его во время работы программы.
UUID id = UUID.randomUUID();
Помимо метода randomUUID()
существуют и другие методы генерации UUID
ов, которые могут лучше подойти для ваших нужд, для получения дополнительной информации смотрите документацию API класса java.util.UUID
.
Я не знаю стандартной библиотеки для этого, но вы можете зайти далеко самостоятельно со временем начала (сделайте некоторые вычисления с новыми java.util.Date() и System.currentMillis), путем к установке и путем к JVM (подумайте о том, чтобы просто сцепить все System.getProperties()).
У вас есть центральный сервер, с которым они могут общаться? Затем uuid может быть восстановлен с центрального сервера.