2017-04-25 10 views
0

Jerseyベースのアプリケーションで利用可能なサービス(つまり、プロパティファイルやデプロイメント記述子など)を実行時に構成する方法、管理者がコンテナレベルで有効または無効にすることができます。実行時にサービスを有効または無効にするためにJersey2のテクニックが必要です

このアプリは現在15種類のエンドポイントを公開しています。 @ApplicationPathで注釈を付けられた1つのアプリケーションと、@Pathで注釈が付けられた3つのクラスがあり、これらの3つのクラスには、通常の@Path/@/@Producesで注釈が付けられた15種類のメソッドがあります。 私のアプリには、ランタイム設定を読むためのいくつかの異なるテクニックがあります。データベースリソースに接続するための設定、変更に関するプロパティファイルの監視などを行います.Jerseyレベルで管理者が3つのクラスまたはそのクラス内の個々のエンドポイントを有効/無効にできるように、いくつかの設定値を追加します。誰かがこれを行う最善の方法を提案できますか? 実行時にこの設定を制御したいので、設定が変更された場合、コンテナを再起動しなくても変更されたサービスを有効/無効にするようジャージ設定を更新できます(Tomcat) 。 アドバイスありがとうございます。ありがとう!

答えて

2

これはジャージーでネイティブにできるかどうかはわからないが、私は考えることができる一つのことだけで、エンドポイントが無効になっているかどうかを判断するためにジャージーprematchingフィルタを使用することです。リスナーとしても機能するサービスを使用し、それに応じて無効なエンドポイントを更新することができます。エンドポイントが無効になっている場合は、ちょうど私がこれで遊んでと一緒に仕事POCを入れた404

@Provider 
@PreMatching 
public class DisabledEndpointsFilter implements ContainerRequestFilter { 

    @Inject 
    private ConfigurationService configuration; 


    @Override 
    public void filter(ContainerRequestContext request) throws IOException { 
     final List<String> disabledEndpoints = this.configuration.getDisabledEndpoints(); 
     final String path = stripLeadingSlash(request.getUriInfo().getPath()); 

     for (String endpoint: disabledEndpoints) { 
      endpoint = stripLeadingSlash(endpoint); 
      if (path.startsWith(endpoint)) { 
       request.abortWith(Response.status(404).build()); 
       return; 
      } 
     } 
    } 
} 

を返します。 Github Repoをチェックアウトすることができます。

+0

私はそれが好きです!シンプルでハックではありません。私はジャージーのこの能力を探っていなかった、助けてくれてありがとう! –

0

これはapache camelの使用をお勧めします。ラクダを使用すると、組み込みJettyサーバーと組み合わされたHTTP要求をプロキシとして制御できます。

http://camel.apache.org/jetty.html

関連する問題