【问题标题】:Embedded Jetty hangs on join()嵌入式 Jetty 挂在 join() 上
【发布时间】:2012-05-31 08:29:31
【问题描述】:

我正在试验 Junit 4 已经有一段时间了。我的部分单元测试需要部署一个暴露一些 Web 服务的战争应用程序。我正在使用 Eclipse Helios,并且在项目的构建路径中添加了两个不同的 jar,它们是: 1-jetty-all-8.1.3.v20120416.jar 2- servlet-api-3.0.jar

现在在我的测试类中,我正在运行以下代码来启动码头并部署包含我公开的 Web 服务的axis2.war webapp:

System.out.println("Initializing server");
       Server server = new Server(8181);
       System.out.println("Server initialized");

        WebAppContext webapp = new WebAppContext();
        webapp.setContextPath("/");
        webapp.setParentLoaderPriority(true);
        webapp.setWar("C:\\axis2.war")

        server.setHandler(webapp);

        System.out.println("Starting server");
        server.start();

        System.out.println("Joining server");

        server.join();
        System.out.println("Finished starting Jetty...");

以上代码的输出如下:

Server initialized
Starting server
Joining server

尝试加入服务器会无限期运行,并且不会抛出任何异常。

在另一次尝试中,我在我的机器上下载了jetty 8.1.3 web server,并将axis.war放在webapps目录下,然后从命令行使用start.jar启动jetty。它从那里完美运行,我能够访问我公开的 Web 服务方法。

但是,我需要能够以编程方式启动和停止码头,并以编程方式部署我的 Web 应用程序。谁能告诉我可能是什么问题?

提前致谢。

【问题讨论】:

标签: eclipse web-services jetty


【解决方案1】:

【讨论】:

  • 问题是我在加入服务器后立即运行我的测试用例,这是错误的。加入,并基于 javadocs,将等待一个线程直到它死亡。然而,这不是我希望的行为,因为我希望我的测试用例在码头完成启动后立即运行。摆脱“server.join()”实际上解决了我的问题。谢谢你的帮助。
  • 也可以在单独的线程中调用server.start()和server.join(),将新线程设为守护线程(setDeamon->true)并启动。
猜你喜欢
  • 1970-01-01
  • 2017-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-22
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
相关资源
最近更新 更多