2011-02-09 52 views
3

如何配置jetty6以啓動非web應用程序(不是servlet)?我的Java應用程序是一個rabbitmq消費者,通過tcp監聽ampq消息。我可以用jetty init()調用我的Main入口點。有一個更好的方法嗎?在碼頭中嵌入非web應用程序

回答

2

爲什麼不提供一個簡單的servlet,它提供了一個init()方法,並從那裏調用你的應用程序?即將其包裝在幾乎沒有任何東西的servlet包裝中。

它不響應GETs/POSTs等,雖然你可能會發現有用的,通過一個簡單的HTML頁面報告應用狀態。

2

如果您想要一個完整的答案,您需要提供一些信息,但是我可以建議一些方法,這會給出不同的行爲(您需要爲您的用例選擇正確的方法)

1.只需將正確的代碼放在jetty.xml文件中。 XML文件是一個非常完整的執行語言,因此您可以簡單地調用對象上的方法。一個適當的靜態方法,以及一個<call>標籤應該可以做到這一點
不利之處在於,你並沒有真正從Jetty獲取任何東西 - 只需將啓動方法綁定到Jetty使用的相同啓動過程即可。

2.構建一個實現了碼頭LifeCycle接口的組件(您最好的選擇是延長AbstractLifeCycle),然後調用Server.addLifeCycle()
,讓你打開你的端口時,碼頭啓動,關機時乾淨碼頭,停止等。
但你得到的只是生命週期。你在部署過程中沒有得到任何東西。

同選項1,但把它放在jetty-web.xml(或jetty-env.xml),它允許你將它綁定到一個WAR文件的部署。
它不會爲選項1購買太多,但如果您嘗試將應用程序部署到現有的Jetty設置中,可能會有所幫助。

4.與選項1相同,但使用jetty-web.xml。我不確定這樣做會有多好,因爲我認爲您不能將LifeCycle附加到WebAppContext,但它可能行得通 - 您需要對此進行更多調查。

5.作爲每Brian's solution,簡單地寫一個servlet與init()方法,和initialise-on-startup,那麼不將其映射到任何網址。在init內撥打電話給您的輸入法。

相關問題