メタプログラミングを使ってRubyにプロパティを追加する
Werner Schuster氏が、簡単な例を示しながら、Javaのようなプロパティをメタプログラミングを使ってRubyに追加する方法を示します。
- Ruby,
作者 Charles Humble, 翻訳者 八角研究所 投稿日 2008年4月13日 午前12時10分
ほとんどのエンタープライズアプリケーションでは、データに対する制約は次の 2 つの場所に存在する。Hibernate Validator のリード開発者である Emmanuel Bernard 氏が主導する JSR-303 は、Java EE 6 のための制約メタデータモデルの標準化を目指している。現在、仕様のアーリードラフト(source)がリリースされ、エキスパートグループがフィードバックを求めている。フィードバック収集の一環としてフォーラム(source)発足しており、また Bernard 氏は、Hibernate ブログに連載記事(パート 1(source)、パート 2 (source))を投稿しはじめ、API がどのように動作するのかを記述している。
JSR-303 は、その誕生のいきさつを考えれば当然だが、JBoss の Hibernate Validation に多大な影響を受けている。そのほかのいくつかのバリデーション用フレームワーク(たとえば Xwork や Apache Commons Validator など)にも影響を受けてはいるが。この仕様では、ほとんどのケースでアノテーションを利用し、実行時のバリデーションとメタデータ取得のための標準 API を提供する。制約アノテーションはそれぞれ String 型のメッセージを定義しなくてはならない。これはエラーメッセージとして利用される。エラーメッセージは国際化に対応している。制約はオブジェクトのフィールド、getter メソッド、クラス、スーパークラス、インタフェースに宣言することができ、オブジェクトの検証を実行すると、それらすべての制約が検証される。たとえば次のコードは street1 という名前の String オブジェクトを作成し、それに長さが最大 50 文字で入力を必須とする制約をつける。
@NotEmpty @Max(50)
private String street1;
フレームワークは拡張できるように設計されているので、アプリケーションに専用の制約を追加定義できる。Bernard 氏の最初のブログエントリ(source)によると制約の定義に必要なものは次のとおりである。
「制約は次の項目から構成される。
• アノテーション
• 制約バリデーションの実装アノテーションはドメインモデル上で制約を表わすために用いられるのに対し、バリデーションの実装は入力された値が制約をクリアするかどうかを決定する。」
仕様では、インスタンスのバリデーションと同様にオブジェクトグラフのバリデーションもサポートされる。そのため、たとえば仮に ClientDetails という Bean が Address という Bean を @valid アノテーション付きのフィールドに保持していたら、バリデータは ClientDetails Bean の検証時に Address Bean の内容も検証する。.
この仕様と Hibernate Validator との間にはひとつ重大な違いがある。それは、バリデーションのサブセットを作成する方法を提供する、グループの概念である。ある制約のセットがエラーなしでクリアされなければ次のセットが実行されないようにするために、グループは順序をもつ( @GroupSequence アノテーションを使って設定する)。グループは JavaBean の部分的なバリデーションも可能にする。ドラフト仕様はこれが役に立つ 2 つのシナリオを提示している。
「• 2 番目のグループが適切に実行されるために安定した状態が求められる場合Java EE 6 における技術のさまざまなところで JSR-303 が役に立つはずである。たとえば ORM ツールによって生成された際の DDL の更新や、Java Persistence API による挿入・更新時のエンティティのバリデーション、あたらしい WebBeans API、そして JavaServerFaces コンポーネントなど。いずれも疑う余地のない候補のように思える。
• 2 番目のグループが時間や CPU やメモリを激しく消費するため、可能であれば実行を避けたい場合」
Werner Schuster氏が、簡単な例を示しながら、Javaのようなプロパティをメタプログラミングを使ってRubyに追加する方法を示します。
現在のRIAアーキテクチャにおいて、クライアント/サーバーの通信は重要な位置を占めています。本稿では、James WardとShashank TiwariがアドビによるオープンソースのBlazeDSメッセージングサーバーの世界へ飛び込みます。
ウィルス対策ソフトや情報漏えい防止用のソフトは、いわば影の存在です。ユーザの操作性やGUIを工夫する以上に、いかに目立たない存在となるかにその技術を注ぎ込んでいます。ここでは日立ソフトが開発した「秘文」の事例を紹介します。
Google Chartは、チャートを作成するためのWebサービスです。本稿では、Google Chartのインターフェースと、Rubyコードから簡単にチャートを生成することができるgchartrbライブラリの説明をします。
全二回からなるこの記事では、ダイナミックビジネスアプリケーション(Dynamic Business Applications:DBAs)の開発についての全体的な眺望を、アーキテクチャと方法論の観点から見ていくことになります。我々のゴールは、「ビジネスの変化や、その他に必要とされる変更に対して、いかにして容易に適応できるアプリケーションを構築していくか」を導きだすことです。
本稿では、Adrien Louis氏がESBベースのSOAに対する2つの接続形態についての賛否について説明しています。その2つとは、会社での単一のESB対「部門毎」に相互接続するESBによるシステムです。
誕生から2年を経てCometは「何が出来るのか」という議論から、「いかに実現するか」という議論に関心が移ってきたように見えます。そこで本稿では同じくJavaOneで数多く取り上げられたNetBeans 6.1とGlassFish v3を使いながら、サンプルを交えてCometを解説していく事にします。
この記事では、WSS3とMOSS 2007に難しい設定など一切せず、すぐに利用可能なWebサービスと、Javaと.NETからそのWebサービスを消費する方法に目を向けます。
No comments
返信