§Play 2.2の新機能
§JavaとScalaの新しい結果構造
以前は、結果はプレーンまたは非同期、チャンクまたはシンプルのいずれかでした。 これらすべての異なる型を処理する必要があるため、アクションの構成とフィルターの実装が困難でした。多くの場合、すべての型の結果に適用する必要がある機能がありましたが、非同期の結果を再帰的にアンラップし、チャンクとシンプルな結果に同じロジックを適用するようにコードを実装する必要がありました。
また、Playの同期アクションと非同期アクションの間に人為的な区別が生じ、混乱を招き、Playが同期モードと非同期モードで動作できると考えさせられました。 実際、Playは100%非同期であり、結果が非同期に返されるかどうかの違いは、IOなどの他の非同期アクションをアクション処理中に実行する必要があるかどうかだけです。
そのため、JavaとScalaの結果の構造を簡素化しました。 現在、結果タイプは`SimpleResult`のみです。 `Result`スーパークラスは多くの場所ではまだ機能しますが、非推奨です。
Javaアプリケーションでは、これはアクションがリクエスト中に非同期処理を実行する場合に`Promise<SimpleResult>`を返すことができることを意味しますが、Scalaアプリケーションでは次のように`async`アクションビルダーを使用できます
def index = Action.async {
val foo: Future[Foo] = getFoo()
foo.map(f => Ok(f))
}
§バッファリングとキープアライブの制御の向上
Playが結果をバッファリングする方法とタイミングは、Scala APIでより適切に表現されるようになりました。`SimpleResult`には、`HttpConnection`型の`connection`という新しいプロパティがあります。
`Close`に設定すると、本文が送信されると応答が閉じられ、バッファリングは試行されません。 `KeepAlive`に設定すると、PlayはHTTP仕様に従って接続を維持しようと最善を尽くし、転送エンコーディングまたはコンテンツ長が指定されていない場合にのみ応答をバッファリングします。
§新しいアクション構成とアクションビルダーメソッド
Scalaアプリケーション向けに、より強力なアクションスタックの構築を可能にする`ActionBuilder`トレイトを提供するようになりました。 例えば
object MyAction extends ActionBuilder[AuthenticatedRequest] {
def invokeBlock[A](request: Request[A], block: (AuthenticatedRequest[A]) => Future[SimpleResult]) = {
// Authenticate the action and wrap the request in an authenticated request
getUserFromRequest(request).map { user =>
block(new AuthenticatedRequest(user, request))
} getOrElse Future.successful(Forbidden)
}
// Compose the action with a logging action, a CSRF checking action, and an action that only allows HTTPS
def composeAction[A](action: Action[A]) =
LoggingAction(CheckCSRF(OnlyHttpsAction(action)))
}
結果のアクションビルダーは、組み込みの`Action`オブジェクトと同様に、オプションのパーサーとリクエストパラメーター、および非同期バリアントで使用できます。 アクションに渡されるリクエストパラメーターの型は、ビルダーで指定された型になります。上記の例では、`AuthenticatedRequest`です。
def save(id: String) MyAction(parse.formUrlEncoded) = { request =>
Ok("User " + request.user + " saved " + request.body)
}
§Java Promise APIの改善
Java Promiseクラスは、ScalaのFuture and Promiseに近づけるために改善されました。 特に、実行コンテキストをPromiseのメソッドに渡すことができるようになりました。
§Iterateeライブラリ実行コンテキストの受け渡し
Iteratee、Enumeratee、およびEnumeratorのメソッドを呼び出すときに、実行コンテキストが必要になりました。 Iterateeライブラリに実行コンテキストを公開することで、実行場所をより細かく制御できるようになり、場合によってはパフォーマンスが向上する可能性があります。
実行コンテキストは暗黙的に提供できるため、Iterateeを使用するコードへの影響はほとんどありません。
§sbt 0.13のサポート
使いやすさとパフォーマンスのさまざまな改善がありました。
使いやすさの改善点の1つは、Playプロジェクトの構築に`build.sbt`ファイル(例:`samples/java/helloworld/build.sbt`)がサポートされるようになったことです。
import play.Project._
name := "helloworld"
version := "1.0"
playJavaSettings
`playJavaSettings`は、Javaプロジェクトに必要なすべてを宣言するようになりました。 同様に、`playScalaSettings`はPlay Scalaプロジェクト用に存在します。 この新しいビルド構成の例については、サンプルプロジェクトを確認してください。 `build.scala`と`play.Project`を使用して以前の方法も引き続きサポートされています。
sbt 0.13の変更点の詳細については、リリースノートを参照してください。
§新しいステージタスクと配布タスク
Native Packager Pluginを使用するために、_stage_タスクと_dist_タスクが完全にオーバーホールされました。
Native Packagerを使用する利点は、通常のzipファイルに加えて、tar.gz、RPM、OS Xディスクイメージ、Microsoftインストーラー(MSI)など、多くのタイプのアーカイブがサポートされるようになったことです。 さらに、WindowsバッチスクリプトとUnixバッチスクリプトがPlayに提供されるようになりました。
詳細については、アプリケーションのデプロイドキュメントを参照してください。
§組み込みgzipサポート
Playはすべてのレスポンスをgzip圧縮するための組み込みサポートを備えています。 有効にする方法については、gzipエンコーディングの構成を参照してください。
§ドキュメントJAR
Playの配布では、ドキュメントがディレクトリではなくJARファイルに保存されるようになりました。 JARファイルは、ツーリングのサポートを強化します。
Play 2.1と同様に、Playアプリケーションを開発モードで実行するときに、特別な`/@documentation`アドレスにアクセスしてドキュメントを表示できます。
生のファイルにアクセスする場合は、配布物に含まれる`play-docs` JARファイルにあります。
次:移行ガイド
このドキュメントに誤りが見つかりましたか? このページのソースコードはこちらにあります。 ドキュメントガイドラインを読んだ後、プルリクエストを送信してください。 質問やアドバイスはありますか? コミュニティフォーラムにアクセスして、コミュニティとの会話を開始してください。