2012-01-05 4 views
0

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

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

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

Любая идея как справиться с этим прецедентом?

+1

Записывается ли это на stderr (System.err)? Если это так, вы можете запустить процесс запуска и сообщить об ошибке. – Bill

+1

Если я правильно помню, из-за этого BindException ваш jvm не должен начинаться на первом месте, то зачем вам нужно звонить System.exit (...)? – kosa

ответ

2

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

0

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

Смежные вопросы