5

JAX-RS(JSR-311)内で、アプリに固有の横断的関心事のいくつかを抽出できるメカニズムを探しています。たとえば、私のアプリには、リクエストごとに検索または構築される特定のコンテキストがあります。このタイプのロジックを一元化された場所で実行し、その後、リクエストの残りの部分でさまざまなリソースによって利用されるコンテキストに何らかの形でアタッチできるようにしたいと思います。URLの一部のサブセットに対してのみ、これらのタイプのアクションを実行できればさらに良いでしょう。

JAX-RSがパスセグメント、Cookie、ヘッダーなどに提供するデフォルトのインジェクションは素晴らしいですが、これらの部分のカスタム解釈はどうですか?必要になるたびにそれを構築する必要は本当にありません。むしろ、ビルド方法を指定して、リソースメソッドの一部としてコンテキストコンポーネントを挿入する方法が必要です。

そのようなフックはありますか?これを行うためにプロバイダーモデルを操作できますか?ところで、私は可能な限り実装に依存しないようにしたい(Jersey、RESTEasyなど)。

洞察を事前に感謝します。

4

2 に答える 2

0

プロバイダーを使用ContextResolverして、リソースまたは別のプロバイダーに任意のコンテキストを提供できます。javax.ws.rs.ext.ContextResolver<T>基本的に、注入したいコンテキストに対して実装する必要があります。注釈を付けて登録することを忘れないでください@Provider

于 2011-03-18T20:34:16.513 に答える
0

ある種の奇妙なひねりの中で、標準は素晴らしく構成可能な方法で連携して機能し(JAX-RSとCDI)、IBMは私の特定の質問をカバーするチュートリアルを作成しました。CDIとJAX-RSの組み合わせに関するより大きなチュートリアルの一部であるこの記事では、CDI(Javaコンテキストと依存性注入)デコレーターとメソッドインターセプターを使用して、JAX-RSリソースに横断的関心事を実装する方法について具体的に説明します。

更新:これをGlassFish3.1で動作させることができました。重要なのは(私が見つけた例のどれも示していない)、CDIがリソースインスタンスの存続期間を管理していることを確認する必要があることです(インターセプターでラップできるようにするため)。自分自身をインスタンス化してからApplication.getSingletons()メソッドに戻ることは機能しません

戻って、Jettyでも使用できるかどうかを確認します。

アップデート2: Jetty(そして拡張機能としてTomcatのような他の非J2EEサーブレットコンテナ)は、CDIをセットアップするのにちょっと苦労します。GlassFishははるかに簡単な統合だと思います。Jettyに必要な手順の概要を説明したブログを次に示します。

于 2011-03-18T19:43:26.660 に答える