1

組み込みの 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 メソッドが実行されず、代わりに最初のアプリケーション要求とアプリケーションの最初のユーザーが長い遅延を取得するまで待機することです。

4

0 に答える 0