"Стандартный" способ обработки жизненного цикла приложения Java EE

При разработке приложения Java EE я часто сталкивался с "проблемой", чтобы делать что-то, когда приложение запускается, останавливается и т.д. Теперь для Weblogic существует механизм для этого (слушатель жизненного цикла приложения), Но если вы хотите, чтобы ваше приложение было бесплатным от приложения, которое является приложением. сервер, вам нужно найти другое решение. Некоторые рекомендуют использовать сервлет, который загружается при запуске, и "злоупотреблять" init()/destroy().

Другие говорят, что используйте ServletContextListener. Для меня последний звучит лучше всего (согласно java doc для ServletContextListener. К сожалению, сегодня я попробовал JBoss 7, где кажется, что jax-ws webservices инициализируются перед любым другим Servlet, поэтому перед тем, как ServletContextListener получит уведомление.

Короче говоря, я просто столкнулся с некоторыми проблемами, связанными с конкретным сервером приложений, - или есть ли какой-либо "более подходящий", стандартизованный способ Java EE для регистрации вещей, делать что-либо до того, как какой-либо веб-сервис, сервлет, какой бы ни был инициализирован?

Ответ 1

Если ваши веб-службы аннотируются следующим образом

@javax.jws.WebService(...)
public interface YourServiceEndpoint

они еще не являются сервлетами, но JBoss (Jax-WS) превратит их в стартап.

Я использую jboss-4.2.3, и я также получаю эти сообщения до вызова ServletContextListner.

[org.jboss.wsf.framework.management.DefaultEndpointRegistry] register: jboss.ws:context=crm,endpoint=YourService

Но мне интересно, доступен ли этот веб-сервис до того, как запущено полное приложение, потому что почти в конце развертывания я получаю следующие сообщения

[org.jboss.wsf.stack.jbws.WSDLFilePublisher]  WSDL published to: ... YourServlet(..).wsdl

Итак, я бы предположил, что это проблема, связанная с jboss. Возможно, нам следует протестировать на другом сервере приложений, чтобы это было доказано.