2013-10-19 62 views
1

我目前有一個沒有web.xml的Jersey webapp。它部署得很好,但在收到第一個Web請求之前不會啓動。在Tomcat + Jersey沒有web.xml的情況下在容器啓動時加載webapp?

爲了讓webapp在啓動時加載,我可以爲webapp創建一個web.xml並給出a load-on-startup tag。但是,我會強烈寧願不做一個web.xml。

有沒有辦法讓JAX-RS應用程序在沒有web.xml的啓動時加載?我甚至會接受針對澤西島和/或Tomcat的解決方案。

編輯:我也能接受,在一個Tomcat實例加載所有應用熱切的解決方案。

編輯:讓我多給點關於應用程序如何部署,每個評論的信息。

部署過程並不複雜。

該應用程序將運行在運行Ubuntu 12.04的EC2實例上。我正在手動設置應用程序的一個實例;一旦它有效,我將創建應用程序的AMI並根據需要創建更多副本。

要在初始實例上部署應用程序,我只需將WAR文件複製到/var/lib/tomcat7/webapps並重新啓動Tomcat。此Tomcat實例上不會運行其他web應用程序。

如果有任何其他信息會有用,請告訴我!我會很高興地添加它。

編輯:爲了清楚起見,這是我的webapp Application類的外觀,在較高的水平:

@ApplicationPath("/") 
public class App extends ResourceConfig { 
    // ... 
} 

我使用的,而不是更普遍的JAX-具體新澤西ResourceConfig類RS Application類,因爲我使用Jersey的內置HK-2來執行一些依賴注入。

+1

如果您描述或顯示您如何部署應用程序,這將有很大幫助。 –

+0

我添加了一些關於部署環境和過程的附加信息。如果您需要更多信息,或者這不是您要查找的信息,請告訴我。 – sigpwned

回答

1

我能想到的唯一方法就是切換到設置自己的澤西島ServletContainerset its "load on startup" value大於零的東西。你可以使用ServletContainerInitializer(沒有關係 - 命名只是一個巧合)來做到這一點。如果您碰巧使用了Spring,它的WebApplicationInitializer提供了一個相同的機制和一個更方便的界面。

另一個,而哈克,方法是寫一個擴展ServletContainer類,並給它an appropriate Servlet 3.0 annotation,像@WebServlet(value="/", loadOnStartup=1)

1

一個解決辦法是通過簡單地添加調用curl給力的第一請求的應用或wget添加到您的部署腳本。它具有預熱任何緩存的額外優勢。它可以用於測試部署和應用是否真正起作用。 (只需檢查HTTP狀態代碼或響應頁面上的一些文本...)

相關問題