My favorites | Sign in
t-2
Project Home Downloads Wiki Issues Source
READ-ONLY: This project has been archived. For more information see this post.
Search
for
ExtensionPoints  

en , ja
Updated Mar 24, 2011 by shinpei.ohtani@gmail.com

T2の拡張ポイントをまとめました.

拡張ポイント

T2では主な振る舞いを決めるコンポーネントは置き換え可能になっています.

ユーザがそれぞれのアプリケーション形態、ビジネス形態にあわせてコンポーネントを入れ替える事が可能です.

Navigation

Navigationインタフェースの独自実装クラスはユーザが最も使用する可能性が高いケースです.

先に説明があったように、デフォルトの挙動がそぐわない場合やユーザの嗜好にあわせたい場合、

例えばJSONクラスが内部的に使っているJSON変換ライブラリをJsonicに変換したいなど、自前でNavigationクラスを作成する事が可能です.

ContainerAdapter

ContainerAdapterはいわゆるDIコンテナなどのコンポーネント管理フレームワークとのアダプタ機能を提供します.

この機能を使えば、ユーザが自作フレームワークなどのコンポーネント管理群とシームレスに統合することが可能です.

実際に実装する際には、ベースクラスであるAbstractContainerAdapterを拡張するのが良いでしょう.

Plugin

PluginはT2内部に組み込まれたプラグイン機構を使って、T2の振る舞いを変更する機能です.

以下のようなフェーズをもっており、Pluginクラスに対応する各メソッドがあるので、これを実装する事でT2の挙動を変更する事が出来ます.

フェーズ メソッド名 説明
初期化 initialize T2Filter#init()で呼ばれる初期化メソッドです
リクエスト処理開始 beginRequestProcessing T2Filter#doFilterによって、リクエスト処理が開始されます.
リクエスト生成 createRequest もし独自リクエストクラスに置き換えたりラップしたりする場合などに使用します.
レスポンス生成 createResponse もし独自レスポンスクラスに置き換えたりラップしたりする場合などに使用します.
コンポーネント生成 componentCreated Pageインスタンスが生成された直後に呼ばれます.インスタンスを検査したりラップしたりすることが可能です.
アクションメソッド実行前 beforeActionInvoke アクションメソッドが実行される直前に実行されます.
アクションメソッド実行後 afterActionInvoke アクションメソッドが実行された直後に実行されます.
Navigation実行前 beforeNavigation Navigationで画面遷移が実行される直前に実行されます.
Navigation実行後 afterNavigation Navigationで画面遷移が実行された直後に実行されます.
リクエスト処理終了 endRequestProcessing T2Filter#doFilterによって、リクエスト処理が終了されたときに実行します.
破棄 destroy T2Filter#destroy()で呼ばれる破棄メソッドです

AnnotationResolverCreator

メソッドアノテーションと引数アノテーションに対して、各リゾルバクラスを結びつけるファクトリクラスです.

このクラスを拡張する事によって、独自のアノテーションとリゾルバクラスを生成したりマッピングしたりすることが出来ます.

AnnotationResolverCreatorはメソッドアノテーションとそのハンドラであるActionMethodResolver、

引数アノテーションとそのハンドラであるParameterResolverを結びつける機能を提供するインタフェースです.

このインタフェースはユーザによって拡張されることを意図しており、拡張方法としては主にjava.util.ServiceLoaderを使う想定です.

そのため、/META-INF/services/org.t2framework.spi.AnnotationResolverCreatorというファイルを配置して、

その中に実装クラスを置くことで独自アノテーションとそのハンドラを追加したり、既存のものを変更したりすることが出来ます.

WebApplicationCreator

WebApplicationCreatorはT2のコンテキストオブジェクトファクトリである、WebApplicationを生成するクラスです.

このクラスを置き換える事で、T2のコンテキストオブジェクトごと置き換えたりする事が可能になります.

ActionInvoker/ActionInvokerFactory

ActionInvokerはアクション実行のためのインタフェースです.このクラスはユーザがアクション実行のためのプロセスを拡張する場合に

置き換えることを意図しています.

一方ActionInvokerFactoryはどのActionInvokerを実行するかと、その実行順序を決定します

拡張するにはActionInvokerFactoryをContainerAdapter経由で取得できるようにお使いのDIコンテナに登録しておく必要があります.

FormResolver

FormResolverはリクエストと@Formで指定されたオブジェクトをマッピングするためのインタフェースです。

デフォルトでは、org.t2framework.t2.spi.impl.FormResolverImplが使用されて、リクエストとオブジェクトをマッピングします.

デフォルトのマッピングでは、リクエストのパラメータ名とオブジェクトのプロパティ名が同一の場合に型変換されて、オブジェクトをマッピングします.

変換エラーが出た場合、ErrorInfoにエラー詳細が入ります.このErrorInfoはT2のアクションメソッドの引数としてインジェクトすることが出来ます.

この拡張ポイントは以下のようなケースで使用することを想定しています.

  1. デフォルトの変換が不適切なケース(バグと思われる場合は報告してもらえると助かります)
  2. 各プロジェクト固有の変換が必要なケース

・登録方法

ContainerAdapterから取得できるようにお使いのDIコンテナの登録方法で登録してください.

・使用方法

以下のように、@Form#resolverClassで指定します.

public Navigation execute(@Form(resolverClass = MyFormResolver.class) Employee emp, ErrorInfo errorInfo) {
   ...
}
Powered by Google Project Hosting