之前叫我需要遷移Web服務從Tomcat 6(使用JDK 1.5)(使用JDK 1.6)應用到Tomcat 7(實際測試中的7.0.27)。 JAX-WS框架是Metro 2.1。Web服務的PostConstruct servlet上下文監聽器的contextInitialized
我用兩個的ServletContextListener:
「WebAppListener」:初始化應用程序(配置,數據庫連接設置...)。
「com.sun.xml.ws.transport.http.servlet.WSServletContextListener」:創建Web服務的Metro偵聽器。
的順序很重要,因爲我需要調用我的Web服務@PostConstruct方法之前,我的web應用程序完全初始化。
在Tomcat中6,本工程不平凡:
INFO: Starting Servlet Engine: Apache Tomcat/6.0.36
mars 16, 2013 5:13:13 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive WSWebApp.war
************************ IN WebAppListener.contextInitialized ***********************
************************ IN WSMyWebService.postConstruct ****************************
完全一樣的戰爭然而,在Tomcat的7:
mars 16, 2013 6:45:24 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive C:\home\tomcat\webapps\WSWebApp.war
************************ IN WSMyWebService.postConstruct ****************************
************************ IN WebAppListener.contextInitialized ***********************
我認爲,在聽者的被稱爲順序順序它們出現在web.xml中?
爲什麼這個訂單在Tomcat 7中被更改了?但更重要的是:我需要做些什麼才能使「Tomcat6」訂單恢復正常?
謝謝。
這個相關的問題http://stackoverflow.com/questions/178562/how-to-determine-the-order-of-listeners-in-web-xml似乎證實了聽衆被調用的順序是由web.xml定義 – estiedi 2013-03-17 07:27:39
Servlet 3.0規範說:11.3.2部署聲明: 監聽器類是在Web應用程序部署描述符中使用 監聽器元素聲明的。 **它們按類名列出,並按 的調用順序排列** – estiedi 2013-03-17 07:39:07
創建一個包含兩個偵聽器的簡單Web應用程序。 Tomcat 7的行爲正確:偵聽器按照web.xml的順序調用,並且在反轉訂單時,調用順序也會反轉。 – estiedi 2013-03-17 08:03:06