Добавление / удаление веб-приложения во встроенную Jetty - PullRequest
2 голосов
/ 27 октября 2011

У меня запущен встроенный сервер Jetty.

Я хочу иметь возможность выполнить горячее развертывание веб-приложения и иметь возможность снова его выгружать, все программно.

Как толькосервер запущен, любые попытки добавить обработчик к нему приводят к ошибке.

Я пытался использовать ContextHandlerCollection, а затем использовать .addContext (), чтобы запустить его, но не уверен, что это правильный путьоб этом.

Может кто-нибудь указать мне правильное направление?спасибо

1 Ответ

2 голосов
/ 22 декабря 2011

Эта горячая замена работает для меня (Jetty 7) - этот код предназначен для замены веб-приложений, определенных при запуске, и циклически проходит через существующие обработчики. Чтобы динамически добавить новое веб-приложение, вам просто нужно добавить логику найденного флага. НТН.

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();
                }
            }
        }
    }
}
}
...