« Transfer の clone 機能 | メイン | Observer を Inject する »

Transfer Event Model

Transfer Event Model とは、なんだろうか。
データベースのテーブルをマッピングした Transfer オブジェクト経由でデータベース上のデータに対してなんらかの変更が加えられた(もしくは、変更が加えられる)ことを監視して、処理を発生させることができるということのようだ。

処理を発生させることができるタイミングとしては、AfterNew、BeforeCreate、AfterCreate、BeforeUpdate、AfterUpdate、BeforeDelete、AfterDelete とあるので、オブジェクト新規作成後、データベースへの挿入前、挿入後、更新前、更新後、削除前、削除後となるだろうか。

そして、発生させる処理の関数名は、それらタイミングによって、決められている。

オブジェクト新規作成後であれば、actionAfterNewTransferEvent などとなっている。
Transfer フレームワークに observer を登録する関数もそれぞれで異なっている。addAfterNewObserver など。

実装の仕方

●イベントモデル(observer)の作成。
/ shopping / model / observer / EventModel.cfc
とりあえず、空コンポーネント。

 <cfcomponent displayname="EventModel" output="false">
 <cfprocessingdirective pageencoding="UTF-8" />
 
 </cfcomponent>

●Bean 設定
ColdSpring.xml
 <bean id="observer" class="&topOfPackage;.model.observer.EventModel" />

●モデルコンポーネントに AutoWire setter 関数追加

 <cffunction name="setObserver" access="public" returntype="void" output="false">
  <cfargument name="observer" type="shopping.model.observer.EventModel" required="true">
  <cfset variables.observer = arguments.observer />
 </cffunction>

●モデル上で Transfer に observer 登録
例として、Transfer オブジェクト新規作成後監視処理を追加。
 <cfset variables.transfer.addAfterNewObserver(variables.observer) />
この追加処理は、AutoWire タイミングの関係で、モデルコンポーネントの初期化時や、AutoWire の setter 関数の中には、入れることはできない。
もちろん、AutoWire ではなく、Bean の初期化コードを書けば、その限りではないだろう。
CartProcess.cfc の insertItem 関数の中に、上記の一行を追加した。

●observer に所定の関数実装
動きを見たいだけなので、ログを書き出すだけの処理。

 <cffunction name="actionAfterNewTransferEvent" hint="Actions an event before a create happens" access="public" returntype="void" output="false">
 <cfargument name="event" hint="The event object" type="transfer.com.events.TransferEvent" required="Yes">
 <cfset var message = arguments.event.getTransferObject().getClassName() />
 <cflog application="yes" text="#message#:new" type="information" file="shoppinglog">
 </cffunction>

トラックバック

このエントリーのトラックバックURL:
http://www.schwarzmond.info/mt/mt-tb.cgi/77

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2008年06月02日 09:23に投稿されたエントリーのページです。

ひとつ前の投稿は「Transfer の clone 機能」です。

次の投稿は「Observer を Inject する」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。