Lerna ハンズオン (lerna-handson) で使用するサンプルアプリと演習問題です。
Releases · lerna-stack/lerna-handson から、 次の3つのファイルをダウンロードしてください。
- アーカイブファイル (zip もしくは tar.gz)
サンプルアプリと演習問題のソースコードです。 hands-on-preparation.pdf
環境構築などの事前準備が記載された資料です。hands-on.pdf
ハンズオンで使用する説明資料です。
hands-on-preparation.pdf
に従って環境構築を行うことで、
サンプルアプリの動作確認や演習問題に取り組むことができるようになります。
サンプルアプリを動かしてみましょう。
サンプルアプリは REST API を提供するサーバです。
コンサートのチケット購入サービス を想定したサンプルとなります。
ターミナル1
cd docker
docker-compose up
ターミナル2
./scripts/runServer1.sh
ターミナル3
# コンサート作成 (コンサート名=RHCP, チケット枚数=3)
curl --silent --noproxy '*' -X POST -H "Content-Type: application/json" -d '{"tickets":3}' localhost:9001/concerts/RHCP
# コンサート取得 (コンサート名=RHCP)
curl --silent --noproxy '*' localhost:9001/concerts/RHCP
# コンサートチケット購入 (コンサート名=RHCP, チケット購入枚数=1)
curl --silent --noproxy '*' -X POST -H "Content-Type: application/json" -d '{"tickets":1}' localhost:9001/concerts/RHCP/tickets
# コンサートキャンセル (コンサート名=RHCP)
curl --silent --noproxy '*' -X POST localhost:9001/concerts/RHCP/cancel
# コンサート一覧
# 一覧に反映されるまでは遅延時間があります。
curl --silent --noproxy '*' localhost:9001/concerts
- docker
サンプルアプリの動作に必要な Cassandra と MariaDB の Dockerfileがあります。 - exercise-accord-basic
Accord のサンプルコードがあります。 - exercise-akka-basic
Akka のサンプルコードがあります。
演習問題も含まれています。 - exercise-akka-persistence-basic
Akka Persistence のサンプルコードがあります。
演習問題も含まれています。 - exercise-akka-http-basic
Akka HTTP のサンプルコードがあります。
演習問題も含まれています。 - exercise-scala-basic
Scala のサンプルコードがあります。
演習問題も含まれています。 - exercise-slick-basic
Slick のサンプルコードがあります。 - sample-app
サンプルアプリです。 - scripts
サンプルアプリを起動するためのスクリプトです。
技術トピックごとにディレクトリがあり、
ハンズオン説明資料で使用したサンプルコードが含まれています。
また、演習問題が含まれているものもあります。
各ディレクトリには、example, exercise, answer というパッケージがあります。
- example
サンプルコード(スライドなどに載せているものになります) - exercise
演習問題に必要なファイルがあります。 - answer
演習問題の答えがあります。
サンプルアプリは REST API を提供するサーバです。
コンサートのチケット購入サービス を想定したサンプルとなります。
まず、次の2つのサービスを起動します。
- Cassandra
- MariaDB
cd docker
docker-compose up
# (停止するには Ctrl+C)
サンプルアプリ(APIサーバ)を起動します。 クラスタで起動できます。 最低1台のノードを起動する必要があります。
./scripts/runServer1.sh
# 次の2つはオプション
./scripts/runServer2.sh
./scripts/runServer3.sh
演習向けテストを除外してテストする方法を準備しています。
sbt testAll
演習ごとに特別なテスト用sbtコマンドを準備しています。
sbt testMyConcertActorBinding
sbt testMyConcertActor
sbt testMyBoxOfficeResourceBinding
sbt testMyBoxOfficeResource
sbt testMyConcertProjectionRepositoryBinding
sbt testMyConcertProjectionRepository
ポート 9001 の HTTPサーバ (runServer1.shで起動する) にリクエストしています。
(runServer2.shやrunServer3.shで複数台起動している場合は)、
9002,9003 のサーバにリクエストしても問題ありません。
# コンサート作成 (コンサート名=RHCP, チケット枚数=3)
curl --silent --noproxy '*' -X POST -H "Content-Type: application/json" -d '{"tickets":3}' localhost:9001/concerts/RHCP
# コンサート取得 (コンサート名=RHCP)
curl --silent --noproxy '*' localhost:9001/concerts/RHCP
# コンサートチケット購入 (コンサート名=RHCP, チケット購入枚数=1)
curl --silent --noproxy '*' -X POST -H "Content-Type: application/json" -d '{"tickets":1}' localhost:9001/concerts/RHCP/tickets
# コンサートキャンセル (コンサート名=RHCP)
curl --silent --noproxy '*' -X POST localhost:9001/concerts/RHCP/cancel
# コンサート一覧
# 一覧に反映されるまでは遅延時間があります。
curl --silent --noproxy '*' localhost:9001/concerts
次の2つのサービスのデータを削除します。
- Cassandra
- MariaDB
docker-compose down --volumes
パッケージは次の通りです。
プロジェクト構成詳解 と同様の構成になっています。
example.adapter
Application の インターフェース (trait) を定義します。example.application
業務ロジックを記述します。example.application.command
書き込みとインメモリからの読み込みを実装します。example.application.projection
リードモデル更新を実装します。example.application.query
リードモデルからの読み込みを実装します。
example.entrypoint
Main クラスを実装します。example.presentation
HTTP API を実装します。exaple.readmodel
RDBMS にアクセスするコードを配置します。
コンピュータのスペックによってはタイムアウト値が短すぎてテストに失敗する場合があります。 sample-app/src/test/resources/application.conf にある次の設定値をすることで、タイムアウト値を変更することができます。
akka.test.default-timeout = 5s
akka.test.timefactor = 1.0
- Cassandra に永続化されたデータを確認する方法は、Cassandra の基本操作 に記載されています。
- MariaDB に永続化されたデータを確認する方法は、MariaDB の基本操作 に記載されています。
lerna-handson に関する注目すべき変更は、CHANGELOG.md で確認できます。
リリース方法などは CONTRIBUTING.md に記載されています。
lerna-handson, except for files in the docs directory, is released under the terms of the Apache License Version 2.0. The files in the docs is released under the Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0).
© 2021 TIS Inc.