Как заставить встроенный контекст веб-приложения Grizzly запускаться

Я использую встроенный веб-сервер Grizzly для размещения веб-сервисов RESTful с Джерси. Это все работает правильно.

Мой вопрос заключается в том, как принудительно инициализировать контекст веб-приложения при запуске сервера, а не ждать первого входящего клиентского запроса. Это небольшая проблема, но я бы хотел ее решить.

Я запускаю встроенный сервер так:

public final class TestApplication {

    public TestApplication() throws Exception {
        HttpServer httpServer = GrizzlyHttpServerFactory.createHttpServer(
            "http://0.0.0.0:8888",
            new ResourceConfig()
                .registerInstances(
                    new TestBinder(),
                )
                .registerClasses(
                    JacksonJsonProvider.class,
                )
                .packages(
                    AbstractResource.class.getPackage().getName()
                ),
            true
        );
    }
}

"TestBinder" настраивает внедрение зависимости, которое мне нужно, и этот класс выглядит следующим образом:

final class TestBinder extends AbstractBinder {

    @Override
    protected void configure() {
        bind(CatalogManager.class).to(CatalogManager.class).in(Singleton.class);
    }
}

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

Суть "CatalogManager" заключается в следующем:

public final class CatalogManager {

    @PostConstruct
    public void initialise() {
        // Load and cache a large application data-set here...
    }
}

Таким образом, проблема заключается в том, что внедрение зависимостей и, следовательно, метод @PostConstruct не запускаются при запуске сервера, вместо этого он ожидает первого запроса приложения, и первый пользователь моего приложения получает длительную задержку.

0 ответов

Другие вопросы по тегам