Задача: У меня есть автономное приложение Java (в дальнейшем называемое «агентом»), которое работает как служба на внутренних серверах компании. Он действует как удаленный агент для некоторых центральных серверов. По мере развертывания агента в других местах управление ими становится все более сложным. В частности: толкание обновлений является болезненным, потому что это довольно ручной процесс, и получить доступ к журналам и другой информации о средах, где работают агенты, является проблематичным, что затрудняет отладку. Обсуждаемые серверы безгласны и без внимания, что означает, что это должен быть полностью автоматизированный процесс без ручного вмешательства, поэтому Java Web Start не является жизнеспособным решением.Как сделать самообновление Java-приложения?
Предлагаемое решение: Периодически создавайте телефонный телефон агента (на центральные серверы) для предоставления статуса агента и проверки обновлений.
Я открыт для других предлагаемых решений проблемы, но у меня уже есть рабочий прототип идеи «статуса и самообновления», на что этот вопрос сосредоточен.
Что я надумал - это фактически отдельный проект, который действует как обертка для агента. Обертка периодически вызывает центральный сервер через HTTP, чтобы проверить обновленную версию агента. Найдя обновление, он загружает новую версию, завершает работу агента и запускает новую. Если это кажется странным или обходным решением, вот некоторое другие соображения/ограничение следует отметить:
- Когда оболочка получает новую версию агента, может быть новым зависимости JAR, то есть изменения пути класса, что я, вероятно, хочу создать отдельный Java-процесс вместо того, чтобы возиться с ClassLoaders и подвергать риску утечку памяти постоянного поколения, что потребует ручного вмешательства - именно то, от чего я пытаюсь убежать. Вот почему я закончил с отдельным процессом «обертки» для управления обновлениями агента в моем прототипе.
- Некоторые серверы, на которых развертываются агенты, ограничены ресурсами, поэтому любое решение должно быть низким при использовании ЦП и памяти. Это заставляет меня хотеть решение, которое не связано с разворачиванием новой JVM и является ударом против отдельного процесса обертки.
- Агент уже развернут как на серверах Windows, так и на RHEL, поэтому решение должно быть межплатформенным, хотя у меня не будет проблемы с дублированием разумного объема процесса в пакетных и сценариях bash, чтобы добиться успеха.
Вопрос: Как уже говорилось, я хочу знать, как сделать самообновлению Java приложение. В частности, существуют ли какие-либо рамки/библиотеки, которые помогут мне в этом? Может ли кто-нибудь с опытом работы в этой области дать мне несколько указателей?
http://stackoverflow.com/questions/305461/automatic-updates-of-java-desktop-application –
См. Примеры Jenkins: https://wiki.jenkins-ci.org/display/JENKINS/Distributed+builds # Distributedbuilds-LaunchslaveagentviaJavaWebStart –
Ваше решение не позволит вам обновить оболочку, верно? – Miquel