Тестирование Keystone и Mongoose с шуткой

Если я верю в эту статью , по:

, в которой первый экземпляр пытается открыть прослушивающий сокет на локальном интерфейсе. Если он может открыть сокет, предполагается, что это первый экземпляр приложения, которое будет запущено. Если нет, предполагается, что экземпляр этого приложения уже запущен. Новый экземпляр должен уведомить существующий экземпляр о попытке запуска, а затем выйти. Существующий экземпляр берет верх после получения уведомления и запускает событие слушателю, который обрабатывает действие.

blockquote>

Примечание: Ahe упоминает в комментарии, что с использованием InetAddress.getLocalHost() может быть сложным:

  • он не работает должным образом в DHCP-среде, потому что возвращаемый адрес зависит от того, имеет ли компьютер доступ к сети. Решение заключалось в том, чтобы открыть соединение с InetAddress.getByAddress(new byte[] {127, 0, 0, 1}); Вероятно, связано с ошибкой 4435662 .
blockquote>
  • Я также нашел ошибку 4665037 , которая сообщает, чем ожидаемые результаты getLocalHost: вернуть IP-адрес машины, фактические результаты: return 127.0.0.1.

удивительно, что getLocalHost возвращает 127.0.0.1 в Linux, но не в windows.

blockquote>

Или вы можете использование ManagementFactory объект. Как объяснялось здесь : :

Метод getMonitoredVMs(int processPid) получает в качестве параметра текущий PID приложения и улавливает имя приложения, вызываемое из командной строки, например, приложение было запущено с пути c:\java\app\test.jar, тогда значение переменной «c:\\java\\app\\test.jar». Таким образом, мы поймаем только имя приложения в строке 17 приведенного ниже кода. После этого мы ищем JVM для другого процесса с тем же именем, если мы его нашли, а PID приложения отличается, это означает, что это второй экземпляр приложения.

blockquote>

JNLP предлагает также SingleInstanceListener

0
задан skyboyer 18 March 2019 в 08:05
поделиться