Можете ли вы программно перезапустить приложение j2ee?
Вопрос
Кто-нибудь знает, можно ли перезапустить приложение J2EE (из приложения)?Если да, то как?
Я хотел бы иметь возможность сделать это независимо от сервера приложений, если это возможно.
Приложение будет запускаться на множестве разных серверов приложений — по сути, на том, что предпочитает клиент.
Если это невозможно сделать независимо от сервера приложений, то, вероятно, для моих целей это не стоит делать.Я всегда могу просто отобразить сообщение, информирующее пользователя о том, что ему нужно будет перезапустить приложение вручную.
Решение
Я бы предположил, что вы вряд ли найдете способ, независимый от сервера приложений.И хотя я не претендую на знание ваших требований, я могу поставить под сомнение дизайн, который требует перезапуска приложения, кроме установщика, развертывающего новую версию.Наконец, я бы предположил, что для каких-либо нетривиальных целей «любой» сервер приложений не подойдет.У вас должен быть список поддерживаемых серверов и версий приложений, задокументированный в примечаниях к выпуску, чтобы вы могли протестировать их все и не беспокоиться о поддержке клиентов на несоответствующем сервере/версии.По опыту, между, например, Apache Tomcat и BEA WebLogic всегда есть тонкие различия, и эти различия часто недокументированы и их трудно определить, пока вы не столкнетесь с ними.
Другие советы
Большинство серверов приложений предоставляют интерфейс JMX, поэтому вы можете его вызвать.
Я бы предложил использовать servicewrapper для управления сервером приложений, а затем использовать его методы API для запроса перезапуска службы.Это потребует некоторой настройки, и трудно понять, будет ли это работать в вашей конкретной среде, но это единственное известное мне решение, которое хотя бы в достаточной степени совместимо с несколькими серверами.