<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
   <title>Model-Glue ATOM - 気楽に行こう</title>
   <link rel="alternate" type="text/html" href="http://www.schwarzmond.info/blog/" />
   <link rel="self" type="application/atom+xml" href="http://www.schwarzmond.info/blog/cat8/categoryatom.xml" />
   <id>tag:www.schwarzmond.info,2009:/blog//1</id>
   <updated>2008-11-05T02:57:21Z</updated>
   <subtitle>いろんなネタを書くかもなので、興味のあるネタ以外がうざい人は、カテゴリリンクの RSS を見てください。</subtitle>
   <generator uri="http://www.sixapart.com/movabletype/">Movable Type 3.33-ja</generator>

<entry>
   <title>CF Frameworks Explorer ってなんぞ？</title>
   <link rel="alternate" type="text/html" href="http://www.schwarzmond.info/blog/2008/11/cf_frameworks_explorer.html" />
   <id>tag:www.schwarzmond.info,2008:/blog//1.105</id>
   
   <published>2008-11-05T02:43:35Z</published>
   <updated>2008-11-05T02:57:21Z</updated>
   
   <summary>CFEclipse を導入する際に、ずっと気になっていたけど、 こんな風だし、 ...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="ColdFusion" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="ColdSpring" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="Model-Glue" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="Transfer" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="フレームワーク" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="プログラム" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.schwarzmond.info/blog/">
      <![CDATA[<p>CFEclipse を導入する際に、ずっと気になっていたけど、</p>

<p><img alt="cfframeworks01.gif" src="http://www.schwarzmond.info/blog/img_coldfusion/cfframeworks01.gif" width="261" height="117" style="border: 1px solid gray;" /></p>

<p>こんな風だし、</p>

<p><img alt="cfframeworks02.gif" src="http://www.schwarzmond.info/blog/img_coldfusion/cfframeworks02.gif" width="297" height="62" style="border: 1px solid gray;" /></p>

<p>右クリックで、“構成”を選択すると、</p>

<p><img alt="cfframeworks03.gif" src="http://www.schwarzmond.info/blog/img_coldfusion/cfframeworks03.gif" width="441" height="142" /></p>

<p>こんな警告出るし、</p>

<p><a href="http://www.schwarzmond.info/blog/img_coldfusion/cfframeworks04.html" onclick="window.open('http://www.schwarzmond.info/blog/img_coldfusion/cfframeworks04.html','popup','width=548,height=317,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://www.schwarzmond.info/blog/img_coldfusion/cfframeworks04-thumb.gif" width="300" height="173" alt="" /></a></p>

<p>こんなウィンドウが表示されるだけで、なんなんだよ、これ。って感じで、放置していた CF Frameworks Explorer 。</p>

<p>でも、<a href="http://cfeclipse.org/cfeclipsetv.cfm">ここ</a> の「08 CF Frameworks Explorer Introduction」を見て、一気に解決。</p>]]>
            <a href="http://www.schwarzmond.info/blog/2008/11/cf_frameworks_explorer.html">続く...</a>
      
   </content>
</entry>
<entry>
   <title>Railo 浮上</title>
   <link rel="alternate" type="text/html" href="http://www.schwarzmond.info/blog/2008/09/railo_1.html" />
   <id>tag:www.schwarzmond.info,2008:/blog//1.93</id>
   
   <published>2008-09-22T04:20:19Z</published>
   <updated>2008-09-22T04:24:53Z</updated>
   
   <summary>以前のエントリーで、Railo に見事撃沈された我がサンプルアプリケーション。 ...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="ColdFusion" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="ColdSpring" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="Model-Glue" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="Transfer" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="プログラム" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.schwarzmond.info/blog/">
      <![CDATA[<p><a href="http://www.schwarzmond.info/blog/2008/06/railo.html">以前のエントリー</a>で、Railo に見事撃沈された我がサンプルアプリケーション。<br />
その Railo が正式リリースされたと聞いたので、もう一度、動作確認してみた。<br />
</p>]]>
            <a href="http://www.schwarzmond.info/blog/2008/09/railo_1.html">続く...</a>
      
   </content>
</entry>
<entry>
   <title>Transfer でのエラー発生時の愚痴</title>
   <link rel="alternate" type="text/html" href="http://www.schwarzmond.info/blog/2008/09/transfer_6.html" />
   <id>tag:www.schwarzmond.info,2008:/blog//1.92</id>
   
   <published>2008-09-11T06:20:42Z</published>
   <updated>2008-10-10T02:01:13Z</updated>
   
   <summary>Transfer を使っていると、何か問題があったときに、どこがいけないのか、本...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="ColdFusion" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="Model-Glue" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="Transfer" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="プログラム" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.schwarzmond.info/blog/">
      <![CDATA[<p>Transfer を使っていると、何か問題があったときに、どこがいけないのか、本当にわかりにくい。<br />
たいていの場合は、Transfer.xml の書き方が間違っている場合が多いのだけど、実際にどんなクエリを発行しようとしてエラーになったのか、どんなクエリを発行したのか。<br />
</p>]]>
            <a href="http://www.schwarzmond.info/blog/2008/09/transfer_6.html">続く...</a>
      
   </content>
</entry>
<entry>
   <title>ColdSpring の Remote Facades</title>
   <link rel="alternate" type="text/html" href="http://www.schwarzmond.info/blog/2008/06/coldspring_remote_facades.html" />
   <id>tag:www.schwarzmond.info,2008:/blog//1.81</id>
   
   <published>2008-06-06T00:33:30Z</published>
   <updated>2008-06-06T00:37:03Z</updated>
   
   <summary>ColdSpring のドキュメントに Remote Facades という項目...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="ColdFusion" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="ColdSpring" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="Model-Glue" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="Transfer" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="プログラム" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.schwarzmond.info/blog/">
      <![CDATA[<p>ColdSpring のドキュメントに Remote Facades という項目がある。<br />
これも確か、デザインパターンで見たような気がする。<br />
<a href="http://capsctrl.que.jp/kdmsnr/wiki/PofEAA/?RemoteFacade">便利なサイト</a>があったので、参考にさせてもらった。ありがたい。<br />
なるほどなるほど。<br />
実際の実装には<a href="http://andyjarrett.co.uk/andy/blog/index.cfm/2008/5/19/ColdSpring-and-Remote-Facades">ここ</a>を参考にさせてもらった。</p>

<p>で、とりあえず、http://localhost/shopping/model/ItemArrayBean.cfc?method=getItemArray にアクセス。</p>

<p><em>コンポーネント [[リポジトリ]]\shopping\www\model\ItemArrayBean.cfc のメソッド 'getItemArray' はリモートでアクセスできません。  </em></p>

<p>cffunction の access 属性が public なのだから当然。</p>]]>
            <a href="http://www.schwarzmond.info/blog/2008/06/coldspring_remote_facades.html">続く...</a>
      
   </content>
</entry>
<entry>
   <title>ちょっと楽になるかな？ツール</title>
   <link rel="alternate" type="text/html" href="http://www.schwarzmond.info/blog/2008/06/post_42.html" />
   <id>tag:www.schwarzmond.info,2008:/blog//1.79</id>
   
   <published>2008-06-04T00:50:09Z</published>
   <updated>2008-06-04T02:11:07Z</updated>
   
   <summary>もともと、無精なものだから、どうにも Transfer の Generated ...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="ColdFusion" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="ColdSpring" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="Model-Glue" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="Transfer" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="プログラム" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.schwarzmond.info/blog/">
      <![CDATA[<p>もともと、無精なものだから、どうにも Transfer の Generated Methods の入力が煩わしい。<br />
多少でも楽になればと思い、ちょっとツールを作ってみた。<br />
<a href="http://www.schwarzmond.info/blog/img_coldfusion/developing.zip">これ</a>を使えば、<br />
<img alt="developing_04.gif" src="http://www.schwarzmond.info/blog/img_coldfusion/developing_04.gif" width="238" height="251" style="border:1px solid gray;" /><br />
こういう風に、一覧で利用できる関数を表示してくれる。</p>]]>
            <a href="http://www.schwarzmond.info/blog/2008/06/post_42.html">続く...</a>
      
   </content>
</entry>
<entry>
   <title>Observer を Inject する</title>
   <link rel="alternate" type="text/html" href="http://www.schwarzmond.info/blog/2008/06/observer_inject.html" />
   <id>tag:www.schwarzmond.info,2008:/blog//1.78</id>
   
   <published>2008-06-03T00:40:13Z</published>
   <updated>2008-06-03T00:44:57Z</updated>
   
   <summary>Google Groups に参考になるスレッドが上がってた。 addXXXOb...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="ColdFusion" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="ColdSpring" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="Model-Glue" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="Transfer" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="プログラム" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.schwarzmond.info/blog/">
      <![CDATA[<p>Google Groups に参考になるスレッドが上がってた。<br />
<a href="http://groups.google.co.jp/group/transfer-dev/browse_thread/thread/7ae52b140ee1a7bd#">addXXXObserver(component), where to call? is singleton required?</a><br />
そこからのリンク<a href="http://www.silverwareconsulting.com/index.cfm/2008/5/21/My-Take-on-Transfer-ORM-Event-Model-Examples--BeforeCreate-Example">My Take on Transfer ORM Event Model - BeforeCreate Example</a> 。<br />
Observer の登録の仕方だ。これを参考にすると、すっきりした。<br />
</p>]]>
            <a href="http://www.schwarzmond.info/blog/2008/06/observer_inject.html">続く...</a>
      
   </content>
</entry>
<entry>
   <title>Model-Glue の初期設定</title>
   <link rel="alternate" type="text/html" href="http://www.schwarzmond.info/blog/2008/05/modelglue_2.html" />
   <id>tag:www.schwarzmond.info,2008:/blog//1.71</id>
   
   <published>2008-05-26T01:22:56Z</published>
   <updated>2008-05-26T01:26:21Z</updated>
   
   <summary>ここらで、基本的なところに戻って、ColdSpring.xml の先頭にある、 ...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="ColdFusion" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="ColdSpring" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="Model-Glue" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="プログラム" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.schwarzmond.info/blog/">
      <![CDATA[<p>ここらで、基本的なところに戻って、ColdSpring.xml の先頭にある、<br />
&lt;bean id="modelGlueConfiguration" class="ModelGlue.unity.framework.ModelGlueConfiguration"&gt;<br />
を見ていこう。</p>

<p>ここでは、Model-Glue の各種設定項目を、ＤＩコンテナである ColdSprng で設定しているということになる。<br />
設定できる項目は、以下の通り。</p>]]>
            <a href="http://www.schwarzmond.info/blog/2008/05/modelglue_2.html">続く...</a>
      
   </content>
</entry>
<entry>
   <title>Scaffold のカスタマイズ</title>
   <link rel="alternate" type="text/html" href="http://www.schwarzmond.info/blog/2008/05/scaffold_1.html" />
   <id>tag:www.schwarzmond.info,2008:/blog//1.70</id>
   
   <published>2008-05-23T01:18:22Z</published>
   <updated>2008-05-23T01:22:24Z</updated>
   
   <summary>Scaffold には、用意されたデザインではなく、自由にデザインを変更できる機...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="ColdFusion" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="Model-Glue" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="Transfer" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="プログラム" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.schwarzmond.info/blog/">
      <![CDATA[<p>Scaffold には、用意されたデザインではなく、自由にデザインを変更できる機能がある。<br />
これを使えば、もしかすると、本番システムにおいても利用できる機能なのかもしれない。<br />
</p>]]>
            <a href="http://www.schwarzmond.info/blog/2008/05/scaffold_1.html">続く...</a>
      
   </content>
</entry>
<entry>
   <title>Scaffold</title>
   <link rel="alternate" type="text/html" href="http://www.schwarzmond.info/blog/2008/05/scaffold.html" />
   <id>tag:www.schwarzmond.info,2008:/blog//1.68</id>
   
   <published>2008-05-22T00:45:09Z</published>
   <updated>2008-05-22T00:49:07Z</updated>
   
   <summary>まず、前回の modelglue.xml をちょっと更新した。 ファイル mod...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="ColdFusion" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="Model-Glue" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="プログラム" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.schwarzmond.info/blog/">
      <![CDATA[<p>まず、前回の modelglue.xml をちょっと更新した。<br />
ファイル <a href="http://www.schwarzmond.info/blog/modelglue-02.xml">modelglue-02.xml</a> 。念のためファイル名は変えておいた。コード補完部分は変わっていない。</p>

<p>では、今回の本題。Scaffold という機能もなかなか便利。<br />
サンプルアプリケーションでいうと、Transfer.xml に記述してあるオブジェクトを指定して Scaffold を設定すると、そのオブジェクトのデータ管理ができる機能が自動で生成される。<br />
以下のように ModelGlue.xml に一行付け加えるだけで、その機能ができてしまうのである。<br />
<quote><br />
&lt;event-handlers&gt;<br />
　……<br />
　&lt;scaffold object="master.Item" /&gt;<br />
&lt;/event-handlers&gt;<br />
</quote><br />
で、http://localhost/shopping/index.cfm?event=master.Item.list にアクセスすると、そのテーブル内のデータが表示できる。<br />
</p>]]>
            <a href="http://www.schwarzmond.info/blog/2008/05/scaffold.html">続く...</a>
      
   </content>
</entry>
<entry>
   <title>Model-Glue のコード補完</title>
   <link rel="alternate" type="text/html" href="http://www.schwarzmond.info/blog/2008/05/modelglue_1.html" />
   <id>tag:www.schwarzmond.info,2008:/blog//1.67</id>
   
   <published>2008-05-21T01:06:47Z</published>
   <updated>2008-05-21T01:14:10Z</updated>
   
   <summary>Model-Glue の Eclipse 用のコード補完設定ファイルを作ってみた...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="ColdFusion" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="Model-Glue" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="プログラム" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.schwarzmond.info/blog/">
      <![CDATA[<p>Model-Glue の Eclipse 用のコード補完設定ファイルを作ってみた。<br />
<a href="http://www.schwarzmond.info/blog/modelglue.xml">modelglue.xml</a><br />
インストールの仕方は、以前のエントリを参照。</p>

<p>また、関数へのマウスオーバーでポップアップするヘルプを公式ドキュメントから抜き出して日本語訳してみたが、間違いもあるだろう。<br />
仕様として、同じ関数名があると後に定義されたヘルプが出てしまうようなので、同じ関数名は、属するオブジェクトを連ねて表示し、両対応の当たり障りのない（中途半端な）ヘルプ文章にした。</p>

<p>以下、ちょっと用語解説。</p>]]>
            <a href="http://www.schwarzmond.info/blog/2008/05/modelglue_1.html">続く...</a>
      
   </content>
</entry>
<entry>
   <title>Model-Glue から ColdBox への移植</title>
   <link rel="alternate" type="text/html" href="http://www.schwarzmond.info/blog/2008/05/modelglue_coldbox.html" />
   <id>tag:www.schwarzmond.info,2008:/blog//1.62</id>
   
   <published>2008-05-16T01:01:46Z</published>
   <updated>2008-10-10T02:04:28Z</updated>
   
   <summary>なんとか、Model-Glue 版ショッピングカートを ColdBox 版ショッ...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="ColdFusion" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="Model-Glue" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="フレームワーク" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="プログラム" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.schwarzmond.info/blog/">
      <![CDATA[<p>なんとか、Model-Glue 版ショッピングカートを ColdBox 版ショッピングカートに移植完了。<br />
でも、View 周りがなんとなく、汚い気がする。</p>

<p>基本的には、両者とも、ＭＶＣフレームワークなわけで、「とりあえず作ってみました」的なレベルでは、大して差はなかった。</p>

<p>Controller に当たる handler で、設定することなく（Model-Glue は、設定することなく、setter 関数を入れるだけ） AutoWire はしてくれなかったので、handler 上の init 関数などで以下のように、取得する必要がある。<br />
<quote><br />
&lt;cffunction name="init" access="public" returntype="any" output="false"&gt;<br />
　&lt;cfargument name="controller" type="any"&gt;<br />
　&lt;cfset super.init(arguments.controller)&gt;<br />
　&lt;cfset variables.shopping = getPlugin("ioc").getIoCFactory().getBean("shopping") /&gt;<br />
　&lt;cfset variables.itemArrayBean = getPlugin("ioc").getIoCFactory().getBean("itemArrayBean") /&gt;<br />
　&lt;cfreturn this&gt;<br />
&lt;/cffunction&gt;<br />
</quote><br />
こうしておけば、handler が初めてよびだされるときに、ColdSpring で設定された Bean を呼び出してくれるのであろう。</p>

<p>また、Model-Glue では、ＸＭＬファイルで処理のフローを設定していたものが、ColdBox では、上記の handler 内でほとんど行うようだ。<br />
ApplicationRoot<br />
　┗handlers<br />
　　┗gengeral.cfc<br />
gengeral.cfc という handler があって、その中に書かれている関数がイベント名になる。<br />
例えば、gengeral.cfc に、CartView という関数があるとすると、gengeral.CartView というイベントを駆動させると、その CartVew 関数が処理される。</p>

<p>あとは、TransferFactory など、AutoWire 関連の記述を書き換えるぐらいでモデルなどのコードは、ほとんど変更しなかった。この辺りは、さすがである。<br />
当然、画面表示周りの部分は、それなりに書き換える必要がある。イベント名の作法が変わるわけだし、画面表示自体の作法が変わる。</p>

<p>個人的な問題として気になることがあった。<br />
開発する際、ＷＥＢサーバー（Windows マシンで、IIS）のドキュメントルートにプログラムを置くのではなく、リポジトリとして決めてある場所にプログラムを保存して、実行は、IIS 上で仮想ディレクトリを設定してある。<br />
プログラムを変更した場合、保存後、すぐに、ブラウザのＦ５リフレッシュで変更結果を確認している。</p>

<p>ColdBox でそのように作成しようとしたら、なぜか、エラーが発生してしまった。設定があるのかもしれないが、わからなかったので、結局、Ant を使って、ＷＥＢサーバーのドキュメントルートに配置していたわけで、結果、<a href="http://www.schwarzmond.info/blog/2008/05/ant.html">前回</a>のようなエラーにも遭遇した。<br />
ColdBox のイメージがちょっぴり悪くなってしまった。もちろん、ColdBox は悪くないのだろう。あくまで、個人的な問題だ。<br />
</p>]]>
      
   </content>
</entry>
<entry>
   <title>Transfer のトランザクション処理</title>
   <link rel="alternate" type="text/html" href="http://www.schwarzmond.info/blog/2008/05/transfer_4.html" />
   <id>tag:www.schwarzmond.info,2008:/blog//1.59</id>
   
   <published>2008-05-13T00:54:03Z</published>
   <updated>2008-10-10T02:05:27Z</updated>
   
   <summary>サンプルアプリケーションは、データベースのトランザクション処理ができていない。 ...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="ColdFusion" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="ColdSpring" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="Model-Glue" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="Transfer" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="プログラム" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.schwarzmond.info/blog/">
      <![CDATA[<p>サンプルアプリケーションは、データベースのトランザクション処理ができていない。<br />
こんなアプリケーションが許されるわけはないので、トランザクションを実装しなければならない。<br />
トランザクションはどのように実装するのか。</p>

<p>やり方としては、コンポーネント内の指定した関数を丸ごとトランザクション処理するというイメージになる。<br />
shopping.model.CartProcess の transfer.TransferFactory を AutoWire したタイミングで、transfer.TransferFactory から transfer.com.sql.transaction.Transaction を取得する。<br />
<quote><br />
&lt;cffunction name="setOrmService" access="public" returntype="void" output="false"&gt;<br />
　&lt;cfargument name="ormService" type="transfer.TransferFactory" required="true"&gt;<br />
　&lt;cfset variables.transfer = arguments.ormService.getTransfer() /&gt;<br />
　&lt;cfset variables.transaction = arguments.ormService.getTransaction() /&gt;<br />
&lt;/cffunction&gt;<br />
</quote></p>

<p>その Transaction を利用して、<br />
<quote><br />
　&lt;cfset transaction.execute(component, methodName, [arguments]) /&gt;<br />
</quote><br />
と、直接的に関数をトランザクション指定で起動することもできる。<br />
直接指定の場合は、その関数を利用するときに、上記の記述で利用することになる。</p>

<p>また、ＡＯＰのように記述して、関数を指定することで、指定した関数が丸ごとトランザクション処理されるようだ。<br />
この記述の場合は、事前に行っておくことで、その関数を通常のように利用した場合でも、トランザクション処理されることになる。<br />
<quote><br />
&lt;cffunction name="setOrmService" access="public" returntype="void" output="false"&gt;<br />
　&lt;cfargument name="ormService" type="transfer.TransferFactory" required="true"&gt;<br />
　&lt;cfset variables.transfer = arguments.ormService.getTransfer() /&gt;<br />
　&lt;cfset variables.transaction = arguments.ormService.getTransaction() /&gt;<br />
　&lt;cfset variables.transaction.advise(this, insertItem) /&gt;<br />
&lt;/cffunction&gt;<br />
</quote><br />
さらに、<br />
<quote><br />
　&lt;cfset arguments.transaction.advise(this, "^save") /&gt;<br />
</quote><br />
と、正規表現で一括してトランザクション処理指定もできる。<br />
トランザクションで処理したい関数を save で始まる関数名にしておけば、簡単に一括指定できる。<br />
</p>]]>
      
   </content>
</entry>
<entry>
   <title>Model-Glue3 Gesture</title>
   <link rel="alternate" type="text/html" href="http://www.schwarzmond.info/blog/2008/05/modelglue3_gesture.html" />
   <id>tag:www.schwarzmond.info,2008:/blog//1.55</id>
   
   <published>2008-05-07T05:45:29Z</published>
   <updated>2008-10-10T02:06:31Z</updated>
   
   <summary>ちょくちょく参考にさせてもらってるなんちゃってCF-OOP！で、Model-Gl...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="Model-Glue" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="フレームワーク" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="プログラム" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.schwarzmond.info/blog/">
      <![CDATA[<p>ちょくちょく参考にさせてもらってる<a href="http://blog.ganymean.org/cfdev/">なんちゃってCF-OOP！</a>で、Model-Glue の次期バージョンの話が出てた。<a href="http://blog.ganymean.org/cfdev/2008/05/model-glue3gest.html">Model-Glue3(Gesture)αリリース！</a>。<br />
なにやら、いろいろと機能が追加されるようだけど、個人的には、<a href="http://blog.ganymean.org/cfdev/2008/05/model-glue301-e.html">Model-Glue3.0の新機能1：イベント自動生成</a>が気になる。<br />
Model-Glue などのフレームワークで一番の（個人的な）不都合は、設定ファイルをＸＭＬで書かなきゃいけないことだと思っている。<br />
そんな不満をある程度解消してくれそうな機能なのではないのだろうか。</p>

<p>例えば、だいぶ前に WebSphere で ＩＢＭ謹製 Studio を使ったときに、設定ファイルは、入力ボックスに各種設定の文字を入れていくようなウィンドウが表示されて、ＸＭＬタグを見ることなく設定できた。<br />
ＸＭＬファイルというのは、慣れていればいいのかもしれないが、経験の少ない開発者にとって敷居が高いものだと勝手に断定している。</p>

<p>一番いいのは、部品をドラッグアンドドロップとかで配置して、グラフィカルにＭＶＣの流れが見えることだと思うけど、そんなのはかなり厳しい話で、WebSphere のようなものが妥当な線なんだと思う。</p>

<p>Model-Glue のイベント自動生成機能は、イベント名を起こすだけで、ある程度の設定をしてくれるということだから、ゼロから設定ファイルを書くのではなく、都度変更すればよいわけだ。<br />
ゼロからと、変更するだけでは、大きな違いがあると思うし、かなり敷居が低くなるんじゃないかと思う。</p>

<p>今までのようにＸＭＬを直接編集するしかないとか、（あくまで個人的に）作業効率が悪いままでは、結局フレームワークというものが、万人向けではなく、特定層向けツールで終わってしまっているというのが現状ではないだろうか。<br />
なにしろ、ColdFusion の最大の特徴である、「未経験開発者の一定レベル到達時間が短い」を打ち消しかねない。<br />
ちょっと言い過ぎた気もするけど、一向に ColdFusion のフレームワークの情報が世の中に増えてこないのは、その辺にあるのじゃないだろうか。<br />
Model-Glue の新機能に期待である。</p>]]>
      
   </content>
</entry>
<entry>
   <title>AutoWire</title>
   <link rel="alternate" type="text/html" href="http://www.schwarzmond.info/blog/2008/04/autowire.html" />
   <id>tag:www.schwarzmond.info,2008:/blog//1.48</id>
   
   <published>2008-04-24T01:17:01Z</published>
   <updated>2008-10-10T02:08:15Z</updated>
   
   <summary>さて、たびたび出てきた AutoWire とは、何か。 ColdSpring の...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="ColdFusion" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="ColdSpring" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="Model-Glue" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="プログラム" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.schwarzmond.info/blog/">
      <![CDATA[<p>さて、たびたび出てきた AutoWire とは、何か。<br />
ColdSpring のドキュメントによると、<br />
<quote><br />
The term "autowire" refers to the ability of the ColdSpring beanFactory to automatically wire dependent objects together without necessarily having to define those dependencies in the xml bean definitions.<br />
</quote><br />
とある。<br />
簡単に言うと・・・、説明は止めておこう。実際に、どのように動くのかを見た方がわかりやすい。<br />
検索すれば、AutoWire も、いっぱい出てくる。もちろん、ColdSpring での情報は少ないが。</p>

<p>前回、<br />
<quote><br />
　&lt;bean id="shopping" class="shopping.model.CartProcess"&gt;<br />
　　&lt;property name="itemAB"&gt;<br />
　　　&lt;ref bean="itemArrayBean" /&gt;<br />
　　&lt;/property&gt;<br />
　&lt;/bean&gt;<br />
</quote><br />
このような記述をした。<br />
ColdSpring.xml の Bean は、基本的にリクエストごとに、初期化される。<br />
shopping.model.CartProcess を初期化する際に、setItemAB 関数を探して、引数として、itemAB という名前で、itemArrayBean を<br />
渡して処理しなさいということであった。</p>

<p>AutoWire を使えば、この記述が以下のように簡単になる。<br />
<quote><br />
　&lt;bean id="shopping" class="shopping.model.CartProcess" autowire="byName" /&gt;<br />
</quote></p>

<p>autowire="byName" をautowire="byType" とすることもできる。<br />
要するに、Bean を受け取りたい側（この場合は、CartProcess.cfc）で、setter 関数を記述さえすれば、取得できるわけである。</p>

<p>byName と、byType は、どう違うのか。名前と型なわけで、全く違うわけだが、byName であれは、setItemAB と名前で探すのに対し、<br />
<quote><br />
&lt;bean id="shopping" class="shopping.model.CartProcess" autowire="byType" /&gt;<br />
</quote><br />
<quote><br />
&lt;cfargument name="itemArrayBean" type="shopping.model.ItemArrayBean" /&gt;<br />
</quote><br />
byType の場合は、setter 関数の名前は set で始まっていればよく、引数の受取の型指定が一致しているものを探すわけである。</p>

<p>同じ型で複数の Bean を作りたい場合には、byName にすることになるだろう。<br />
byTypeの方は、すでに setter 関数があって、名前が重複してしまった場合などに利用することになるだろう。</p>

<p>基本的には、好みで決めればいいのだろう。byType の方が、好みだ。<br />
</p>]]>
      
   </content>
</entry>
<entry>
   <title>ColdSpring</title>
   <link rel="alternate" type="text/html" href="http://www.schwarzmond.info/blog/2008/04/coldspring.html" />
   <id>tag:www.schwarzmond.info,2008:/blog//1.45</id>
   
   <published>2008-04-22T01:19:49Z</published>
   <updated>2008-10-10T02:08:54Z</updated>
   
   <summary>ColdSpring を活用してみよう。 すでに ColdSpring の機能で...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="ColdFusion" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="ColdSpring" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="Model-Glue" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="プログラム" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.schwarzmond.info/blog/">
      <![CDATA[<p>ColdSpring を活用してみよう。<br />
すでに ColdSpring の機能である、“ＤＩ”というものについての記述は、たくさんあるので、どのように使うかを見ていく。<br />
よい題材が思いつかなかったので、Common.cfc で生成していた商品リストを「強引に」ColdSpring でやってみよう。<br />
ColdSpring.xml に下記のように記述する。<br />
<quote><br />
　&lt;bean id="itemArrayBean" class="shopping.model.ItemArrayBean"&gt;<br />
　　&lt;property name="itemArray"&gt;<br />
　　　&lt;list&gt;<br />
　　　　&lt;map&gt;<br />
　　　　　&lt;entry key="name"&gt;&lt;value&gt;光学式マウス&lt;/value&gt;&lt;/entry&gt;<br />
　　　　　&lt;entry key="price"&gt;&lt;value&gt;2600&lt;/value&gt;&lt;/entry&gt;<br />
　　　　&lt;/map&gt;<br />
　　　　&lt;map&gt;<br />
　　　　　&lt;entry key="name"&gt;&lt;value&gt;ボール式マウス&lt;/value&gt;&lt;/entry&gt;<br />
　　　　　&lt;entry key="price"&gt;&lt;value&gt;1100&lt;/value&gt;&lt;/entry&gt;<br />
　　　　&lt;/map&gt;<br />
　　　　&lt;map&gt;<br />
　　　　　&lt;entry key="name"&gt;&lt;value&gt;レーザー式マウス&lt;/value&gt;&lt;/entry&gt;<br />
　　　　　&lt;entry key="price"&gt;&lt;value&gt;4800&lt;/value&gt;&lt;/entry&gt;<br />
　　　　&lt;/map&gt;<br />
　　　&lt;/list&gt;<br />
　　&lt;/property&gt;<br />
　&lt;/bean&gt;<br />
</quote><br />
ここで注意しなければならないのは、Model-Gule は、ColdSpring.xml などのファイルを、ＯＳのデフォルトエンコーディングを前提に<br />
読み込んでいるらしく、Windows で動作させる場合は、Shift_JIS で保存しなければ、文字化けしてしまった。<br />
<quote><br />
　&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
</quote><br />
としても、だめだった。他のＯＳでは試していないので、あくまで、推測である。<br />
自動で判別してくれるとか、先頭行をチェックしてから読み込むということは、してくれないようである。</p>

<p>shopping.model.ItemArrayBean は、商品リストデータを保持するコンポーネント。<br />
Java でいうところの、Bean ということになる。ColdSpring でも、この Bean という単語を採用している。<br />
デフォルトでは、リクエストごとに、インスタンスが生成されているようだ。<br />
固定値を保持するような Bean は、アプリケーションで１インスタンスでいいのだから、何かしら、やり方があるのだろうか。<br />
singleton とかの記述もマニュアルにあるし、できそうな雰囲気もあるが、試していない。</p>

<p>では、実際に、これを利用するためには、どうすればよいのか。<br />
コントローラーでは、非常に簡単に利用できる。<br />
getModelGlue().getBean("itemArrayBean") これだけで、取得できてしまうのである。<br />
Controller.cfc にある、onRequestStart 関数に<br />
&lt;cfset variables.itemArrayBean = getModelGlue().getBean("itemArrayBean") /&gt; とすれば、Controller.cfc 上では、いつでも、利用可能になる。</p>

<p>また、あたかも、AutoWire のように、<br />
<quote><br />
　&lt;cffunction name="setItemArrayBean" access="public" returnType="void" output="false"&gt;<br />
　　&lt;cfargument name="itemArrayBean" type="any"&gt;<br />
　　&lt;cfset variables.itemArrayBean = arguments.itemArrayBean /&gt;<br />
　&lt;/cffunction&gt;<br />
</quote><br />
としてやるだけでも、取得できてしまう。<br />
「あたかも、AutoWire のように」としたのは、ColdSpring.xml の bean タグに、AutoWire の設定することなく、<br />
setter 関数が処理されたためにこのような表現をした。コントローラーは、本当に特別なもののようだ。<br />
AutoWire については、また、後日、読み解いてみたい。<br />
</p>]]>
      
   </content>
</entry>

</feed>
