在开发 Java EE 应用程序时,我经常遇到在应用程序启动、停止等时执行某些操作的“问题”。现在以 Weblogic 为例,有一种机制(应用程序生命周期监听器) .但是如果你想让你的应用程序远离应用程序的东西。特定于服务器,您必须找到不同的解决方案。有些人建议使用在启动时加载的 servlet,并“滥用”init()
/destroy()
。
其他人说使用 ServletContextListener
。对我来说,最后一个听起来最好(根据 ServletContextListener
的 java 文档。不幸的是,今天我尝试了 JBoss 7,其中 jax-ws webservices 似乎在任何其他 Servlet
之前被初始化,因此在 ServletContextListener
收到通知之前。
长话短说 - 我只是面临一些特定于应用程序服务器的问题 - 或者是否有任何“更合适”的标准化 Java EE 方式来注册东西,做东西,在任何网络服务,servlet 初始化之前?
最佳答案
如果你的网络服务是这样注释的
@javax.jws.WebService(...)
public interface YourServiceEndpoint
它们还不是真正的 servlet,但 JBoss (Jax-WS) 会将它们变成一个初创公司。
我正在使用 jboss-4.2.3,并且在我的 ServletContextListner
被调用之前我也收到了这些消息。
[org.jboss.wsf.framework.management.DefaultEndpointRegistry] register: jboss.ws:context=crm,endpoint=YourService
但我想知道,这个 web 服务是否在整个应用程序启动之前可用,因为在部署快结束时我收到以下消息
[org.jboss.wsf.stack.jbws.WSDLFilePublisher] WSDL published to: ... YourServlet(..).wsdl
所以我猜,这是一个与 jboss 相关的问题。也许我们应该在另一个应用服务器上进行测试以证明这一点。
关于java - "Standardized"处理 Java EE 应用程序生命周期的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6787503/