Jetty调用ServletContextListener.contextInitialized()

时间:2015-12-05 17:48:57

标签: java java-ee jetty

这已经困扰了我很长一段时间,所以我想我会把它扔出去。也许Jetty专家会看到它。

我有一个可以正常工作的J2EE应用程序。当我启动jetty服务器主机时,我看到所有正确的信息都来自日志控制台,包括" Context Initialized"以下代码中的消息。

但是,如果我通过将root.war文件复制到webapps文件夹来部署新版本的应用程序,我会看到" Context Initialized"登录,但启动停在那里,没有进一步启动。服务器没有响应,所以我必须在每次部署后重新启动它。

我的问题是,接下来要查看挂断的内容。 ServletContextListener.contextInitialized()

之后会发生什么
public class ApplicationListener implements ServletContextListener {

private static final Logger log = Logger.getLogger(ApplicationListener.class.getName());


@Override
public void contextInitialized(ServletContextEvent servletContextEvent)   {
    log.info("Context Initialised"); //this is the last thing to come out of the log before it hangs if jetty is restarting due to a new .war file detection


}

当我从头开始码头时 - 我看到上面其余的这些日志是吐出来的,这表示正常开始:

2015-12-05 12:40:33.214:INFO:oejdp.ScanningAppProvider:Deployment monitor /opt/nimbits/contexts at interval 1
2015-12-05 12:40:33.215:INFO:oejd.DeploymentManager:Deployable added: /opt/nimbits/contexts/javadoc.xml
2015-12-05 12:40:33.222:INFO:oejd.DeploymentManager:Deployable added: /opt/nimbits/contexts/test.xml
2015-12-05 12:40:33.233:INFO:oejw.WebInfConfiguration:Extract jar:file:/opt/nimbits/webapps/test.war!/ to /private/var/folders/x4/vh_dqlln1hn_vkk8jgz9tcf00000gn/T/jetty-0.0.0.0-8080-test.war-_-any-/webapp
2015-12-05 12:40:33.528:INFO:oejs.TransparentProxy:TransparentProxy @ /javadoc-proxy to http://download.eclipse.org/jetty/stable-8/apidocs
2015-12-05 12:40:33.557:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080

1 个答案:

答案 0 :(得分:1)

The Java EE 6 Tutorial声明了以下有关Servlet生命周期的内容:

  
      
  1. 如果servlet的实例不存在,则为Web容器      
        
    1. 加载servlet类。
    2.   
    3. 创建servlet类的实例。
    4.   
    5. 通过调用init方法初始化servlet实例。   
    6.   
  2.   
  3. 调用服务方法,传递请求和响应对象。 (即GET或POST请求)
  4.   

EE 6 Tutorial指出ServletListener对Servlet init()destroy()调用做出“反应”。这意味着在init()完成步骤1.3后调用您的侦听器。您可以尝试覆盖servlet的init方法并添加print语句来自行检查。

鉴于上述情况,看起来您的应用程序在第2步中被挂起,这是服务方法本身的调用(GET / POST)。我建议添加额外的日志记录到servlet init和doGet / doPost方法,以确保。如果仍然无法解决您的问题try enabling Jetty trace,那么您可以更详细地记录可能出现的问题。