フォトアルバム

2011年10月

            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

なかのひと

373news.com

google Search

  • Google
    blog.ganymean.org
    WWW

Google Analytics

« ColdSpringAOP | メイン | ModelGlue1.0.01の新機能 »

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をロギングに使う場合のサンプルについて解説します。


トラックバック

このページのトラックバックURL:
http://app.synapse-blog.jp/t/trackback/190195/6026019

ColdSpringAOP Sampleを参照しているブログ:

コメント

コメントを投稿

コメントは記事の投稿者が承認するまで表示されません。

ログイン

  • コントロールパネルへのログイン
    アカウント:

    パスワード:

更新ブログ

最近のトラックバック

Google

ブログ powered by TypePad
Member since 04/2005