Обработка исключений JVM во время инициализации - PullRequest
0 голосов
/ 05 января 2012

У меня один Java-процесс запускает другой Java-процесс с включенной поддержкой JMX следующим образом

java -Dcom.sun.management.jmxremote.port=8088 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -jar app.jar

Моя проблема в том, что если используется порт 8088, jvm порожденного процесса выдает BindException иJVM выйдет нормально.Я не могу сообщить об этом процессу, который не был запущен из-за исключения привязки.Как я могу перехватить / обработать исключение BindException, генерируемое JVM, чтобы порожденный процесс мог выполнить System.exit (VALID_ERROR_CODE)?Это исключение происходит даже до того, как какой-либо элемент управления передается пользовательскому коду, поэтому я думаю, что было бы невозможно обработать его в пользовательском коде.

Есть идеи, как справиться с этим вариантом использования?

Ответы [ 2 ]

2 голосов
/ 09 января 2012

Вы должны перенаправить stderr (и, возможно, также stdout) из вашего подпроцесса в родительский процесс или в System.err (System.out).Смотрите https://stackoverflow.com/a/1570269/1137529 для более подробной информации.

0 голосов
/ 09 января 2012

Можно ли проверить, открыт ли порт, перед запуском дочернего процесса?то есть попробуйте прослушать порт, и если ваш сокет выходит из строя, вы знаете, что порт недоступен.Преимущество этого решения в том, что вы можете сгенерировать новый номер порта и продолжать тестирование, пока не найдете открытый порт.Если у вас есть действительный порт, вы можете изменить вызов для запуска дочерней JVM с доступным портом.

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