2012-05-31 91 views
1

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

现在在我的测试类,我运行下面的代码,以便开始码头,以部署包含我的公开的Web服务我的axis2.war Web应用程序:

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 

试图加入服务器是r无限期地延伸,并且不会抛出任何例外。

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

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

在此先感谢。

+0

为什么要加入第一个地方??? http://stackoverflow.com/questions/15924874/embedded-jetty-why-to-use-join –

回答

6
+0

问题是我加入服务器后出现错误,我正在运行我的测试用例。加入并基于javadocs,将等待线程直到它死亡。然而,这不是我所希望的行为,因为我希望我的测试用例在码头启动后立即运行。摆脱“server.join()”实际上解决了我的问题。感谢帮助的人。 –

+0

您也可以在单独的线程中调用server.start()和server.join(),并将新线程作为守护进程线程(setDeamon-> true)并启动它。 –