内包されているプラグインplayframework1はモジュールによって機能拡張できる仕組みになっているが、これはフレームワーク内についても同様。フレームワークの主な機能は、play.PlayPluginクラスを継承してプラグイン機構を利用する形で、実装されている。内包されているプラグイン一覧framework/src/play.plugins0:play.CorePlugin100:play.data.parsing.TempFilePlugin200:play.data.validation.ValidationPlugin300:play.db.DBPlugin400:play.db.jpa.JPAPlugin450:play.db.Evolutions500:play.i18n.MessagesPlugin600:play.libs.WS700:play.jobs.JobsPlugin100000:play.plugins.ConfigurablePluginDisablingPluginこれらに倣えば、同じレベルの機能をモジュールを使って機能拡張できるということになる。フレームワーク内に切り込むようなプラグインを作成する時は、この優先度を意識して設定する必要がありそうだ。優先順についてフレームワークは、クラスパス上に置かれた、play.pluginsファイルを片っ端から読み込まれ、優先順にロードされる。(優先順を示す数値は、少ないほど優先度が高い)イベントの実行も、優先順に従う。唯一、アプリケーション終了のイベントだけは、逆順で実行される。play.data.parsing.TempFilePlugin一時ファイルの作成を助けるプラグイン。FileUploadをサポートするのが目的。スレッドローカルで安全な一時フォルダを作成し(play.data.parsing.TempFilePlugin.createTempFolder())、不要になったら速やかに削除する。後始末についてはあまり考えなくて良いが、作成したフォルダと配下のファイルは、レスポンスを返す直前に削除されるのでrenderBinaryなどで返すことができない。play.data.validation.ValidationPluginリクエストパラメータに対する検証処理、および結果のクリアなどの裏処理を担当する。play.db.DBPluginDB接続設定をもとに、DB接続オブジェクトを生成する。H2を使用するときは、H2サーバの起動/停止も行なう。DB接続設定に困ったときや、省略時の扱いなどが知りたくなったときに、ソースを見ると非常に参考になる。play.db.jpa.JPAPluginjpa関連の機能をサポート。jpa関連の設定読み込み&反映、modelクラスの拡張、modelファイルの認識、エンティティマネージャの取り回しなど。play.db.Evolutions(あとで)play.i18n.MessagesPluginメッセージ定義ファイルの読み込み。play.libs.WSSimpleHTTPクライアントを使うための準備、後始末。play.jobs.JobsPluginユーザ定義ジョブを認識し、スケジュール管理下に置き、スケジュール実行を開始する。開始時に、@OnApplicationStartアノテーションが付与されたジョブを実行する。終了時に、@OnApplicationStopアノテーションが付与されたジョブを実行する。play.plugins.ConfigurablePluginDisablingPlugin優先度の極端に低いこのプラグインが気になったので調べてみたところ、プラグインを無効化するプラグインのようである。"plugins.disable"で始まる設定を記述し、無効化したいプラグインクラスの正式名称を記述する。コメントを抜粋しておく。{無効化したいプラグインを複数、記述できるようだ。ロードしたプラグインを、設定ファイルに従って無効化していく方式になっている点に注意。モジュールについては、プラグイン以外の資材は無効化されないようなので、この点も注意。