フォトアルバム

2009年7月

      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  

なかのひと

アンケート

  • Do you Like?
    アンケート
    どのColdfusion用フレームワークが好き?
    ModelGlue:Unity
    ModelGLue
    Mach-II
    FuseBox
    LiteWire
    OnTap
    ColdBox
    OnAir
    cfWheels
    CFRails

    [PR]アンログ.jp 自動車保険

373news.com

想ひ出

  • Dvc00050
    携帯で撮った写真をアルバムにしています。

サムネイル

  • CF-OOP









  • ganymean.org









  • シナプス

Google Analytics

« CF-OOPのリソースリスト | メイン | Coldfusion最新アーキテクチャ »

MG1.1からMG:Unityへのアップグレード(その1)

ModelGlue:UnityによるCFアプリケーション開発の慣らし運転として、ModelGlue1.1ベースで作成されたサンプルアプリケーションをModelGlue:Unityにアップグレードしてみます。

選定するサンプルアプリケーションは、以前の記事で紹介したBrian Kotekのmgbookstorereactor。DIにColdspringを、ORMにReactorを使用しているので、ModelGlue:Unityへの移行ポイントがつかみやすいと思います。

移行ポイントは、以下の3点になります。

  1. Coldspring.xmlによる依存性注入パラメータの集中管理
  2. ormAdaptorとormServiceによるORM選択(Reactor/Transfer)
  3. 各種コントローラからinit()メソッドの削除

1点目の’Coldspring.xmlによる依存性注入パラメータの集中管理’とは、ModelGlue.xmlとReactor.xml内のConfigディレクティブを、Coldspring.xmlに移すということです。
最初に、ModelGlue.xml内のconfigディレクティブをカットし、Coldspring.xmlにペーストしてから、autowireControllers属性を削除します。

■ModelGlue.xml(ModelGlue1.1)

    <config>
        <setting name="beanMappings" value="/mgbookstorereactor/config/Coldspring.xml" />
        <setting name="viewMappings" value="/mgbookstorereactor/views/pages,/mgbookstorereactor/views/layouts,/mgbookstorereactor/views/sidebarblocks" />
        <setting name="reload" value="true" />
        <setting name="defaultEvent" value="home" />
        <setting name="applicationMapping" value="/mgbookstorereactor" />
        <setting name="modelGlueMapping" value="/ModelGlue" />
        <setting name="beanFactoryLoader" value="ModelGlue.Core.ColdSpringLoader" />
        <setting name="defaultExceptionHandler" value="exception" />
        <setting name="debug" value="true" />
        <setting name="statebuilder" value="ModelGlue.Util.GenericCollection" />
        <setting name="reloadKey" value="init" />
        <setting name="reloadPassword" value="true" />
        <setting name="statePrecedence" value="form" />
        <setting name="eventValue" value="event" />
        <setting name="defaultTemplate" value="index.cfm" />
        <setting name="defaultCacheTimeout" value="5" />
        <setting name="autowireControllers" value="true" />       
    </config>

■ColdSpring.xml(ModelGlue:Unity)

  <!-- This is your Model-Glue configuration -->
  <bean id="modelGlueConfiguration" class="ModelGlue.unity.framework.ModelGlueConfiguration">
    <!-- Be sure to change reload to false when you go to production! -->
    <property name="reload"><value>true</value></property>
    <!-- Rescaffold is overridden by reload - if reload is false, rescaffold's setting doesn't matter -->
    <property name="rescaffold"><value>true</value></property>
    <!-- Be sure to change debug to false when you go to production! -->
    <property name="debug"><value>true</value></property>
    <property name="defaultEvent"><value>home</value></property>
    <property name="reloadPassword"><value>true</value></property>
    <property name="viewMappings"><value>/mg2test/views,/mg2test/views/pages,/mg2test/views/layouts,/mg2test/views/sidebarblocks</value></property>
    <property name="generatedViewMapping"><value>/mg2test/views/generated</value></property>
    <property name="configurationPath"><value>config/ModelGlue.xml</value></property>
    <property name="scaffoldPath"><value>config/scaffolds/Scaffolds.xml</value></property>
    <property name="statePrecedence"><value>form</value></property>
    <property name="reloadKey"><value>init</value></property>
    <property name="eventValue"><value>event</value></property>
    <property name="defaultTemplate"><value>index.cfm</value></property>
    <property name="defaultExceptionHandler"><value>exception</value></property>
    <property name="defaultCacheTimeout"><value>5</value></property>
    <property name="defaultScaffolds"><value>list,edit,view,commit,delete</value></property>
  </bean>

次に、Reactor.xml内のconfigディレクティブをカットし、ColdSpring.xml内のreactorConfigurationビーンのプロパティに定義します。

■Reactor.xml(ModelGLue1.1)

    <config>
        <dsn value="Test" />
        <type value="mysql4" />
        <mapping value="/mgbookstorereactor/data/" />
        <mode value="always" />
        <project value="mgbookstorereactor" />
    </config>

■ColdSpring.xml(ModelGlue:Unity)

        <bean id="reactorConfiguration" class="reactor.config.config">
            <constructor-arg name="pathToConfigXml"><value>/mg2test/config/reactor/Reactor.xml</value></constructor-arg>
            <property name="project"><value>mg2test</value></property>
            <property name="dsn"><value>Test</value></property>
            <property name="type"><value>mysql4</value></property>
            <property name="mapping"><value>/mg2test/model/data/reactor</value></property>
            <property name="mode"><value>production</value></property>
        </bean>

 

2点目の’ormAdaptorとormServiceによるORM選択(Reactor/Transfer)’とは、ormAdaptorとormServiceとしてReactorをAlias指定することと、reactorFactoryからormServiceに変更します。また、ControllerであるProductManager.cfc内のreactorFactoryをすべてormServiceに置換します。

■Coldspring.xml(ModelGLue1.1)

<bean id="reactorFactory" class="reactor.reactorFactory">
        <constructor-arg name="configuration">           
    <value>/mgbookstorereactor/config/reactor.xml</value>
        </constructor-arg>
</bean>

<bean id="productGateway" factory-bean="reactorFactory" factory-method="createGateway">
        <constructor-arg name="objectAlias">
            <value>product</value>
        </constructor-arg>
</bean>

<bean id="productDAO" factory-bean="reactorFactory" factory-method="createGateway">
        <constructor-arg name="objectAlias">
            <value>product</value>
        </constructor-arg>
</bean>

<bean id="orderGateway" factory-bean="reactorFactory" factory-method="createGateway">
        <constructor-arg name="objectAlias">
            <value>order1</value>
        </constructor-arg>
</bean>

■ColdSpring.xml(ModelGLue:Unity)

<alias alias="ormAdapter" name="ormAdapter.Reactor" />
<alias alias="ormService" name="ormService.Reactor" />    <bean id="productGateway" factory-bean="ormService" factory-method="createGateway">
        <constructor-arg name="objectAlias">
            <value>product</value>
        </constructor-arg>
</bean>

<bean id="productDAO" factory-bean="ormService" factory-method="createGateway">
        <constructor-arg name="objectAlias">
            <value>product</value>
        </constructor-arg>
</bean>

<bean id="orderGateway" factory-bean="ormService" factory-method="createGateway">
        <constructor-arg name="objectAlias">
            <value>order1</value>
        </constructor-arg>
</bean>

3点目の’各種コントローラからinit()メソッドの削除’とは、すべてのControllerからinit()メソッドを削除することです。

■CartManager.cfc(ModelGlue1.1)

    <cffunction name="init" access="public" returntype="CartManager" output="false" hint="Shopping cart Constructor.">
        <cfargument name="ModelGlue" required="true" type="ModelGlue.ModelGlue" />
        <cfargument name="InstanceName" required="true" type="string" />
        <cfset super.init( arguments.ModelGlue ) />

        <cfset variables.instance.cartFactory= structNew() />

        <cfreturn this />
    </cffunction>

    <cffunction name="OnRequestStart" access="Public" returntype="void" output="false" hint="I am an event handler.">
          <cfargument name="event" type="ModelGlue.Core.Event" required="true">
          <cfif not structKeyExists( session, 'cart' )>
              <cflock scope="session" timeout="10" type="exclusive">
                <cfset session.cart = getCartFactory().getCart() />
            </cflock>
        </cfif>
    </cffunction>

■CartManager.cfc(ModelGlue:Unity)

    <cffunction name="OnRequestStart" access="Public" returntype="void" output="false" hint="I am an event handler.">
          <cfargument name="event" type="ModelGlue.Core.Event" required="true">
          <cfif not structKeyExists( session, 'cart' )>
              <cflock scope="session" timeout="10" type="exclusive">
                <cfset session.cart = getCartFactory().getCart() />
            </cflock>
        </cfif>
    </cffunction>

mgbookstorereactorのModelGlue1.1版はこちら、ModelGlue:Unity版はこちらです。

トラックバック

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

このページへのトラックバック一覧 MG1.1からMG:Unityへのアップグレード(その1):

コメント

コメントを投稿

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

ログイン

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

    パスワード:

PR情報

  • [[PR]]
  • おすすめバナー

更新ブログ

google Search

  • Google
    blog.ganymean.org
    WWW

最近のトラックバック

Google

SHINOBI

Blog powered by TypePad
Member since 04/2005