Как заставить встроенный контекст веб-приложения 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 не запускаются при запуске сервера, вместо этого он ожидает первого запроса приложения, и первый пользователь моего приложения получает длительную задержку.