Agile2008 チーム参加レポート - 動機/準備編
筆者はアジャイルソフトウェア開発についての年に一度の国際会議であるAgile2008に初めて参加してきました。今年の日本からの参加者の数は14名にも及び、発表者は5名、受け持ったセッションは8つに及び、例年にない活躍を見せました。なぜ今年のAgile2008では、これほど多くの日本人が参加し発表に至ったのか? そのレポートをお届けします。
作者 Srini Penchikala, 翻訳者 渡嘉敷 満理子 投稿日 2008年10月12日 午後6時39分
一般的なGrails(リンク)アプリケーションは、ビルド・プロセスかあるいはドメイン・クラス(リンク)やコントローラ(リンク)といった個々のアーティファクトかは問わず、アプリケーション・ライフサイクルの重要なポイントでイベントをスローする。アプリケーション・イベントはリスナがそのイベントを遮断し(リンク)、カスタムの振る舞いでイベントに対応するよう設定するのに適した拡張ポイントと言える。HTTPリクエストおよびレスポンスの標準的なWebアプリケーション・ライフサイクルに加え、Grailsには、開発者がイベント・モデルを利用しカスタムな振る舞いを提供するためのカスタム・タッチポイントが多く用意されている。これらのタッチポイントには以下のものが含まれている。
バージョン0.5から利用可能であるGant(リンク)スクリプト向けのイベント・ハンドラは、Grailsターゲットおよびプラグイン・スクリプトの実行中にトリガーされる。Events.groovyスクリプトの一連のクロージャ(Grailsの他のすべてのもの)として実装され、「event」で始まる名前で定義される。Grantスクリプトで対応する「イベント」が発生したとき、イベントのクロージャは呼び出される。Grailsは以下のロケーションでこれらのスクリプトを検索する。
Grailsのイベント処理(リンク)はマクロおよびマイクロ・レベルで管理できる。マクロ・レベルとはビルドおよびアプリケーションの規模である。マイクロ・レベルのイベントはドメイン・レイヤで発生し、ドメイン・クラスがデータベースと対話するたびにイベントを発行する。 Scott Davis氏(リンク)は近ごろGrailsイベント・モデルについて、またデベロッパがアプリケーションの振る舞いをさらにカスタマイズする際に、Grailsアプリケーション・ライフサイクルを通じたイベントがどのように役に立つのかについて書いた(リンク)。 デベロッパは、Events.groovyファイルを作成し、それにカスタム・コードを置くことで、標準Grailsスクリプトを修正せずに、ビルド・プロセスを拡張することができる。
ビルド・イベント:
「grails create-app」および「grails run-app」(または「grails war」)コマンド間のビルド・プロセスのすべてのステップには、重要なポイントでスローされるイベントがある。リスナを作成することで、これらのビル・ドイベント(リンク)をプロジェクトで利用することができる。これらのイベントは、インストール後の構成およびアプリケーション・アップグレードでも使用することができる。(カスタムイベントをスローするために)GRAILS_HOME/スクリプトでスクリプトをカスタマイズする場合、カスタム・スクリプトが他のものと一緒にソース・コントロールにチェックインするように、これらのファイルをプロジェクトのスクリプト・ディレクトリに直接コピーすることを、Scott氏は提言している。
アプリケーション・イベント:
ビルド・イベントの他に、アプリケーション・ロジックのカスタマイズにアプリケーション・イベントも利用可能である。grails-app/confにあるBootStrap(リンク)ファイルは、Grailsの起動および停止のたびに実行される。BootStrapファイルのinitクロージャは起動時に呼び出され、destroyクロージャはアプリケーションがシャットダウンされる際に呼び出される。init イベントおよびdestroyイベントの両方が発生した場合、デバッグ・メッセージを確認するには次のように入力しGrailsを対話モードで起動する。
grails interactive"
アプリケーション・イベントの拡張の例は、ブートストラップ時、データベースに新たなレコードを追加することである。Scott氏は、データベースでの重複レコードを避けるために、BootStrap.groovyにおけるFailsafeデータベースの挿入および削除について述べた。また、GrailsUtil(リンク)クラスを使用して、Bootstrapスクリプトでの環境固有の(Development、TestまたはProduction)アクションについて説明した。 スクリプトの上部にあるgrails.util.GrailsUtilをインポートして、静的メソッドGrailsUtil.getEnvironment() (Groovyの簡潔なgetter構文が理由で、GrailsUtil.を簡略化するためにメソッドは省略可能)を呼び出し、実行しているモードを確認することができる。
ドメイン・クラス・イベント:
CRUD操作の4つのイベント・フックが含まれる。 onLoad、beforeInsert、befortUpdateおよびbeforeDeleteであり、データベース操作が呼び出されたときにトリガーされる。
上記イベントを補強するために、GrailsはGORMイベント(リンク)とHibernateプラグイン(リンク)をサポートしている。GORMイベントのカスタマイズには、削除、挿入、更新といった特定イベントの発生とともに発生するイベントの登録も含まれる。Hibernateイベント・プラグインにより、メソッド(AfterInsert、afterUpdate、afterDelete、beforeLoad、afterLoad、beforeSave、およびafterSave)を使用してhibernateイベント・システムと連携するためのドメイン・モデルが強化された。他のドメイン・レイヤ・イベントにドメイン・クラスのタイムスタンプがある。具体的な名前付きフィールドをいくつか(lastUpdatedおよびateCreated)設定すると、GORM(リンク)は自動的にクラスのタイムスタンプを取得する。
Webアプリケーションの他のレイヤでは、GrailsはWebフローを実行するトランザクションをある状態から別の状態へ(ビューの状態またはアクション状態が該当する)管理するためにWeb Layer Flow Execution Event(リンク)を提供している。また、Webアプリケーションで特定のイベントが発生した際に、明確なjavascript関数を呼び出すためのAjax Event(リンク)も用意されている。
GrailsはAuto Reload Event(リンク)の抑止もサポートしている。このイベントはあらゆるデータ変更のリソース監視、および変更が発生した際のリロードに使用される。このようにしてGrailsでは実行時のアプリケーション状態のリロードが実装されている。
原文はこちらです:http://www.infoq.com/news/2008/09/grails-event-model
【無償】「Google Apps 企業向けソリューションセミナー」のご案内
~野村総合研究所が提案~ 「不況を乗り切る!効果的なIT投資を考えるセミナー」
Javaに関するトラブル事例を解説~トラブルシューティングセミナー~
筆者はアジャイルソフトウェア開発についての年に一度の国際会議であるAgile2008に初めて参加してきました。今年の日本からの参加者の数は14名にも及び、発表者は5名、受け持ったセッションは8つに及び、例年にない活躍を見せました。なぜ今年のAgile2008では、これほど多くの日本人が参加し発表に至ったのか? そのレポートをお届けします。
エスエムジーでは、Java全般を対象にしたトラブルシューティングサービス「JaTS」を提供しています。この記事では、前回に引き続き、JaTSにて蓄積したトラブル事例とその解決ノウハウの一部をお送りしている「Javaトラブルシューティングメールマガジン」(JTSMM)の総集編として、過去2ヶ月のトラブル事例と追加情報をダイジェストとして提供いたします。
この記事では、モデル駆動アプローチがうまく機能しない、または機能しなくなることによって期待した結果が実現できなくなる 8 つの理由について書きたいと思います。
InfoQ.com向けのこのバーチャルパネルでは、大企業やプロジェクトからスケーラビリティやパフォーマンスの著名人を招待し、みんなが夢に描いているような結果を達成するための秘密を明かしてもらいました。
Craig Larman氏とBas Vodde氏は、どのように、そして、なぜ機能チームがうまくいくのかを説明し、この主要な組織の変化が価値あるものであることを主張します。
最近リリースされたRuby 1.8.7のプレビューリリースをウオッチしていたRails開発者はすぐに1.8.7プレビュー1に関してあることに気がつきました。それは、1.8.7プレビュー1がRailsを破壊してしまうということです。
No comments
返信