「Reactive Streams」とは
実は、筆者はReactiveという用語にあまりなじみがなく、違和感を持っていました。同じ考えの方もいらっしゃるかもしれません。しかし、サーバーサイドでの開発者であればPub/Subフレームワークと理解してもいいですし、クライアントアプリケーションの開発者であればObservableと理解すれば分かりやすいかと思います。ただし、既存の用語ではなく、Reactiveという言葉を用いてきたことからも、その用途は多少異なるといえます。
例えば、Pub/Subはどちらかといえばシステム間の非同期メッセージングを想定していますが、「Reactive Streams」は同一のJava VM内を想定していると思われます。また、Observableそのものというよりは、Observableなオブジェクトを細かくコントロールしたいときに使うAPIといえるでしょう。
AndroidではRxJavaというライブラリも使われているようです。これらのライブラリを使っている方であれば、より理解しやすいのではないでしょうか。
Reactive Streams機能では、以下3つのインターフェースが重要な役割を果たしています。
- Publisher
- Subscriber
- Processor
「Publisher」はデータの提供元、もしくは発生元となるインターフェースです。そして、「Subscriber」がデータを処理または表示するためのオブジェクトです。この2つのインターフェースを使う事でデータの提供と処理をわけて管理でき、Publisherオブジェクトは、あらかじめ購読されているSubscriberオブジェクトにのみデータを提供することができるようになります。「Processor」は、SubscriberとPublisherを単に継承したものです。このインターフェースがあえて定義されているのは、図4のように、データの発生元からのデータについてフィルタや加工を非同期で行いつつ、それらの準備が整ったら最終的に表示、もしくは出力オブジェクトにデータを渡すケースが想定されているからです。
AdnroidアプリのようにUIを止めることなくデータ処理をする必要があるクライアントアプリの場合、この仕組みが必要となります。従来の方法では、データ処理を同期的に行うことができないためコードが煩雑になりがちですが、この流れでデータ処理をすれば、すっきりとしたコードの記述が可能です。
また、IoTのようにさまざまな機器から情報が大量が生成され、それを必要に応じて検知し、出力する場合にも有効な処理といえます。
最後に
今回は、Javaのリリースの歴史とJava 9のリリースの概要について紹介しました。Java 9でリリースされたモジュール機能はこれまでのJavaと比べて、開発者自身においても、Javaという実行環境においても大きな変更といえるでしょう。次回以降は、これらの詳細な機能や利用方法などを紹介していきます。