Есть странная проблема Glassfish здесь.Вот как его воспроизвести:
(1) Установите Glassfish v3
(2) Запустите домен по умолчанию:
$GLASSFISH_HOME/bin/asadmin start-domain domain1
(3) Измените порт администратора (вам потребуетсячтобы ввести admin uid и пароль, в нашем скрипте мы используем параметры -u & -W):
$GLASSFISH_HOME/bin/asadmin set configs.config.server-config.network-config.network-listeners.network-listener.admin-listener.port=34848
(4) Завершить работу домена:
$GLASSFISH_HOME/bin/asadmin stop-domain domain1
Вы будетевижу, это не работает.Вы получаете:
CLI306 Warning - server is not running.
Command stop-domain executed successfully.
Но ваш процесс Glassfish все еще выполняется.Хуже того, когда вы попытаетесь запустить процесс, вы получите предупреждение о том, что некоторые из ваших портов уже используются.Конечно, старый процесс все еще имеет их!Ваш единственный выход - killall -9 java
Хотя некоторые изменения конфигурации являются динамическими, кажется, что это не так, но остановка домена предполагает, что является динамической и использует новый порт, чтобы попробоватьи выполните команду.
Возможные решения:
(1) Использовать sed
для domain.xml
- не хотелось бы, так как это сложно и рискованно просматривать XML-код.Я видел, как Glassfish изменил порядок атрибутов в этом файле, поэтому мы не можем просто использовать sed для port="4848"
(2) Использовать установщик со сценарием, а не zip-файл и передавать параметры программе установки в качестве ответафайл - это проблематично для наших сценариев установки, которые должны быть слишком мощными.
(3) Использовать пользовательский созданный zip-файл архива установки Glassfish с уже измененным доменом. xml - не вариант, так как порт, который мы устанавливаем, можетизменения в будущем.
Это почти определение углового случая, но мы должны его решить.Сейчас мы собираемся использовать sed domain.xml, но было бы неплохо узнать, есть ли способ, который возможен через CLI.