2011-10-26 42 views
2

我有一個Jetty嵌入式服務器啓動。添加/刪除webapp到嵌入式Jetty

我希望能夠做一個web應用程序的熱部署,並能夠以編程方式再次卸載它。

一旦服務器啓動,任何向它添加處理程序的嘗試都會引發錯誤。

我嘗試使用ContextHandlerCollection,然後使用.addContext()來啓動它並運行,但不知道如果這是正確的方式去解決它。

有人可以請指出我在正確的方向嗎?謝謝

回答

2

這個熱插拔適用於我(Jetty 7) - 此代碼特定於交換啓動時定義的Web Apps,並通過現有處理程序進行循環。要動態添加新的Web App,您只需添加一些找到的標誌邏輯即可。 HTH。

public void updateWar(String contextPath, String warPath) 
{ 
Handler[] hs = handlers.getHandlers(); 
for(int i = 0; i < hs.length; i++) 
{ 
    Handler h = hs[i]; 
    if(h != null) 
    { 
     if(h instanceof WebAppContext) 
     { 
      WebAppContext wac = (WebAppContext)h; 
      String wacwar = wac.getWar(); 

      if(wacwar.equals(warPath)) 
      { 
       try 
       { 
        handlers.stop(); 
        wac.stop(); 
        wac.destroy();       
        handlers.removeHandler(wac); 
        wac = new WebAppContext(); 
        wac.setContextPath(contextPath); 
        wac.setWar(warPath); 
        handlers.addHandler(wac); 
        handlers.start(); 
       } 
       catch (Exception e) 
       { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 
} 
+0

歡迎來到Stackoverflow。不要忘記抽空瀏覽FAQ的所有章節。它可以幫助你培養你的Stackoverflow體驗,你將獲得徽章作爲獎勵;-) – menjaraz

+0

順便說一句,還有一個新的WebAppProvider似乎可以管理熱插拔,但我還沒有得到這個工作。 http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/deploy/providers/WebAppProvider.html – user981