развертывание веб-приложения на уже запущенной пристани - PullRequest
0 голосов
/ 28 июня 2018

Если я запускаю джет-сервер из внешнего jar-файла, используя java -jar, и как я могу добавить другое веб-приложение java к тому конкретному порту, который уже запущен? например, этот код:

public class Main {
    private static Logger logger = Logger.getLogger(Main.class);

    public static void main(String[] args) throws Exception {
        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
        context.setContextPath("/");

        Server jettyServer = new Server(5701);
        jettyServer.setHandler(context);

        ServletHolder jerseyServlet = context.addServlet(
                org.glassfish.jersey.servlet.ServletContainer.class, "/*");
        jerseyServlet.setInitOrder(0);

        jerseyServlet.setInitParameter(
                "jersey.config.server.provider.classnames",
                Calculator.class.getCanonicalName());

        try {
            jettyServer.start();
            jettyServer.join();
          } catch (Exception e){
                        logger.error("error during server starting",e);
              jettyServer.stop();
              jettyServer.destroy();
          }

    }
}

Если я попытаюсь / поймать, будет ли приложение добавлено на уже существующий сервер 5701 Jetty?

1 Ответ

0 голосов
/ 28 июня 2018

ваш код запускает свой собственный сервер Jetty через порт 5701, в этом коде нет ничего, что добавляло бы другой сервер Jetty.

Допустим, у вас ServerFoo на порту 5701 уже запущен и работает в собственной JVM.

Теперь у вас есть другое веб-приложение, которое вы хотите добавить к этому экземпляру ServerFoo.

Вы запустите новую JVM, назовем ее DeployerBar, чтобы управлять / управлять экземпляром ServerFoo.

Для этого вам нужно связаться с этим экземпляром ServerFoo и дать ему все необходимое для запуска самого WebApp (все классы, конфигурация и т. Д.) В первую очередь.

Тогда ServerFoo понадобится специальный ClassLoader для загрузки новых классов и конфигурации, которые он только что получил, что даст ему возможность запустить это новое веб-приложение.

Если это именно то, что вы хотите сделать, рассмотрите вместо этого изменение ServerFoo для использования Jetty DeploymentManager для мониторинга общего каталога веб-приложений.

Тогда ваш процесс развертывания просто помещает все файлы (classes / jars / libs / configuration) в этот общий каталог веб-приложений, чтобы ServerFoo DeploymentManager просто взял и начал использовать.

См. LikeJettyXml.java для примера, как это работает.

    DeploymentManager deployer = new DeploymentManager();
    DebugListener debug = new DebugListener(System.err,true,true,true);
    server.addBean(debug);        
    deployer.addLifeCycleBinding(new DebugListenerBinding(debug));
    deployer.setContexts(contexts);
    deployer.setContextAttribute(
            "org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
            ".*/[^/]*servlet-api-[^/]*\\.jar$|.*/javax.servlet.jsp.jstl-.*\\.jar$|.*/[^/]*taglibs.*\\.jar$");

    WebAppProvider webapp_provider = new WebAppProvider();
    webapp_provider.setMonitoredDirName(jetty_base + "/webapps");
    webapp_provider.setDefaultsDescriptor(jetty_home + "/etc/webdefault.xml");
    webapp_provider.setScanInterval(1);
    webapp_provider.setExtractWars(true);
    webapp_provider.setConfigurationManager(new PropertiesConfigurationManager());

    deployer.addAppProvider(webapp_provider);
    server.addBean(deployer);
...