この記事はFUJITSU Advent Calendar 2017の17日目です。
本稿では、フロンターレの選手情報を、富士通のMicroProfile実装であるLauncherを使用し、REST APIで提供するプログラムを作成する方法を紹介します。
#その前に、MicroProfileとは
MicroProfileは、企業向けマイクロサービスをJavaで実現するための仕様検討などを行うコミュニティです。 (http://microprofile.io)
本稿では、MicroProfile 1.1で策定されている、以下の4つのAPIを使います。
- JAX-RS
- CDI
- JSON-P
- Config
#プログラム作成にあたり事前に用意するもの
Launcherの中に上記4つのAPIがすべて含まれているので、それ以外のライブラリやJava EE用の開発環境等は不要です。
#処理の流れ
- Config APIを使い、フロンターレのページのURLや、必要に応じてPROXY情報を取得します。
- フロンターレのページからHTMLを取得します。取得したHTMLをゴリゴリ解析、選手情報一覧を作成します。(ここはMicroProfileと関係なし)
- RESTのエンドポイントをJAX-RS/CDIで作成します。
- リクエストが来たら、JSONで返却します。
#ソースの作成
- Player.java
- Frontale.java
- FrontaleApplication.java
- FrontaleService.java
- microprofile-config.properties
Frontale.javaのConfig APIのところだけ、解説。
71 Config config = ConfigProvider.getConfig();
ConfigProviderからConfigオブジェクトを取得します。実際のプロパティ値は、このConfigオブジェクトを通して獲得します。
77 url = config.getValue("frontale.url", String.class);
getValueメソッドの第一引数にプロパティ名、第二引数に型を渡します。プロパティ値が見つからなければ、NoSuchElementExceptionがスローされるます。
プロパティの指定はいろいろな方法がありますが、このプログラムでは、デフォルトのプロパティファイルを使用し、以下のように記述します。
frontale.url = http://www.frontale.co.jp/profile/2017/number.html
#コンパイル
% javac -classpath launcher-1.0.jar -d classes *.java
#jarの作成
クラスファイルおよびプロパティファイルは、以下のように、jarにまとめておきます。
% jar tf frontale.jar
META-INF/
META-INF/MANIFEST.MF
WEB-INF/
WEB-INF/classes/
WEB-INF/classes/META-INF/
WEB-INF/classes/kzr/
WEB-INF/classes/kzr/frontale/
WEB-INF/classes/META-INF/microprofile-config.properties
WEB-INF/classes/kzr/frontale/Frontale$1.class
WEB-INF/classes/kzr/frontale/Frontale$Parser.class
WEB-INF/classes/kzr/frontale/Frontale$Parser2.class
WEB-INF/classes/kzr/frontale/Frontale.class
WEB-INF/classes/kzr/frontale/FrontaleApplication.class
WEB-INF/classes/kzr/frontale/FrontaleService.class
WEB-INF/classes/kzr/frontale/Player.class
#アプリの起動
以下のコマンドを実行するだけ。JDK以外、事前のインストールは不要。
% java -Djava.io.tmpdir=. -jar launcher-1.0.jar --deploy frontale.jar
#実行結果
#おわりに
「マイクロサービス化」というのは言い過ぎでしたが、ここで紹介したように、MicroProfileを使うことで、簡単に軽量コンテナで動作するアプリケーションを作成することができるようになります。