Necesito una forma de identificar única y permanentemente una instancia de la JVM desde el código Java que se ejecuta en esa JVM.¿Es posible obtener una identificación verdaderamente única para una instancia de JVM en particular?
Es decir, si tengo dos máquinas virtuales de Java se ejecutan al mismo tiempo en la misma máquina, cada uno es distinguible. También se puede distinguir de ejecutar JVM en otras máquinas y de ejecuciones futuras en la misma máquina, incluso si se reutiliza la identificación del proceso.
Calculo que podría implementar algo como esto mediante la identificación de la hora de inicio, la máquina de MAC y el ID del proceso, y la combinación de ellos de alguna manera. Me pregunto si hay alguna forma estándar de lograr esto.
Actualización: veo que todos recomendaron un UUID para toda la sesión. Parece una buena idea, aunque posiblemente sea un poco demasiado pesada. Sin embargo, este es mi problema: quiero usar el ID de JVM para crear múltiples identificadores únicos en cada ejecución de JVM que de alguna manera incorporen la instancia de JVM.
Mi comprensión es que realmente no debería mezclar otros números en un UUID porque la exclusividad ya no está garantizada. Una alternativa es hacer que el UUID se convierta en una cadena y encadenarlo, pero luego se vuelve demasiado largo. Alguna idea sobre superar esto?
Entiendo que desea poder identificar de manera única una instancia de JVM, pero ¿cuál es el problema subyacente que debe resolver con esta información? –
@Thorbjorn: Tengo un sistema distribuido, y necesito 1) Identificar de manera exclusiva los paquetes salientes.2) Mantenerlo 'legible por humanos' para que en los archivos de registro y la información de depuración pueda identificar rápidamente los paquetes que provienen de la misma instancia. – Uri