組み込みの Grizzly Web サーバーを使用して、Jersey で RESTful Web サービスをホストしています。これはすべて正しく機能しています。
私の質問は、最初の着信クライアント要求を待つのではなく、サーバーの起動時に Web アプリケーション コンテキストを強制的に初期化する方法です。これは小さな問題ですが、私が解決したい問題の 1 つです。
次のように組み込みサーバーを起動します。
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 Web サービスを介して公開するすべての静的データをプリロードおよびキャッシュするために使用されるシングルトンです。
「CatalogManager」の本質は次のとおりです。
public final class CatalogManager {
@PostConstruct
public void initialise() {
// Load and cache a large application data-set here...
}
}
したがって、問題は、サーバーの起動時に依存性注入とその結果 @PostConstruct メソッドが実行されず、代わりに最初のアプリケーション要求とアプリケーションの最初のユーザーが長い遅延を取得するまで待機することです。