2012-05-31 89 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)並啓動它。 –