RESTful のドキュメントを読んでいると、非同期インスタンスを実装することはできないようですが、誰かがSOについてよく知っているかもしれません。
ここで意味するのは、サービスリクエストを非同期で実行したいということです。
@Path("/helloworld", asyncSupported=true)
public class MyHelloWorldService {
...
}
asyncSupported
が@Path
で定義されていないことは知っていますが、@WebServlet
に似たものを探しています。次に、AsyncContext
インスタンス(または同等のもの)を使用したいと思います。
これは可能ですか?
RestEasyにはいくつかのサポートがあります1 そのために-@Suspend
と呼ばれるカスタムアノテーションを使用します。
ここを参照してください: http://docs.jboss.org/resteasy/docs/2.2.1.GA/userguide/html/Asynchronous_HTTP_Request_Processing.html
ジャージーの上にAtmosphereと呼ばれるフレームワーク/ライブラリもありますが、その焦点は長期ポーリングのクライアント/サーバーWebアプリケーション(チャットなど)にあるように見えるため、ユースケースにはやり過ぎかもしれません https:// github。 com/Atmosphere/atmosphere )
[1]リクエストのCDIスコープは、実際にロジックを実行するスレッドで失われます。詳細については、 RESTEasy-682 の問題を参照してください。これは、現時点で私が知っているRESTフレームワーク)では解決されていない問題です。【2014年3月】。
安らかなspesificationはまだその人生の早い年齢にあります。しかし、この問題は2つの部分と見なす必要があります。クライアントとサーバー。
クライアント:
クライアント側にとっては、昨年の最近の変更は十分に成熟しました。そして最近、 Jeanfrancois Arcand に基づく非ブロッキングクライアントが実装され、リポジトリにプッシュされました。説明があります ここ 。
サーバ:
サーバー側にとっては、まだ未成熟です。新しいサーブレット仕様の採用は非常に遅く、開発者として私はこれらの問題にも対処することを期待しています JSR 339 。そして、これはJSR仕様でもこれらの文で明確に扱われています。
JAX-RS 1.1は、サーバー側で同期要求応答モデルを定義します。このJSRは、応答が要求に対して非同期で返されるように、単純な非同期要求処理モデルを指定します。サーブレット3.0を利用してこのようなサポートを有効にすることができますが、実装では代わりに他のコンテナ固有のAPIを使用することを選択できます。
ただし、他の選択肢もあります。 Jettyなどのプロジェクトは、このようなエレガントな問題に取り組んでいます 例 。コミュニティが成長しているので、他の選択肢を検討することをお勧めします。
CXFおよびJetty Continuations で可能と思われますが、Jetty6でのみ可能であるように見えます。それらはJetty7でサーブレット3.0仕様にあるものに変更されており、それがCXFでサポートされているかどうかはわかりません。さらに、Jetty Continuationsは少し 面倒なAPIで、手動のものがたくさんあります のように見えるので、コードを変換するのがどれほど簡単かわかりません。
それでも、ある程度可能性があるようです。次のそよ風と神がそれを望むとき。
これで、最近リリースされたJava EE7.0の一部であるJAX-RS2.0 APIを使用して、非同期RESTful呼び出しを行うことができます。
RESTベースの非同期プロトコルの例については、Pubsubhubbub found here を確認してください。これはAtom Syndication形式に基づいており、WS- * pub/subメカニズムよりもはるかに単純です。
Spring Webflux を試してみることもできます。これは、非同期であり、同時に反応します。ただし、これはJava EEからのJAX-RS実装ではありません。