データ・バインダーの概要

Java ビジュアル・エディターは、 インターフェースおよびクラスの汎用フレームワークを提供することによって、 ビジュアル・コンポーネントを Enterprise Bean、Java Bean ファクトリー、 または Web サービスといったデータ・ソースへのバインドを支援します。

テーブルやテキスト・フィールドのようなビジュアル・コンポーネントには、 データのプル元となるデータ・ソースが必要です。また、このデータ・ソースにデータをプッシュすることもできます。 Java ビジュアル・エディターでは、3 つタイプのヘルパー・クラスが提供されます。 これらのクラスを対象のプロジェクト内に生成して、 ビジュアル・コンポーネントとデータ・ソースからのデータを簡単に素早くバインディングできるようにすることが可能です。 このヘルパー・クラスの目的は、 データとビジュアル・コンポーネントをバインディングするためのランタイム・フレームワークを提供することでなく、 クライアント・アプリケーションがビジュアル開発を迅速に開始できるようにすることです。 

3 つのタイプのヘルパー・クラスとは、データ・ソース、データ・オブジェクト、 およびバインダーで、それぞれについては以降で詳細に説明します。 ビジュアル・エディターは、サポートされる種々の Swing コンポーネント向けに Swing 特定のバインダー・クラスを生成しますが、 データ・ソースおよびデータ・オブジェクトのクラスは、ビジュアル・コンポーネントとは完全に独立しており、 将来、他のウィジェット・ライブラリーをサポートできるようにするものです。

提供される汎用バインダー・クラスの Javadoc については、 『API reference for binders』を参照してください。

Java ビジュアル・エディター・バインダーを使用して、 データ・ソースに接続する方法を学習するには、以下のチュートリアルを進めてください。

チュートリアル: Web サービスを使用する Java リッチ・クライアントのビルド

ビジュアル・コンポーネントをバインドするときに、Java ビジュアル・エディターによって生成され、 インスタンス化されるバインダー・クラスのいくつかの利点の説明を次にリストします。

ビジュアル・コンポーネントをデータ・ソースおよびデータ・オブジェクトにバインドするときに、 必要に応じて、対象のプロジェクト・ソース・ディレクトリー内にバインダー・コードが生成されます。 デフォルトでは、生成済みクラスは、対象プロジェクトの jve.generated パッケージに追加されます。 これで、データ・バインディングのロジックを自由に拡張したり、置き換えたり、あるいは書き直したりできます。 Java ビジュアル・エディターは、提供されるインターフェースを正しく実装するデータ・オブジェクト、 データ・ソース、およびバインダーに対してビジュアル・サポートを提供します。

図 1. Java ビジュアル・エディターがビジュアル・コンポーネントをデータ・オブジェクト、 およびデータ・ソースにバインドする方法を示すハイレベルな概要
Java ビジュアル・エディターで使用されるビジュアル・コンポーネント、バインダー、データ・オブジェクト、およびデータ・ソース間の関係を示すダイアグラム

このダイアグラムは、Java ビジュアル・エディターが、 ビジュアル・コンポーネントをデータにバインドするプロセスの以下の主要部分を図示しています。
データ・ソース

ビジュアル・エディター・パレット上のデータ・ソース

データ・ソースはデータ・ファクトリーを表します。 これは、EJB Session Bean、Web サービス、Java Bean ファクトリー、 または IDataSource インターフェースを実装するものをベースにすることができます。 ビジュアル・エディターで正しく構成されたデータ・ソースは、使用可能な一連のサービスを実データ・ファクトリーから戻し、 アプリケーションで使用できるようにします。

データ・ソースは、ファサードのファクトリーとみなすことができます。 データ・ソースが提供する構成プロパティーでは、データ・ソース・ファサードのインスタンス化と初期化が可能です。 ファサードとは、データ・オブジェクトをバックエンドから作成できるメソッドのセットを提供するか、 その他のビジネス機能を提供するクラスです。 ランタイムで、getDataSource() インターフェースが使用され、ファサードのインスタンスが取得されます。 ファサードが確実に正しくインスタンス化されるようにするのは、データ・ソースの実装者の責任です。 例えば、EJB データ・ソースは、ホーム・インターフェースを呼び出して、 指定された Session Bean を作成してから getDataSource() を呼び出します。 getType() は、ファサード・クラスのタイプ (クラス) を戻さなければなりません。 この API はデザイン時に、主にメソッドのイントロスペクションのために呼び出されます。

Java ビジュアル・エディターはデフォルトで、以下のタイプのデータ・ソースをサポートし、 これらは IDataSource インターフェースを実装します。
EJB データ・ソース ビジュアル・エディター・パレット上のデータ・ソース
EJB データ・ソースを使用すると、簡単な方法で Enterprise Bean への接続を管理することができ、 アプリケーションで、その Bean のサービスをメソッドとして使用できるようにします。
注: EJB データ・ソースを作成するときに、serviceLocatorMgr.jar がプロジェクト・クラスパスに追加されます。
Web サービス・データ・ソース ビジュアル・エディター・パレット上のデータ・ソース
Web サービス・データ・ソースは、Web サービス・プロキシーとの接続を構成する場合に使用されます。 このデータ・ソースは、クライアント・プロキシーのロケーター・クラスの完全に修飾されたクラス名を指定し、 ロケーター・クラス内に get サービス・メソッドを指定することによって構成されます。
Java Bean データ・ソース ビジュアル・エディター・パレット上のデータ・ソース
Java Bean データ・ソースは、ヌル・コンストラクターを使用して、Java Bean ファクトリーをインスタンス化します。 その後、この Bean の public メソッドは、サービス・メソッドとして使用可能になります。
データ・オブジェクト

ビジュアル・エディター・パレット上のデータ・オブジェクト

データ・オブジェクトは、Java オブジェクトをラップして管理し、 それに対するイベント変更サポートを提供します。 ターゲット・オブジェクトにアクセスするには、IBoundObject インターフェース上の getObject() メソッドを使用します。

Java ビジュアル・エディターで実装するデータ・オブジェクトにはいくつかのタイプがあり、パレットで使用できます。

データ・ソース・データ・オブジェクト データ・ソース・データ・オブジェクト・アイコン
データ・ソース・データ・オブジェクトは、 データ・ソース上でサービス (メソッド) を呼び出すことによって直接、データを取得します。 そのためには、データ・ソース、およびそのデータ・ソース上の特定のサービスで、 データを提供するものを自分自身で指定する必要があります。 そのサービスがパラメーターを持つ場合は、データ・ソース・データ・オブジェクト内に、サービスの引き数を定義できます。

図 1 では、Service2(param) を呼び出すことによって戻されるデータ・オブジェクトを表すデータ・ソース・データ・オブジェクト内のプロパティーにテキスト・フィールドがバインドされています。 このリリースで、ヘルパー・クラスがサポートするのは、1 つまたは少数の引き数を持つサービスのみです。 予備手段として、別のサービスに 1 セットの引き数をラップできます。

Java Bean データ・オブジェクト Java Bean データ・オブジェクト・アイコン
Java Bean データ・オブジェクトは、Java Bean ファクトリーが提供する NULL コンストラクターを使用して、 Java オブジェクトを作成します。 Java Bean データ・オブジェクトを定義するには、Java Bean ファクトリーと、 Java オブジェクトに NULL コンストラクターを提供するファクトリー内のプロパティーを指定します。
基本データ・オブジェクト 基本データ・オブジェクト・アイコン
基本データ・オブジェクトとは、別のデータ・オブジェクトから直接検索される単一データ・オブジェクトのことです。 基本データ・オブジェクトを構成するには、ソース・オブジェクトを指定し、 オプションで、そのソース・オブジェクト内のプロパティーを指定するだけです。
データ・ソース行オブジェクト データ・ソース行オブジェクト・アイコン
データ・ソース行オブジェクトとは、データ・ソースでのサービス呼び出しによって検索されるオブジェクトの行 (オブジェクトの配列) のことです。 データ・ソース行オブジェクトは一般には、テーブルにバインドされます。

前の図では、ビジュアル・テーブルは、データ・ソース行オブジェクトにバインドされていますが、 このオブジェクトは、データ・ソースでの Service1 呼び出しによって戻されるデータ・オブジェクトの配列を表します。 このテーブルの列はデータ・ソース行オブジェクト内のフィールドにマップされます。

バインダー

ビジュアル・エディター・パレット上の Swing バインダー
バインダーは、ビジュアル・コンポーネントをデータ・オブジェクトまたはデータ・ソースにバインドするメタ・オブジェクトです。 ビジュアル・コンポーネントとそのバインダーとの間には、1 対 1 の関係があります。 データ・オブジェクトとそのデータ・オブジェクトと相互作用するバインダーとの間の関係は 1 対多になります。 つまり、ある特定のデータ・オブジェクトには複数のビジュアル・コンポーネントをバインドできますが、 どのビジュアル・コンポーネントにもそれが所有するバインダーが必要になります。
行テーブル・バインダー 行テーブル・バインダーのアイコン
行テーブル・バインダーとは、ビジュアル・テーブルをエレメントの配列にバインドするために使用されるメタ・オブジェクトです。 このバインダーは、どの列をリストするか、列のヘッダー、およびオプションのフィルターといった情報を保持します。 また、テーブル・バインダーは、 行テーブル・バインダーに関連したビジュアル・テーブル内の選択済みオブジェクトを表す基本データ・オブジェクト (IDataObject インターフェース) の実装も行います。 つまり、テーブル内で選択された行は基本データ・オブジェクトとして使用可能になります。

図 1 は、行テーブル・バインダーが、ビジュアル・テーブル内で選択済みの行を listen し、 その行に対して基本データ・オブジェクトを提供する様子を示しています。 この基本データ・オブジェクトは、 Service2(param) のパラメーターとして使用されて、 データ・ソース・データ・オブジェクトを戻します。 図 1 のテキスト・フィールドは、このデータ・ソース・データ・オブジェクトにバインドされています。

オブジェクト・テーブル・バインダー オブジェクト・テーブル・バインダーのアイコン
オブジェクト・テーブル・バインダーは、テーブルをソース・サービスにバインドするのではなく、 別の IDataObject の配列プロパティーにバインドします。

これは、データ・ソースでのサービス呼び出しから直接に行データを取得する行テーブル・バインダーと同様です。

テキスト・バインダー テキスト・バインダーのアイコン
テキスト・バインダーには、データ・オブジェクトのバインドされたプロパティーのストリング・テキスト表現が含まれています。 このバインダーは、ビジュアル・テキスト・フィールドをデータ・オブジェクトのプロパティーにバインドする場合に使用されます。

図 1 では、テキスト・バインダーが、ビジュアル・テキスト・フィールドを、 Service2(param) によって戻されるデータ・ソース・データ・オブジェクト内のプロパティーにバインドしています。 図 1 の Service2 のパラメーターは、テーブル内の選択された行 (おそらく ID といったキー・フィールド) から収集されます。 この例では、Service2 は、ビジュアル・テーブル内の選択済み行に関するプロパティーを推定より多く戻します。 例えば、ビジュアル・テーブルは、姓および従業員 ID 付きですべての従業員をリストできます。 選択された行の従業員 ID は、Service2 へのパラメーターとして使用され、 Service2 はこの従業員に関する全レコードを戻すことができます。これには従業員の給与も含まれます。 したがって、テキスト・フィールドを Service2 から戻されるデータ・ソース・データ・オブジェクト内の給与プロパティーにバインドできます。

アクション・バインダー アクション・バインダーのアイコン
アクション・バインダーは、ボタンをデータ・ソース内で使用可能な特定のサービス (メソッド) に直接バインドするために使用されます。 また、アクション・バインダーには、 イベント・リスナーおよびバインドされたビジュアル・コンポーネントの状態と動作を制御できるフィールドも含まれます。 それだけでなく、beforeActionPerformed および afterActionPerformed コールバックに対する ActionBinderListener サポートも提供します。

Java ビジュアル・エディターは、JButtons とアクションのバインディングをサポートします。 ボタンがアクション・バインダーにバインドされると、 そのアクション・バインダーは、アクションの引き数が変更されたときに、自動的にそのボタンの使用可能状態を変更します。 例えば、サービス呼び出しを起動するアクション・バインダーは、そのサービス呼び出しのパラメーターが変更されると、 ボタンの使用可能状態を変更します。

図 1 の例では、ボタンのアクション・バインダーは、 テキスト・フィールドがバインドされている同じデータ・オブジェクトをパラメーターとして使用しています。 そのため、テキスト・フィールドのテキストが変更されると、 このボタンのアクション・バインダーは、データ・オブジェクトが変更されたことを検出し、 アクション・バインダーは、ボタンを使用可能にします。 その後で、このボタンがクリックされると、アクション・バインダーは、 テキスト・フィールド内の変更された値を持つ新規データ・オブジェクトを取得し、 データ・ソース上で Service3(param) を呼び出します。

テキスト・フィルター・バインダー テキスト・フィルター・バインダー
フィルター・バインダーは、テキスト・フィールド内のテキスト入力に基づいて、 テーブルの行をフィルター処理するためのシンプルなメカニズムを備えています。 フィルター・バインダーでは、テキスト入力用に使用するビジュアル・テキスト・フィールドを設定し、 フィルター処理の対象となる行データ・オブジェクトにプロパティー (テーブル列) を設定します。

図 1 では、テキスト・フィルター・バインダーがテキスト・フィールド (このダイアグラムには示されていません) をテーブル内の特定の列にバインドしています。

前述のように、生成済みのクラスとインターフェースは、 ビジュアル・コンポーネントとデータ・オブジェクトおよびサービスのバインドを素早く簡単に始めるための手段に過ぎないことは重要ですので注意してください。 Java ビジュアル・エディターによって生成されたバインダーは、フレームワークになるのではなく、 むしろ、Java ビジュアル・エディターで適切に働く汎用性のあるデフォルトの実装です。 生成済みパッケージ内のクラスやインターフェースは、 対象のアプリケーションおよびデータ・ソースの特定のニーズに合わせて拡張したり、カスタマイズしたりできます。 クラスを拡張しても、それらのクラスが提供されたインターフェースを正しく実装している限り、 ビジュアル・エディターは、ビジュアル・サポートを提供し続けます。

ご利用条件 | フィードバック
(C) Copyright IBM Corporation 1999, 2004. All Rights Reserved. (C) Copyright IBM Japan 2005