ColdSpringAOP Sample
SeanのModelGlue+ColdSpringサンプルアプリケーションGGCC9における
ColdSpringのAOP機能をチェックしてみます。
ggcc.xmlを眺めてみると・・・task関連処理におけるセキュリティチェックに
AOP機能を適用しているようです。
Target:
taskDAOTarget(class->ggcc9.model.taskDAO)
taskGatewayTarget(class->ggcc9.model.taskGateway)
Advice:
checkIdentity(class->ggcc9.aspects.checkIdentity)
Advisor:
securityAdvisor(Advice->checkIdentity MappedNames->*)
Service:
taskDAO:Target->taskDAOTarget InterCepternames->securityAdvisor
taskGateway:Target->taskGatewayTarget InterCepternames->securityAdvisor
このことによって、event-handlerの定義からセキュリティチェックの前処理がなくなって
います。
ggcc9->ModelGlue.xml->event-handler:showManager
<event-handler name="ggcc.showmanager">
<broadcasts>
<--
<message name="checkIdentity"/> <--- AOP化したことにより、コメント化
-->
<message name="needMembers"/>
<message name="needMembersByID"/>
<message name="needTasks"/>
<message name="needStatii"/>
<message name="needStatiiByID"/>
</broadcasts>
<views>
<include template="dspShowTaskList.cfm" name="content">
<value name="XFA.AddTask" value="ggcc.newtask"/>
<value name="XFA.ChangeIdentity" value="ggcc.identify"/>
<value name="XFA.TaskDetail" value="ggcc.showtask"/>
</include>
<include template="layGGCC.cfm" name="final"/>
</views>
</event-handler>
また、DAOとGatewayをビーン化したことにより、コントローラーtaskManager.cfcの
内部が非常にシンプルになっています。
■GGCC7->taskManager.cfc->saveTask
<cffunction name="saveTask" returntype="ModelGlue.Core.Event" access="public" output="false">
<cfargument name="event" type="ModelGlue.Core.Event" required="true"/>
<cfset var taskID = arguments.event.getValue("taskID") />
<cfset var ownerID = arguments.event.getValue("ownerID") />
<cfset var statusID = arguments.event.getValue("statusID") />
<cfquery datasource="#variables.dsn#" username="#variables.dbUser#" password="#variables.dbPass#">
UPDATE ggcctask
SET ownerID = <cfqueryparam value="#ownerID#" cfsqltype="cf_sql_varchar"/>,
statusID = <cfqueryparam value="#statusID#" cfsqltype="cf_sql_varchar"/>,
lastUpdated = <cfqueryparam value="#now()#" cfsqltype="cf_sql_date"/>
WHERE taskID = <cfqueryparam value="#taskID#" cfsqltype="cf_sql_varchar"/>
</cfquery>
<cfreturn arguments.event />
</cffunction>
■GGCC9->taskManager.cfc->saveTask
<cffunction name="saveTask" returntype="ModelGlue.Core.Event" access="public" output="false">
<cfargument name="event" type="ModelGlue.Core.Event" required="true"/>
<cfset var task = createObject("component","ggcc9.beans.taskBean").init(argumentCollection=arguments.event.getAllValues()) />
<cfset variables.taskDAO.update(task) />
<cfreturn arguments.event />
</cffunction>
次回は、Javaのlog4Jをロギングに使う場合のサンプルについて解説します。
コメント