読者です 読者をやめる 読者になる 読者になる

謎言語使いの徒然

適当に気になった技術や言語を流すブログ。

Play 2.4.x をいい加減調べてみる

日記 学習 Playframework

色々変わったそうなので、まずはハイライトを見てみる。

https://www.playframework.com/documentation/2.4.x/Highlights24

  • DI サポート
    • テストにおけるモックを容易にしたかった
    • 軽量な組み込みPlayアプリケーションや、一つのJVM上で複数のPlayアプリケーションを立ち上げるなど、インジェクションを利用したより面白そうなことがしたかった
    • 下記の理由により、アプリケーションライフサイクルが容易に追っかけられるようにしたかった

Removing Play’s global state is however a big task that will require some disruptive changes to the way Play applications are written. The approach we are taking to do this is to do as much as possible in Play 2.4 while maintaining backwards compatibility. For a time, many of Play’s APIs will support both methods that rely on require global state and methods that don’t rely on global state, allowing you to migrate your application to not depend on global state incrementally, rather than all at once when you uprgade to Play 2.4.

Play のグローバル・ステートの取り除きは、既に書かれたアプリケーションに対して破壊的な変更を加えるようなビックタスクの一つです。このアプローチを後方互換性を維持しつつ行うために、Play2.4 の実装を行っています。Play2.4では、多くのPlay APIでグローバル・ステートに頼るメソッドと、グローバル・ステートに頼らないメソッドをサポートしており、グローバル・ステートに頼らないマイグレート手段を提供することになります。

The first step to removing global state is to make it such that Play components have their dependencies provided to them, rather than looking them up statically. This means providing out of the box support for dependency injection.

そのファーストステップとして、静的な依存をするよりも、依存を外から供給されるようなモデルで Play components を作った。つまりDIのサポートによる、ボックス外からの依存供給だ。

訳合ってる自信はないが、ニュアンスはこんな感じだと思う。

アプローチは、

最後のは Scaler の人だけの恩恵か?Java で Cake とか返って面倒そうな…。

テストが大幅に変わった。 ScalaTestingWithGuice

なるほどDIによる依存切り離しを実にそのまま実装してるね。

ScalaTestingWithDatabases DB テストの書き方も変更になったし、Evolution を切り離したところもそうだけど、テスト中での Evolution/カスタムEvolution にも対応したと。

ScalaTestingWebServiceClients ダミーサーバを作ってのテストもかなり容易になった。ダミー応答もリソースの中に置いとける。

アプケーション内での組み込みサーバ とかいい意味で気持ち悪い。

サブプロジェクト間で、リバースルーティングに対応 AggregatingReverseRouters

Anorm 切り離し。Ebean 切り離し(Scala-ActiveRecord ばっか使ってたから気づかなかった…)。HikariCP Support(なんか勝手に使ってた…すまん。WS のHTTPSでのSNIサポート。

実験的サポートで、Akka HTTP support、Reactive Streams Support(非同期ストリーミング処理フレームワークの一種。JSR にしてやるって頑張ってる)と。
個人的に Akka HTTP はスッゲー気になるけど、試験サポートだからちょっと放置。

まずは使い慣れるのが先と。

サブプロジェクト間でリバースルーティングができるというのは非常に気になる。
サンプルでも載ってたけど、Web インターフェースと REST API を切り離すということができそう。