フォトアルバム

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

reactor

cf.objective 2007 サマリ

Coldfusionファンには、生唾ものの情報です。

CF-OOPのまとめをしなきゃと思って、本家メンバーのRSSフィードをチェックしていたら、cf.objectiveのプレゼン概要を、Matt Woodwardが日々google Docs形式でアップしています。ご覧あれ!

 cf.objective 2007 - Jason Delmore KeynoteColdFusion Weekly Flickr Photos
 Mark Mandel - Intro to Transfer ORM
 Hal Helms - Object Modeling
Sean Corfield - AJAX in Scorpio
Adam Lehman - .NET and Exchange Integration with Scorpio 
 CFEclipse Project - Mark Drew
Adam Lehman - Scorpio Server Monitoring and Alerts
 Peter Farrell - Head First Mach-II
 Peter Farrell - What's New in Mach-II 1.5
Jason Delmore - 1337 Scorpio
Sean Corfield - Real World SOA With ColdSpring and Transfer
Ben Forta - Top Secret Scorpio
 Dave Ross - ColdSpring 101
 Maxim Porges - Maximizing Your CF/Flex Applications With Java

 


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()メソッドの削除

続きを読む "MG1.1からMG:Unityへのアップグレード(その1)" »

Model-Glue:Unity 最新プレゼンテーション2

4/1に人事異動でカスタマフロント部門の責任者に配置されました。
現場の状況をつぶさに眺めてみると、一人ひとりのスタッフは本当によくがんばっているなあーという印象です。
でも、じっくりとスタッフのワークフローを見ていると、忙しい、時間がない、手作業、記憶・勘頼りと言った状況で、チームリーダしっかり考える余裕もなく、ひたすらワークに専念しています。
彼ら一人ひとりの持っている能力を引き出すことを通じて、会社の業績を向上させるのが、私の仕事。
というわけで、スタッフを拘束している単純作業を開放するための業務支援用WebプログラムをModel-Glue:Unityで作ることにしました。

ひさしぶりのModel-Glue:Unityプログラミングなので、慣らし運転用のチュートリアル教材を再度整理してみることにしました。

まずは、Model-Glue:Unityの開発者Joe Rinehartのビデオチュートリアル
時間は9分弱。
とても早口ですが、Scaffoldingのアウトラインを掴むだけにいいかもしれません。

次に、Steve "Cutter" Bladesのビデオチュートリアル
時間は1時間余り。
これもScaffolding向けのプレゼンです。前述のプレゼンよりはゆったりしているので、時間をかけて確認したい方に向いているかもしれません。

最後に、本家Joeのビデオチュートリアル
時間は1時間程度。
Model-Glue:Unityの全体像を理解するのに良いと思います。

MG:Unityジェネリック・データ・メッセージ(GDMs)

今回は、ジェネリック・データベース・メッセージ(GDM)の使用方法について、紹介します。(原文タイトル:How To Use Generic Database Messages)

Model-Glue:Unityの最も無視できない特徴の1つは、自動化されたデータベース能力です。Reactorフレームワークを使用することによって、Model-Glue:Unityは、一般的なデータベースタスクの創造-単一テーブルCRUD(Create、read、update、delete)と実行を自動化します。

Reactorフレームワークは、"Generic Database Messages" (GDMs)をリスンするコントローラ("DataController")を自動的にロードすることによって、このことを達成します。GDMsは、ModelGlue.xmlの中で自動的に呼び出し可能なコマンドセットです。

また、GDMsは、<scaffold>タグを通して作成されるイベントハンドラに対するすべてのデータ・アクセス機能を提供します。

DataControllerがリスンするように構成されている4つのGDMsは、以下の通りです:

1.modelglue.GenericList

このメッセージがブロードキャストされると、DataControllerは与えられたテーブルからレコードをリストアップしようとします。

2.modelglue.GenericRead

このメッセージがブロードキャストされると、DataControllerは与えられたテーブルから特定レコードの読み出しようとします。

3.modelglue.GenericCommit

このメッセージがブロードキャストされると、DataControllerは与えられたテーブルにレコードを保存しようとします。

4.modelglue.GenericDelete

このメッセージがブロードキャストされると、DataControllerは与えられたテーブルからレコードを削除しようとします。

Reactor 1.0BC2リリース!

Reactor1.0BC2がリリースされています。
ColdSpringと同様に、RoboHelpを使ってライブドキュメント化されています。

Model-Glue:Unityサンプルアプリ

早速、Sean Corfieldが彼のブログでModel-Glue:Unity対応のサンプルアプリケーションggcc11をアップした。
このサンプルアプリケーションは、彼がFuseBox、Mach-II、Model-Glue、ColdSpring、TartanなどColdfusion向けFramework Sample Code、ggccシリーズの最新版です。
Model-Glue:Unityによって、

プレゼンテーション層:ModelGlue:Unity
コントローラー:ModelGlue:Unity(ビジネスロジック)
サービス層:ColdSpring
ORM層:Reactor

と各々のフレームワークが相当の機能を分担したため、今回Sean自身が書いたものは、プレゼンテーション層であるviewと、ビジネスロジック層のcontroller.cfcだけになっています。
私のホスティング環境では、エラーが発生しています。Reactor関連のパーミッションかもしれません。



Model-Glue:Unityの新機能

Joe RinehartがAdobe's Developers Weekで実施したModel-Glue:Unityのプレゼン内容を、Brian Rinaldiが彼のブログで紹介しています。

彼のプレゼンは、まだAdobeサイトにアップされていないので、Brian RinaldのブログからModel-Glue:Unityの新機能を読み取ってみます。

1.Model-Glue1.1との完全下位互換

  • Model-Glue1.1は、第二世代のフレームワークである。

即ち、MVCアーキテクチャを使って、プレゼンテーションからモデル層を分離することがその目的であった。
しかしながら、beans/Records、DAOs、Gatewaysなどの共通タスクを取り扱う繰り返しのコードを生むことになった。

  • Model-Glue:Unityは、第三世代のフレームワークである。

モデル層における単調な繰り返しコード生成作業を自動化する。

2.他のフレームワークとの統合

  • 第三世代フレームワーク化推進のため、他のフレームワークとの統合を図った。

ColdSpring
サードバーティサービスの統合と依存性の注入(DI/IoC)をの実現。
依存性の注入は、Model-GlueとReactorのコンフィグ情報をColdSpring.xmlに記述することで実現。
Reactor
ORMの自動化に、Reactorを採用。
ModelGlue自身が実装したData Controllerを使って、イベントハンドラー内の<message>タグでGDMと呼ぶメッセージを記述して、DAOやGatewayを呼び出す。

  • ModelGLue.GenericList(Gateway)
  • ModelGLue.GenericRead(Read)
  • ModelGLue.GenericCommit(Create&Update)
  • ModelGLue.GenericDelete(Delete)

ORM用フレームワークには、Reactor以外も利用可能であるが、自分自身でcustom adapter, DataController, 及びscaffold .XSL を作成する必要がある。

     

3.Scaffolding

  • XSLによるカスタマイズ可能なHTMLの "scaffolds(足場)"を実現。
  • ModelGlue.xml内の<event-handlers>タグ内に<scaffold>タグを定義すれば良い。
  • <Scaffold>タグにより、5つのイベントを作成可能。
    • マスターリストの表示(table.list)
    • レコードデータとリレーションデータの修正フォームの表示(table.edit)
    • レコードデータの読み出し専用ビューの表示(table.view)
    • レコードデータの更新(table.commit)
    • レコードデータの削除(table.delete)
  • <Scaffold>タグ内には、<Broadcasts>、<Results>、<Views>タグを記述可能。
  • <Scaffold>タグの属性に、typeを指定することで、作成するイベントハンドラータイプを指定可能。

4.レコードデータのAutoValidation

  • GDMのGeneric.Commitで、<arguments>タグにname="validationName"を指定することにより、自動的にValidateを実行できます。(より複雑なValidateのカスタマイズは、Reactorが自動生成するDAOオブジェクトを拡張する必要がありますが・・・)

最後に、Joe Rinehartのビデオデモも参考になるので、一読をお勧めします。

MG/CS/Reactor連携アプリケーション例

Brian Kotekが、ModelGlue-ColdSpring-Reactor連携のブックストアアプリケーションを
彼のブログにアップしています。
早速、私のサイトにインストールしてみました。
(彼は、Windowsマシンで開発しているらしく、View関連のフォルダ名とファイル名は一部変更が必要です)

1.ColdSpringによるModelGlue用BeanFactoryLoaderとAutowiring用コントローラー
2.ColdSpringによるReactorオブジェクトのファクトリー機能
を活用して、Model内がビジネスロジック層、サービス層、パーシスタント層にきれいに構造化されています。

次回は、その概要を紹介してみます。

また、Mach-II-ColdSpring-Reactor連携モデルも彼のブログにアップされています。

Reactorをはじめる-18

さて、前回の記事 で、リソース情報を表示するのに、あるテクニックが使われていました。
即ち、GatewayオブジェクトでCreateQuery()メソッドを実行し、テーブル間のリレーションシップ(join)やソート条件(getOrder)およびフィルタ条件(GetWhere)と、2つのテーブルの全フィールドを対象フィールドに指定(returnObjectFields)していました。

Recordオブジェクトと組み合わせて使用するgetXyzIterator()との相違点を明確にしていくために、以前作成したuserGatewayオブジェクトにQueryオブジェクトを作成してダンプしてみます。
以下のCFMLスクリプトを実行してみましょう。

続きを読む "Reactorをはじめる-18" »

Reactorをはじめる-17

さて、次はcfOpenSourceListの表示部分です。

1.最初に、オープンソースリストを表示するので、リソースはGatewayオブジェクトとして定義します。

<cfset resourceGateway = application.reactor.createGateway("OpenSourceResource") />


2.次に、リソースとカテゴリーの結合クエリーをリソースGatewayに定義していきます。

<!--- build a joined query of resources and resource categories --->
<cfset objQry = resourceGateway.createQuery() />
<cfset objQry.join('OpenSourceResource','OpenSourceResourceCategories') />
<cfset objQry.join('OpenSourceResourceCategories','OpenSourceCategory') />
<cfset objQry.returnObjectFields("OpenSourceResource") />
<cfset objQry.returnObjectFields("OpenSourceCategory") />
<cfset objQry.getOrder().setAsc('OpenSourceResource','title')>
<cfset objQry.getOrder().setAsc('OpenSourceResource','resourceID')>
<cfif structKeyExists(url,"categoryID")>
   <cfset objQry.getWhere().isEqual('OpenSourceCategory','categoryID',url.categoryID) />
</cfif>
<cfset qryResources = resourceGateway.getByQuery(objQry) />


あらかじめ、カテゴリが指定されていれば、それをgetWhere()で指定しています。

3.あとは、qryResourcesを出力するだけです。

<cfoutput query="qryResources" group="resourceID">
<div id="resource">
   <p><span class="title"><a href="#qryResources.href#">#qryResources.title#</a></span> | <span class="edit"><a href="edit.cfm?resourceID=#qryResources.resourceID#">edit</a></span><br />
   <span class="description">#qryResources.description#</span><br />
   <cfif len(qryResources.license)>
      <span class="license">License: #qryResources.license#</span><br />
   </cfif>
   <span class="categories">Categories:
   <cfoutput group="categoryID">
      <a href="#CGI.SCRIPT_NAME#?categoryID=#qryResources.categoryID#">#qryResources.category#</a>
   </cfoutput>
   </span>
   <p>
</div>
</cfoutput>

Reactorをはじめる-16

さて、Reactorと他のCF-MVCフレームワークの連携に入る前に、もう少しスクラッチベースでreactorの利用方法を復習してみます。Reactorをはじめる-3で取り上げたBrian RinaldiによるReactorアプリケーション紹介記事を見てみましょう。

テーブルは、以下の3つのとおりです。

・OpenSourceResource
 オープンソースソフトウェアのリソース情報
・OpenSourceCategory
 オープンソースソフトウェアのカテゴリ情報
・OpenSourceResourceCategories
 OpenSourceResourceとOpenSourceCategoryをつなぐリンクテーブル

紹介記事の流れは以下のとおりです。

続きを読む "Reactorをはじめる-16" »

Reactorをはじめる-15

■Iterator

Iteratorは、hasManyリレーションを作成すると、自動的に作成されるということなので、Reactorドキュメントの例にあるCustomer、Address、Invoice、productオブジェクト間のリレーションを以下のように定義して、AddressRecordをダンプしてみます。

続きを読む "Reactorをはじめる-15" »

Reactorをはじめる-14

■RecordオブジェクトとDAOオブジェクト&TOオブジェクトの関係について

本日、Reactorのソースコードを見ていたら、abstractRecord.cfcのconfigure()メソッドに、以下のような記述がありました。
RecordオブジェクトをCreateすると、DAOとTOも自動的に生成するようです。

<cfset _setTo(_getReactorFactory().createTo(arguments.alias)) />
<cfset _setDao(_getReactorFactory().createDao(arguments.alias)) />

■Iteratorについて
 
Doug Houghesの2/28付の記事に、Reactorの最新リリースがアナウンスされていたのを見つけました。それによると、Iteratorは、

hasManyリレーションシップを作成すると、Recordオブジェクト:XyzRecordに2つのメソッド、getXyzQuery()とgetXyzArray()を作成していました。

It used to be that when you created a hasMany relationship that reactor would create two methods on your Record objects, getXyzQuery() and getXyzArray() where Xyz is the name of the related objects.

今回、これらをIteratorオブジェクトで置き換えました。hasManyリレーションを作成すると、getXyzIterator()メソッドが作成されます。これによって、XyzオブジェクトのIteratorを返します。
このIteratorはパワフルで、データのフィルタやソートを行いつつ、クエリー結果を得たり、ページ数を付けたり、配列結果を得たりできます。

This was replaced with an Iterator object.  Now, when you use hasMany one method named getXyzIterator() is created.  This returns an Iterator for your Xyz object.  The Iterator is more powerful because it allows for filtering and sorting data, getting a query of the results, paginating the data and getting arrays of results.

ということになるのだそうです。

Iteratorオブジェクトをどこで生成しているのか、よくわかりません。もう少し、追っかけてみます。

Reactorをはじめる-13

Reactorの基本オブジェクト

  • Gateway
  • DAO
  • Record
  • To
  • Iterator

について、そのダンプ内容を紹介してきましたが、おわかりいただけましたか?うん?なんだかしっくり来ない?そのとおりです!DougがReactorドキュメントで言及しているように、ORMの世界も経験するしかないんです・・・
DougのReactorSamples/Blogが最も参考になるアプリケーションですので、これを随時紹介していくことにしましょう・・・

また、次回まで。

Reactorをはじめる-12

Reactorの基本オブジェクトの各種メソッドをダンプ結果から確認しています。今回は、Iteratorオブジェクトに着目します。

Iteratorは、要素の集まりを保有するオブジェクトの各要素に順番にアクセスする方法を提供するオブジェクトでIteratorデザインパターンとしてよく知られています。

■userIterator

init ------------------ Objectを初期化し、Iteratorオブジェクトを返します。
getQuery ------------- 指定するレコードから指定カウント分のクエリーセットを返します。
getArray ------------- 指定するレコードから指定カウント分のアレイセットを返します。
setDistinct ----------- 単一レコードモードにします。
setJoinList ----------- JOINリストを指定します。
getJoinList ----------- JOINリストを返します。
getDictionary --------- Dictionaryオブジェクトを返します。
setGateway ----------- gatewayオブジェクトをセットします。
getGateway ----------- gatewayオブジェクトを返します。
getRecordCount ------- レコード総数を返します。
getName ------------- Iterator名を返します。
getWhere ------------- whereストリングを返します。
hasMore -------------- 次のレコードがあるかどうか返します。
getNext -------------- ネクストレコードを返します。
getValueList ---------- カレントレコードの指定フィールドリストの値を返します。
reset ---------------- Iteratorをリセットします。
getOrder ------------- orderストリングを返します。
resetOrder ----------- orderストリングをリセットします。

続きを読む "Reactorをはじめる-12" »

Reactorをはじめる-11

Reactorの基本オブジェクトの各種メソッドをダンプ結果から確認しています。今回は、Toオブジェクトに着目します。

ToはTrasfer Objectのことで、variablesスコープの代わりに、thisスコープでインスタンスデータを保持するオブジェクトです。

■userTo

configure ------------ Objectを初期化し、オブジェクトを返します。
userID --------------- userID
userName ------------ userName
passWord ------------- passWord
firstName ------------- firstName
lastName ------------- lastName
dateCreated ----------  dateCreated
merge ---------------  他のTo値を注入します。
_getSignature -------- 依存するDBの署名を返します。.
_getInstanceID ------- ObjectのインスタンスをUUID形式で返します。

続きを読む "Reactorをはじめる-11" »

Reactorをはじめる-10

Reactorの基本オブジェクトの各種メソッドをダンプ結果から確認しています。今回は、Recordオブジェクトに着目します。

■userRecord

configure ------------ Objectを初期化し、abstractRecordオブジェクトを返します。
init ----------------- userRecordオブジェクトを返します。
getUserID ------------ userIDをゲットします。(string)
setUserID ------------ userIDをセットします。(void)
getUserName --------- userNameをゲットします。(string)
setUserName --------- userNameをセットします。(void)
getPassWord --------- PassWordをゲットします。(string)
setPassWord --------- PassWordをセットします。(void)
getFirstName --------- firstNameをゲットします。(string)
setFirstName --------- firstNameをセットします。(void)
getLastName --------- lastNameをゲットします。(string)
setLastName --------- lastNameをセットします。(void)
getDateCreated ------- dateCreatedをゲットします。(string)
setDateCreated ------- dateCreatedをセットします。(void)
load ---------------- Recordオブジェクトをロードします。
save ---------------- Recordオブジェクトを保存します。
delete -------------- Recordオブジェクトを削除します。
createErrorCollection --- 検証用エラーコレクションオブジェクトを作成します。
validate ------------ Recordオブジェクトを検証します。
validated ------------ Recordオブジェクトが検証済かどうか返します。
hasError ------------ Recordオブジェクトに検証エラーがあるかどうか返します。
_getValidateErrorCollection --- Recordオブジェクトの検証エラー内容を返します。
newEvent ------------ 新規イベントをセットします。
announceEvent ------- イベントをアナウンスします。
attachDelegate ------- リスンするイベントと対応するオブジェクトとそのメソッドを追加します。

リスンイベント:beforeValidate, afterValidate, beforeSave, afterSave, beforeLoad, afterLoad, beforeDelete, afterDelete

detachDelegate ------- 特定のリスンイベントを解除します。
detatchAllDelegate ---- リスンするイベントをすべて解除します。
_getTO -------------- userToオブジェクトをゲットします。
_setTO -------------- userToオブジェクトをセットします。
_getDICTIONARY ------ userDICTIONARYオブジェクトをゲットします。
_setDICTIONARY ------ userDICTIONARYオブジェクトをセットします。
_getSignature -------- 依存するDBの署名を返します。
_getInstanceID ------- ObjectのインスタンスをUUID形式で返します。

続きを読む "Reactorをはじめる-10" »

Reactorをはじめる-9

Reactorの基本オブジェクトの各種メソッドをダンプ結果から確認しています。今回は、Daoオブジェクトに着目します。

■userDAO

configure ------------ Objectを初期化し、オブジェクトを返します。
create -------------- 指定するToオブジェクトを新規生成します。(void)
save ---------------- 指定するToオブジェクトに指定するレコードを読み込みます。(void)
update -------------- 指定するToオブジェクトの指定するレコードを更新します。(void)
delete -------------- 指定するToオブジェクトに指定するレコードを削除します。(void)
_getSignature -------- 依存するDBの署名を返します。
_getInstanceID ------- ObjectのインスタンスをUUID形式で返します。

続きを読む "Reactorをはじめる-9" »

Reactorをはじめる-8

Reactorの基本オブジェクトの各種メソッドをダンプ結果から確認しています。最初に、Gatewayオブジェクトに着目します。

■userGateway

configure ----------- Objectを初期化し、オブジェクトを返します。
getAll -------------- 全てのレコードセットを返します。
createQuery -------- クエリーオブジェクトを作成します。
getByFields --------- 指定されたフィールドの全てのレコードセットを返します。
getByQuery --------- クエリーオブジェクトの条件に合致するレコードセットを返します。
_getSignature -------- 依存するDBの署名を返します。
_getInstanceID ------- ObjectのインスタンスをUUID形式で返します。

続きを読む "Reactorをはじめる-8" »

Reactorをはじめる-7

今回は、Reactorオブジェクトの詳細を確認してみます。
Reactorオブジェクトには、initを含めて全部で13のメソッドがあります。
以下に示す7つの基本オブジェクトに対するCreateメソッドと、

  1. CreateRecordメソッド
  2. CreateGatewayメソッド
  3. CreateDAOメソッド
  4. CreateTOメソッド
  5. CreateMetadataメソッド
  6. CreateIteratorメソッド
  7. CreateDictionaryメソッド

そして、残り5つのメソッドは、次のとおりです。

  1. CreatePluginメソッド
  2. SetBeanFactoryメソッド
  3. CreateValidator
  4. Compileメソッド
  5. GetXMLメソッド

続きを読む "Reactorをはじめる-7" »

Reactorをはじめる-6

今日は、cfOpenSourceListアプリケーションのReactorのオブジェクト定義を確認します。
Reactorをはじめる-3で紹介したように、このアプリケーションは3つのテーブルをもっています。

一つ目は、オープンソースソフトウェアのリソース情報を格納するOpenSourceResourceテーブル。
二つ目は、オープンソースソフトウェアのカテゴリ情報を格納するOpenSourceCategoryテーブル。
三つ目は、OpenSourceResourceとOpenSourceCategoryをつなぐリンクテーブルであるOpenSourceResourceCategoriesテーブル。

このように、Reactorではデータベース内のテーブルオブジェクト間のリレーションシップも定義できます。

続きを読む "Reactorをはじめる-6" »

Reactorをはじめる-5

さて、Brian RinaldiのReactorアプリケーション紹介記事で、cfOpenSourceListアプリケーションのreactor.xmlにおけるconfigセクションを確認してみます。

<config>
    <dsn value="remotesynthesis" />
   <type value="mysql" />
    <mapping value="/CFOSListData" />
    <mode value="development" />
</config>

■dsn
dsnは、"remotesynthesis"に設定されています。
ColdFusionに登録したdsnそのものです。

■type
typeは、"mysql"に設定されています。
MySQL5を使用しているということです。

■mapping
mappingは、"/CFOSListData"に設定されています。
ColdFusionのwwwroot直下にある/CFOSListData"か、ColdFusionで設定したwwwroot以外のディレクトリへのマッピング名を指定しています。
個人的には、アプリケーションのルートディレクトリ内にdataディレクトリを作成し、"/app/data"と指定するのが、一番シンプルなように思えます。

■mode
modeは、"development"に設定されています。
開発モードであることを示しています。
Reactorがdsnとtypeによって指定されたDBMSを常時チェックすることを意味しますので、開発モードの場合レスポンスが悪くなります。
開発が終了したら、"production"に設定してください。

■project
このタグは指定されていませんが、最新バージョンでは必須になっています。

projectは、dsnと同じ値にセットするのが一般的なようです。
<project name="remotesynthesis" />
dsnと同じセッティングで良いのではないかと思います。

Reactorをはじめる-4

今回は、Reactor.xmlのconfigセクションの各要素を、Reactorユーザズガイドから抜粋してみます。

■Project

プロジェクトタグは、プロジェクトのために変化しない安全な名前を定義するのに使用されます。プロジェクト名はReactorが揮発性のプロジェクトファイルを格納する位置を定義します。 データベース非依存のファイルはプロジェクトディレクトリ配下でファイルを展開しています。

いったん設定して、再び働かせるために手であなたのカスタムファイルを編集するのに時間を費やしたくないなら、この値を変えないでください。

シンタックス:

<project value="cfOpenSourceList" />

 

 

 

 

 

 

 

 

Argument

Required

Type

Description

Value

Yes

String

プロジェクト名を指定します。

dsn

dsnタグは、クエリーを実行する際、Reactorが使用するColdFusionデータソース名を定義するのに使用されます。ColdFusionで設定済のデータソース名を指定する必要があります。

シンタックス: 

<dsn value="ReactorBlog" />
 

 

 

 

 

 

 

 

 

Argument

Required

Type

Description

Value

Yes

String

Reactorが使用するColdFusionデータソースを指定します。

type

タイプタグは、Reactorがクエリー実行可能なデータベースタイプを定義するのに使用されます。 現在サポートしているサーバは以下の通りです:

  • Microsoft SQL Server 2000 and 2005
  • MySQL 4
  • MySQL 5 and later. 

MySQL45は、各々が動作するために、異なった構成値(以下を参照)を必要とするので、別々に記載されています。

Type設定は、そのコードがどのように、そしてどこで実行されるかを制御します。 例えば、Microsoft SQLを使用している旨を示すと、Reactorは構成されたマッピング配下の"mssql"というフォルダーにカスタマイズ可能なコードを生成します。

加えて、データベースサーバーは、コードを実行する際、異なったセマンティックを必要とします。Reactorは、ある意味でコードがデータベースによってサポートされるようにDBタイプセッティングを使用します。

シンタックス: 

<type value="mssql" />
 

 

 

 

 

 

 

 

 

Argument

Required

Type

Description

Value

Yes

String

使用するデータベースタイプを指定します。オプション文字列は以下のとおりです。

  • mssql        – Micrsoft SQL Server 2000 and 2005.
  • mysql4      – MySQL 4.
  • mysql        – MySQL 5 and later.
  • db2           – IBM DB2.
  • postgresql – PostgreSQL.
  • oracle      – Oracle.
  • oraclerdb  – Oracle RDB.
  • access     – MS-Access.

■mapping

 Reactorがファイルを生成するディレクトリへのマッピングです。CFマッピングで与えられるか、webルート直下にある必要があります。 

■mode

詳細には触れませんが、アプリケーション開発中は、モードを”development”に設定しておきたいものです。データベース構造が変化したときやリレーションを変更したときに、Reactorにオブジェクトを再作成させます。

 

 

 

 

 

 

 

 

Argument

Required

Type

Description

Value

Yes

String

Reactorシステムが動作するモードを指定します。指定可能なモードは以下のとおりです。

development - 開発モード

production - 製品モード

always - 常時モード(=開発モード)

 

Reactorをはじめる-3

さっそく、Brian Rinaldiのブログで、cf open-source listのReactorアプリケーション紹介記事を見てみます。
ColdFusion用オープンソースを管理するために、データベースに3つのテーブルを作成しています。
一つ目は、オープンソースソフトウェアのリソース情報を格納するOpenSourceResourceテーブル。
二つ目は、オープンソースソフトウェアのカテゴリ情報を格納するOpenSourceCategoryテーブル。
三つ目は、OpenSourceResourceとOpenSourceCategoryをつなぐリンクテーブルであるOpenSourceResourceCategoriesテーブルです。

各オープンソースソフトウェア毎に複数のカテゴリを登録可能なように、リンクテーブルを介してリソーステーブルとカテゴリテーブルのリレーションを定義しています。

それを含めて、Reactor.xmlというコンフィグレーションファイルに以下のセクションを定義します。

<reactor>

<config>

<dsn></dsn>
<project></project>
<type></type>
<mapping></mapping>
<mode></mode>

</config>
<objects>

<object name="OpenSourceResource"></obeject>
<object name="OpenSourceCategory"></obeject>
<object name="OpenSourceResourceCategories"></obeject>

</objects>

</reactor>

各々のセクションについては、次回説明します。

Reactorをはじめる-2

さて、Reactorについては、以前のブログで紹介しました。
Reactorは、ColdFusion上でパーシスタントレイヤをハンドリングするサブフレームワークです。
Reactorの主要機能は以下のとおりです。

  • Reactorは、以下のORMオブジェクトを自動生成する。
  1. Recordオブジェクト
  2. Gatewayオブジェクト
  3. DAOオブジェクト
  4. TOオブジェクト
  5. Metadataオブジェクト
  • Reactor.xmlファイルで、テーブル間のリレーションシップを定義できる。
  1. HasOne
  2. HasMany(Direct)
  3. HasMany(Link)
  4. Super
  • サポートするDBMSは以下のとおり。
  1. MSSQL
  2. MySQL4
  3. MySQL5
  4. PostgreSQL
  5. MS-ACCESS
  6. DB2
  7. Oracle
  • Iteratorやイベントモデルも可能
  • RecordオブジェクトやDAOオブジェクト内でValidate用のファンクションをユーザ定義することが可能

Brian Rinaldi が彼のブログで Getting Started with Reactorを書いてあるので、サンプルとして次回から紹介してみることにします。
ちなみに、彼のcf open-source Listは、Reactorを使って作成されています。

Reactorをはじめる-1

ここしばらく、CF-OOP関連記事の投稿をさぼっていました。

実は理由があって、
hostnexus.comでのCFホスティングを利用しはじめたんですけど、
CFホスティングとMySQL間のエンコーディング問題が発生して、サジを投げていたところなんです。
でも、サジを投げてばかりもいられないので、以下のことを、シコシコがんばっていました。
本格的にこのサイトと連動しながら、独り言風にブログで活動状況をお知らせしていこうと思います。

  • CF-OOPサイトの立上げ(MediaWikiベース) 

http://ganymean.org/mediawiki/

  • Reactor関連ドキュメントの翻訳作業

近々、アップする予定です。
また、ModelGlue+ColdSpring+Reactorのアプリケーション開発について、このブログを通じて、皆さんにサンプルアプリケーション例を紹介していく予定です。

  • ポータルサイトの立上げ

http://ganymean.org/ をManboを使って、ポータル化
CF-Nuke等に近々変更予定。Geeklogに変更済みです。

  • このブログをドメインマッピング化

http://blog.ganymean.org/
でアクセス可能にしてあります。

フレームワーク連携

以前、ModelGlue+ColdSpring+reactorによるフレームワークの連携が
今後の主流になるかもしれないと予想しましたが、その後、
1.reactorの機能強化
2.ColdSpringによる外部Factory呼び出しの実装
3.ModelGlueにおけるAutowiringControllerの実装
を経て、それが現実的になろうとしています。

Seanの最近の記事には、彼のフレームワークサンプルggccのバリアント、
ModelGlue+ColdSpring+reactorに対応させるためのColdSpringとreactorの
連携が紹介されています。以下は、その関連記事です。

Model-Glue, ColdSpring and Reactor
Model-Glue, ColdSpring and Reactor - follow-up
Model-Glue, ColdSpring and Reactor - another follow-up

Sean曰く、bean.cfc、DAO.cfc、Gateway.cfcなど12のCFCsが不要に
なったとのことです。Seanのggcc10アプリケーションアップをアップを
楽しみにして待っていよう。

ログイン

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

    パスワード:

PR情報

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

更新ブログ

google Search

  • Google
    blog.ganymean.org
    WWW

最近のトラックバック

Google

SHINOBI

Blog powered by TypePad
Member since 04/2005