2013-12-13 18 views
3

我從一個Java類中以編程方式啓動現有的Tomcat 7安裝。 僞..無聊的細節,如完整路徑,我的tomcat排除Java ProcessBuilder.start(Tomcat7.exe)啓動過程,但它會掛起幫助嗎?

startTomcat(){ 
    ProcessBuilder pb = new ProcessBuilder("Tomcat7.exe"); 
    pb.start(); 
} 

然後另一種方法 stopTomcat(){ pb.destroy() }

當startTomcat()被調用時,我可以看到Tomcat7顯示在Windows進程列表中,但它僅使用24k內存,沒有任何內容進入日誌...因此,當停止被稱爲它死亡..基本上什麼也沒有發生。如果我將stopTomcat()調出,只要我的對象完成運行,Tomcat服務器就會正常啓動。資源高達500k +,並且日誌開始充滿來自安裝中的應用程序的活動。

我能做些什麼來阻止這種懸掛行爲?我有一個等待......等待2分鐘,讓Tomcat有時間初始化,我的戰爭時間去做我想做的事情。然後我只想關閉它。

+0

嗨,歡迎來到StackOverflow!只是一個提示:通過立即清楚你的問題(查看其他問題的指導),你通常會得到更多更好的答案。你的問題更像是一個故事;-) –

+0

開始inna不同的線程。問題解決了。 –

+0

我去了線程路線..之前,我追逐嵌入的兔子兩天前下了一個洞..我會做的線程MODS,當它不工作,我會回來再問。 – JoGotta

回答

0

我不確定這是否是問題,或者它只是一個解決方法..但我得到它的工作,並希望張貼如何。

的Tomcat7安裝註冊爲服務。所以,不是從我的代碼運行Tomcat7.exe ..我只是做一個DOS調用來啓動服務:net start Tomcat7,淨停止Tomcat7

感謝那些迴應..

0

這並不直接解決您的最後一個問題,但對於越來越嵌入式Tomcat來正確地掃描整個類路徑,儘量沿着線的東西:

Path baseDir = Files.createTempDirectory("integration-test").toAbsolutePath(); 

tomcat = new Tomcat(); 
tomcat.setBaseDir(baseDir.toString()); 

tomcat.setHostname("localhost"); 
tomcat.setPort(0); // random free port 

Context context = tomcat.addWebapp("/", baseDir.toString()); 

StandardJarScanner jarScanner = (StandardJarScanner) context.getJarScanner(); 
jarScanner.setScanAllDirectories(true); 

tomcat.start(); 

endpoint = URI.create("http://localhost:" + tomcat.getConnector().getLocalPort()); 

的關鍵是jarScanner.setScanAllDirectories(true),這將導致掃描儀查找類路徑上的所有目錄,它們本身包含META-INF目錄

+0

首先..感謝您花時間提交答案!這就是爲什麼我以最初的方式提出問題的原因,但是堆棧神並沒有「獲得」並改變它。所以我完全開始了。不,我不想根據我在原始問題中解釋的原因嵌入服務器,但刪除了該服務器。我想從我的代碼中啓動一個已存在的tomcat。實例開始..它只是直到我的代碼退出時才做任何事情..我只是添加了一個線程..它仍然無法正常工作。 – JoGotta