2013-10-19 27 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状态代码或响应页面上的一些文本...)

相关问题