タイムセールスの機能を組み込む
前回約束したとおり、タイムセールスの機能を入れてみましょう。タイムセールスの時間帯というものは毎日同じとは限りません。このような場合はプログラム内に時刻の値を持つと、時間帯を変更するたびにビルドし、再起動しなくてはならなくなります。せめて、ビルドすることなく時間帯を変更したいものです。それを実現するための1つの方法がプロパティです。再起動したときに自動的にコンポーネントに値が渡されます。いわゆる依存性注入(DI:Dedendecy Injection)です。これはSCAが発明したわけではなく、Spring等で実装されているDIと同じです。SCAに準拠したSOA製品であるなら、リファレンスとプロパティはDI可能です。
コンポジットファイルの設定
具体的にはコンポジットファイルのcomponentの子要素にproperty
要素を追加します。そのname
属性値がコンポーネントのメンバ変数に相当します。property
要素内容が実際に渡される値です。図12ではstartTimeとendTimeという名前のプロパティがそれぞれ18と20という値を持っています。property
要素はcomponent
要素内だけでなく、component
要素と同じレベルで指定することで、すべてのコンポーネントに値を設定することが可能です。参照の仕方は簡単ですが、XPathを使用すると複雑な参照も可能です。
実装ファイルでの設定
@Property
アノテーションのためのインポートと、プロパティを取り込むための設定するためのメンバ変数を宣言します(図13)。またプロパティを取り込むためのセッターメソッドも記述します(図14)。セッターメソッドの上に@Property
アノテーションを指定します。2つの受け取った値の時間帯にあるか判定し、時間帯内なら2割引き、時間帯外なら割引なしとしています。詳しくはサンプルファイルで確認してください。
図15は時刻が23時だったため、割引されていません。
図16のようにpropertyの値を22と24と設定しなおし、再起動すると図16のように2割引きされています。タイムセールスの時間帯の情報も22:00~24:00と自動的に変わるようになっています。
次回は、WSDLファイルを使ったWebサービスによるコンポーネントの組み合わせを紹介します。