BT

Java API for RESTful Web Services 2.1リリース

| 作者: Amit K Gupta フォローする 6 人のフォロワー , 翻訳者 h_yoshida フォローする 1 人のフォロワー 投稿日 2017年10月17日. 推定読書時間: 4 分 |

原文(投稿日:2017/08/26)へのリンク

JAX-RS 2.1 Java API for RESTful Web Servicesが今週リリースされた。Oracleのテクニカルスタッフの主要メンバでJSRの仕様リーダであるSantiago Pericas-Geertsen氏によると、JAX-RS 2.1ではSSE(Server-Send Event)とJSON-Bが新たにサポートされ、JSON-Pのサポートが改良されている。APIにもクライアントAPIへのリアクティブな拡張とともに、Java 8 CompletionStageの組み込みサポート、RxJavaなど他のリアクティブAPIのための拡張ポイントが追加されている。

JAX-RS 2.1仕様によると、今回のリリースの目標はPOJO用のアノテーションと、WebDAVAtop Publishing Protocolを含む一般的なHTTP利用パターンとアプリケーションの高レベルなサポートにある。APIではさまざまなHTTPエンティティボディのコンテントタイプ、いくつかのコンテナ、JAX-WSプロバイダがサポートされる予定だ。さらにこのAPIでは、Webソースクラス内のJava EE機能とコンポーネントもサポートされる。

Pericas-Geertsen氏に話を聞いた。氏はSSEを詳しく説明してくれた。

SSE(Server-sent-event)リソースはSeeEventSinkと呼ばれる特殊なタイプを注入して、text/event-streamを生成します。SSEクライアントはSeeEventSourceを使って、コネクションからイベントを読み取ります。

このメカニズムでは、長時間の接続とブロードキャストを使用することで、ポーリングや、リソース集約型である短時間のコネクションよりも優れたパフォーマンスを提供します。

次のブロックは、SSEの使用方法を示したものだ。

サーバ:

@GET
@Produces(MediaType.SERVER_SENT_EVENTS)
public void getMessageQueue(@Context Sse sse, @Context SseEventSink eventSink) {
    // Resource method is invoked when a client subscribes to an event stream.
    // That implies that sending events will most likely happen from different
    // context - thread / event handler / etc, so common implementation of the
    // resource method will store the eventSink instance and the application 
    // logic will retrieve it when an event should be emitted to the client.
    
    // sending events:
    eventSink.send(sse.newEvent("event1"));
}

クライアント:

WebTarget target = ClientBuilder.newClient().target("server-sent-events");

SseEventSource eventSource = SseEventSource.target(target).build();

// EventSource#register(Consumer<InboundSseEvent>)
// Registered event handler will print the received message.
eventSource.register(System.out::println);

// Subscribe to the event stream.
eventSource.open();

Pericas-Geertsen氏はさらに、次のことを教えてくれた。

  • JAX-RS 2.1は、従来のリリースと完全な下位互換性がある。

  • 新機能は、既存のJAX-RSのコンセプトに非常によく統合されている。例えば、クライアント呼び出しにメソッドコールを単に注入するだけで、処理を同期からリアクティブにスイッチすることが可能である。

  • SEEはストリーミングHTTPベースのコネクションに依存しているので、既存のAPIに対する自然な拡張となっている。

APIはアノテーションとラムダ式を広範囲に使用するので、Java 8以降で開発されたアプリケーションがサポート対象となる。

この記事を評価

採用ステージ
スタイル

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT