"Стандартный" способ обработки жизненного цикла приложения 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. Возможно, нам следует протестировать на другом сервере приложений, чтобы это было доказано.