2011-09-28 9 views
17

RESTfulのドキュメントを読むと、非同期インスタンスを実装することはできないようですが、誰かがSOをよく知っているかもしれません。非同期RESTful Webサービスは可能ですか?

@Path("/helloworld", asyncSupported=true) 
public class MyHelloWorldService { 
    ... 
} 

私はasyncSupported@Pathで定義されていないけど、私は@WebServletに似たものを探しています:私はここで何を意味

は、私は非同期のサービス要求を実行したいです。次に、AsyncContextインスタンス(または同等のもの)を使用したいと思います。

これは可能ですか?

+1

RESTfulメソッドを非同期で呼び出すためにAJAXを使用しないのはなぜですか? –

+0

@The AsyncContextは、Servletで過度のスレッドごとの問題を解決するために実装されたためです。 Ajaxを使用してRESTfulを呼び出すと、この問題に対処できません(サーバー側)。アイデア/解決策は、スレッドの限られたセット(Nginxのようなビット)で処理要求をキューに入れることです。 – JVerstry

+0

http://java.net/projects/jersey/lists/users/archiveリストで尋ねたいと思うかもしれません。いくつかの時間前に先物を試したIIRCジャージー。それが進化したかどうかはわかりません。 –

答えて

8

RestEasyには、@Suspendというカスタム注釈を使用して、がサポートされています。

こちらをご覧ください: http://docs.jboss.org/resteasy/docs/2.2.1.GA/userguide/html/Asynchronous_HTTP_Request_Processing.html

その焦点は、ロングポーリングクライアント/サーバ、Webアプリケーション上にあるように表示される(あなたのユースケースのためにやり過ぎかもしれないことしかし大気と呼ばれるジャージーの上のフレームワーク/ライブラリもあり例えばチャット - https://github.com/Atmosphere/atmosphere

[1]リクエストのCDIスコープは、実際にロジックを実行するスレッドでは失われます。詳細については、RESTEasy-682号を参照してください。これは、現時点で私が知っているRESTフレームワークで解決されていない問題です。[2014年3月]です。

2

CXF and Jetty Continuationsで明らかに可能ですが、これはJetty 6でのみ可能と思われます。 Jetty 7ではServlet 3.0の仕様に変更されていますが、CXFでサポートされているかどうかはわかりません。さらに、Jetty Continuationsはa messy API, with a lot of manual stuffのように思われるので、コードを変換するのがどれくらい簡単か分かりません。

まだ多少は可能です。次の微風と神がそれを望む時。

+0

(いいえ、私はそれを試したことはありません) –

2

穏やかな精神状態は、まだ生涯の早い時期です。しかし、この問題は2つの部分として考慮されるべきです。クライアントとサーバー。

クライアント:昨年のクライアント側の最近の変更については

は十分に成熟になりました。そして最近、Jeanfrancois Arcandに基づく非ブロッキングクライアントが実装され、リポジトリにプッシュされました。説明はhereです。

サーバー:

サーバー側では未だ未熟です。新しいサーブレット仕様の採用は非常に遅く、開発者として私はJSR 339もこれらの問題に対処することを期待しています。そして、これはJSR仕様でもこれらの文で明確に扱われています。

JAX-RS 1.1では、サーバ側で同期要求応答モデルを定義しています( )。このJSRは、応答が 要求に非同期に返されるような単純な非同期要求処理 モデルを指定します。サーブレット3。0は、そのようなサポートを可能にするために活用することができるが、 実装は、代わりに他のコンテナ固有のAPI を使用することを選択することができる。

しかし、他の選択肢もあります。 Jettyなどのプロジェクトは、このような種類の問題をこのexampleのようにエレガントに扱っています。コミュニティが成長するにつれて、他の選択肢を検討するよう提案することができます。

1

RESTベースの非同期プロトコルの例については、Pubsubhubbubがhereであることを確認してください。これはAtom Syndicationフォーマットに基づいており、WS- * pub/subのメカニズムよりもはるかに単純です。

+0

これはRubyソリューションです。あなたはJavaを持っていますか? – JVerstry

+0

私が非同期を参照するとき、私はサーバー側で非同期要求処理を意味します... – JVerstry

0

あなたはまたで非同期と反応性である春Webfluxを試してみたいことである2.0 APIを使用して通話を行うことができます同じ時間。ただし、これはJava EEのJAX-RS実装ではありません。

関連する問題