Play framework 2.0 betaが出たようです5 – Applicationのグローバル設定

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Applicationのグローバル設定

前回はControllerとRoutingについてご紹介しました。今回はアプリケーション全体で適用されるグローバル設定についてご紹介します。
Globalオブジェクトを定義すると、アプリケーション全体の設定を処理することが可能です。
このオブジェクトは、_root_パッケージで定義されている必要があります。

import play.api._

object Global extends GlobalSettings {

}

GlobelオブジェクトはGlobalSettingsトレイトをmixinします。このあとGlobalSettingsのいくつかのメソッドについて解説していきます。

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.7.2
  • Playframework : 2.0β
  • Java : 1.6.0_26

注意:
この記事ではβ版を使用しています。
正式リリース前の状況のため思わぬ不具合が生じるかもしれませんので、ご了承ください。

アプリケーションの開始、終了イベントをハンドリングする

OnStartメソッドとOnStopをオーバーライドすれば、アプリケーションの開始時と終了時に処理が可能です。

import play.api._

object Global extends GlobalSettings {

  override def onStart(app: Application) {
    Logger.info("Application has started")
  }  
  
  override def onStop(app: Application) {
    Logger.info("Application shutdown...")
  }  
    
}

このobjectをアプリケーションのルートパッケージにおいて、アプリケーションを起動してみてください。
アプリケーション起動時(DEVモードでは初回アクセス時)にonStart、ctrl + dでアプリケーションの終了時にonStopが実行されます。

エラーページを提供する

アプリケーションで例外が発生した場合、onErrorメソッドが呼び出されます。
デフォルトでは、あらかじめフレームワークで用意されたエラーページが表示されます。
先ほど作成したGlobalオブジェクトにonErrorメソッドを追加します。

override def onError(request: RequestHeader, ex: Throwable) = {
    Logger.error("this is Error!!!!")
    InternalServerError(
      views.html.errorPage(ex))
}

onErrorではerrorPageへ処理を渡しているので、app/viewsディレクトリにerrorPage.scala.htmlを作成し、下記の内容を記述します。

@(ex: Throwable)

@main("Error") {
    Error!
}

Controllerでわざと例外を発生させて試してみてください。onErrorが実行され、errorPage.scala.htmlが表示されます。
また、Actionがみつからなかった場合に発生するonActionNotFoundや、routeがみつからなかった場合のonBadRequestもあるので、必要に応じてoverrideしてください。

まとめ

今回はアプリケーション全体の処理についてご紹介しました。
Globalオブジェクトを使用すれば、例外処理などはここで一元管理できそうですね。

参考サイトなど