pureQuery について学ぶ: 第 1 回 Java データベース・アプリケーション作成のための IBM の新しいパラダイム

短時間、最小限のコーディング作業で、どこででも実行できるアプリケーションを作る

pureQuery プロジェクトは、データベース・アプリケーション開発者に設計および実装の両フェーズで大幅に生産性を向上させる手軽な GUI ベースの手段を提供します。これを実現するのは、データにアクセスして操作する際にユーザーが起動する、リレーショナル・データから Java™ オブジェクトへの自動変換です。変換後のオブジェクトは、ビジネス・ロジックやベースとなるコードを作成する際に、通常のオブジェクト指向 (OO) プログラミング・パラダイムでそのまま使用することができます。問い合わせ言語を Java 自体に統合する pureQuery の機能によって、実質的に、従来の JDBC プログラミングは排除されることになります。この記事は、pureQuery に関するシリーズの第 1 回です。

Azadeh Ahadian (azadeh@us.ibm.com), Eclipse Application Development Tools , IBM

Photo: Azadeh Ahadian Azadeh Ahadian は、カリフォルニア州サンノゼにある IBM Silicon Valley Lab 情報管理ツール組織のソフトウェア開発者です。修士号を持つ彼女は、ソフトウェア・アプリケーションおよびツールの開発分野で 8 年以上の経験を積んでいます。pureQuery 設計時チームでは主要な貢献者およびメンバーとして活躍しています。



2007年 12月 14日 (初版 2007年 8月 16日)

はじめに

リレーショナル・データ・アクセスのオブジェクト化

大抵のビジネスが構成基盤とする情報管理システムは、その主なインフラストラクチャーのベースを 1 つ以上のリレーショナル・データベースに保管されたデータとしています。このようなシステムは、情報処理を唯一の目的としたソフトウェア・プログラムで構成され、Java などの管理言語で実装されます。

Java はカプセル化、継承、そしてポリモーフィズムの使いやすさを特徴とする OO (Object Oriented: オブジェクト指向) ベースの言語として、情報処理プログラムの計算面と論理面を実装するために使用される一方、リレーショナル・データのアクセスおよび操作にも使用されています。リレーショナル・データベースでは列を使用しますが、Java は情報をオブジェクトという観点で定義します。オブジェクトとはそれぞれが属するクラス固有のインスタンスであるため、お互いが物理的に区別されます。同様にリレーショナル・データベースの列も主キーの値で識別される限り固有なものです。その一方、オブジェクトは単体で、別のオブジェクトによって参照されている限り存続しますが、テーブルの要素として存在する列はテーブルが削除されると同時に削除されます。

したがって、オブジェクトと列は多くの点で似通ってはいるものの、スケーラビリティー、拡張性、そして効率的なコード・メンテナンスという点で、モジュール・プログラミングにとってオブジェクトが持っている本来の価値は、オブジェクト化を通じてリレーショナル列層を抽象化する設計原理の基礎にありました。私たちが定義するオブジェクト化とは、カプセル化、継承、ポリモーフィズムという OO の基本概念を、SQL を使用して実行する OO ではない集約的な命令型インライン・データ・クエリー・プラクティスに適用するプロセスのことです。要するにオブジェクト化とは、純粋な OO パラダイムのなかで、データベース操作 (作成、置換、更新、削除など) を実行することのできるメソッドを備えたシームレスなオブジェクトを作成するプロセスだと言えます。

プログラムでリレーショナル・データにアクセスし、操作するためのオブジェクト化を行う場合にもっともよく使われる方法は、テキスト・ストリングとして作成された 1 つ以上の SQL 文を提供する特別な API とラッパーを使用することです。リレーショナル・データの処理全体はカプセル化された SQL 文をベースに行われるので、これらの SQL 文はプログラム・ロジックの重要な部分となります。ただし、カプセル化された SQL 文は Java 言語に対しては透過的でないため、コンパイル時の最適化もセマンティックな検証や構文の検証も利用できません。つまり言うまでもなく、コンテンツ・アシストなどの (基礎となる設計および実装プロセスでの大幅な時間短縮に役立つ) 設計時の機能の対象にはならないのです。

このような理由から、プログラマーの効率性と生産性を向上させる上で今まで大きな課題となっていたのは、リレーショナル・データから、基礎となるコードを作成する際に通常の OO プログラミング形式でそのまま使用できるオブジェクトへ変換することです。このプロセスには、データ・アクセスの API をどういう順番で呼び出したらよいかを十分理解していること、基礎となるデータ・アクセス・プログラミング・モデル (JDBC など) について技術的な内容を十分理解していること、さらにソフトウェア (特にそのデータ・アクセス層) をモジュール化したセグメントに分割するためのコーディング技術と能力を持っていることが必要でした。

そこでデータベース・アプリケーション開発者に設計および実装の両フェーズで生産性を大幅に向上させる手軽な GUI ベースの手段を提供するのが、プロジェクト・コード名 pureQuery です。生産性の大幅な向上を実現するのは、データにアクセスして操作する際にユーザーが起動するリレーショナル・データから Java オブジェクトへの自動変換です。変換後のオブジェクトは、ビジネス・ロジックやベースとなるコードを作成する際に、通常の OO プログラミング・パラダイムでそのまま使用することができます。問い合わせ言語を Java に統合する pureQuery の機能によって、実質的に、従来の JDBC プログラミングは排除されることになります。

この記事では pureQuery の概要を紹介し、pureQuery がプログラマーの生産性を大幅に向上させる仕組みを、順を追ったシナリオで説明します。


pureQuery の概要

pureQuery は Eclipse をベースとしたプラグ可能コンポーネントで、Eclipse IDE (Integrated Development Environment) にシームレスに統合し、リレーショナル・データをオブジェクトとして管理するための設計およびランタイムの手段を自動的に提供します。この設計によってもたらされる手段は、開発者がデータベース接続を指定し (DB2® の使用など)、それによって Eclipse Java プロジェクトが基礎となるデータベース成果物 (テーブル、ストアード・プロシージャーなど) を認識できるようにするというものです。データベースに接続してすべてのデータベース成果物のオートディスカバリーが完了すると、ユーザーは GUI によって直観的に基礎となるリレーショナル・テーブル・エンティティーのいずれかを選択し、Java オブジェクトに変換することができます。このような手段を実現するのは、該当する SQL 文の自動生成、そしてこれらの SQL 文をカプセル化する親 Java オブジェクトの自動作成です。生成された Java オブジェクトとそこに含まれる SQL 文は、SQL および Java 編集機能が完全に統合された通常の Eclipse IDE プログラミング環境でさらにカスタマイズすることができます。

Java エディターに SQL が強固に統合されていることにより、プログラミングの生産性が向上するだけでなく、Java コードを作成するときと同じように、シームレスな設計ができ、また SQL のコーディング作業がしやすくなります。このエディター統合では、設計時のコンパイルによるセマンティックな検証と構文検証、コンテンツ・アシスト、構文カラー化、そして Java 内での動的かつ選択的な SQL 実行も完全にサポートされるようになっているため、エラー・ペインには Java エラーとまったく同じようにエラーがマークされます。

さらに、設計からランタイムへの移行時には緊密なハンドシェークが行われるため、使用されるホスト変数およびパラメーターを考慮に入れた SQL 文を設計時に実行し、結果セットをプレビューしたり、SQL 文の実行によって引き起こされる可能性のある副次作用を自動的にロールバックすることも可能です。

設計時に SQL 文を選択してそのパフォーマンスを別途分析するには Visual Explain を起動します。すると、クエリー・リクエストの最適化プログラム実装がグラフィック表示されます。クエリー・リクエストは個々のコンポーネントに分割され、アイコンによってそれぞれ固有のコンポーネントが示されます。Visual Explain には、クエリー最適化プログラムが検討した上で選択したデータベース・オブジェクトに関する情報も表示されます。Visual Explain に表示されたクエリー実装の詳細により、SQL と Eclipse が統合された Java エディター内部から、最も大きなコストが発生する場所をすべて設計の時点で簡単に理解することができます。

pureQuery のオブジェクト化プロセス

pureQuery システムでは、以下の 3 つの方法でリレーショナル・アクセス層からオブジェクト・ベース・モデルへの自動変換を実行することができます。

  • データベース駆動型オブジェクト化 (DDO):
    最も一般的な pureQuery の用途は、テーブルを選択し、データ・アクセスおよび CRUD (作成、置換、更新、削除) と呼ばれるデータ操作のためのオブジェクトを生成することです。この場合、pureQuery は選択されたテーブルで CRUD 操作を行うのに必要な OO ベースのクラスとインターフェースを生成します。また、作成されたオブジェクトのユニット・テストに使用できる特殊なクラスも生成します。これは実質的にテーブルから Java への変換であり、基礎となるテーブルの特性に基づいて、Java を基本とする CRUD 操作が生成されます。詳細は、「簡単ガイド」セクションで説明します。
  • クエリー駆動型オブジェクト化 (QDO):
    アプリケーションのビルド・プロセスを一連のデータベース・クエリー文 (つまり SQL) を基に始めることはよくあります。これは、既存のクエリー文をベースにオブジェクト階層を作成し、そのオブジェクト階層を使って基礎となるアプリケーションをビルドできるようにする必要がある場合に行われ、実質的に SQL から Java への変換です。この変換では、クエリー文は Java を基本とするオブジェクトにシームレスに変換されます。pureQuery システムでは、単純なポイント・アンド・クリックによってクエリー文を選択し、ポップアップ・コンテキスト・メニューを使った直観的な GUI 操作をすることで、簡単に該当するオブジェクト・クラス階層を生成することができます。基本的に、pureQuery システムはクエリー文の解析結果として取得したメタデータを利用して (該当する場合は、システムが基礎としているデータベース接続のメタデータによって)、必要なオブジェクト・クラスを自動生成します。
  • オブジェクト・リレーショナル・マッピング (ORM):
    リレーショナル・テーブルを表現することを意図されている Bean クラスがある一方、データベース内に該当するクラスと目的のテーブルとの間のリンクが存在しないという場合があります。pureQuery では、そのリッチなコンテンツ・アシスト・インフラストラクチャーによる直観的なメカニズムによって、クラス名と基礎となるデータベースに存在する特定のテーブル名との 1 対 1 のマッピング、そしてクラスの protected (または public) 変数とテーブルの列とのマッピングを行うことができます。これは実質的に Java から SQL への変換であり、Java を基本とするエンティティーが、SQL ベースの CRUD 操作にシームレスに変換されます。

必要なすべてのリレーショナル・マッピング・メタデータが備わった Bean クラスはあるけれども、そのクラスのマッピング先となるベースのテーブルがないという場合もあります。そんな場合、pureQuery では直観的な UI を使って、Bean クラスから必要な DDL 文を派生および生成し、必要な基本データベース成果物 (つまり、テーブルと列) を作成することができます。


簡単ガイド

以降のセクションでは、「pureQuery のオブジェクト化プロセス」セクションで説明した 3 つのプロセスに関して、最初に DDO プロセスによる最も一般的な pureQuery の用途を検討し、続いて QDO および ORM プロセスについて概説します。最後に、pureQuery と Eclipse Java エディターとの強固な統合についての概要、そしてこの統合によってもたらされる付加価値的な機能を紹介します。また、SQL 文のテスト実行のための設計とランタイム間でのハンドシェークについても説明します。

これから記載するシナリオを実行する前に、以下のものがインストールされていることを確認してください。

  • DB2 for Linux®, UNIX®, and Windows® バージョン 8.0 以降、および各インストールに付属の SAMPLE データベース
  • Developer Workbench バージョン 9.5
  • pureQuery プラグイン、バージョン 1.0

DB2 および IBM Viper Developer V9.5 Open Beta (Developer Workbench と pureQuery プラグインのソース) のダウンロード・リンクは、この記事の「参考文献」セクションに記載しています。

データベース駆動型オブジェクト化 (DDO) の場合のシナリオ

このセクションでは、従業員の人事に関する単純なシナリオを検討します。このシナリオの目標は、OO パラダイムのなかでプログラムによって従業員データにアクセスし、そのデータを操作することです。

以下のステップでは、DB2 SAMPLE データベース内の Employee テーブルを、あらゆる Java アプリケーションで通常のオブジェクト指向型の形式で使用できるオブジェクト・モデルに変換する pureQuery 対応 Java プロジェクトを作成します。

pureQuery によるデータベース・アプリケーション開発のデザイン・パターンは、以下の基本ステップで構成されます。

ステップ 1. Eclipse IDE で Java プロジェクトを作成する

Java プロジェクトを作成する際には、source フォルダーと bin フォルダーが作成されていることを確認してください。プロジェクトには「Personnel」という名前を付けます。 .

ステップ 2. Personnel Java プロジェクトを pureQuery 対応にする

  1. マウスの右ボタンで Personnel Java プロジェクトを選択し、メニューから Add pureQuery Support を選択します。
    図 1. Eclipse Java プロジェクトの pureQuery 対応化
    Eclipse Java プロジェクトの pureQuery 対応化

    このファイルを拡大するためには、ここをクリックします。

    この操作によって起動される Add pureQuery Support ウィザードを使用して、Java プロジェクトが pureQuery に対応するように設定します。

    ウィザードの最初のページは、一般的なオプションで構成されています。オプションはデフォルト値のままで構いませんが、ここで最も重要な点として、Import required pureQuery JAR files into project の隣にあるチェック・ボックスにチェック・マークが付いていることを確認してください。pureQuery には固有の設計およびランタイム JAR ファイルがあり、これらのファイルは Java プロジェクトに付属させなければならないためです。

    図 2. Add pureQuery Support ウィザード: pureQuery の一般オプション・ページ
    Add pureQuery Support ウィザード: pureQuery の一般オプション・ページ

    Next をクリックして Add pureQuery Support ウィザードの次のページに進みます。

  2. 次に作成するのはデータベース接続です。このページには、検出されたすべてのデータベース接続が表示されるので、そのリストからいずれかのデータベース接続を選択します。既存の接続がない場合は、ウィザードが新規接続の作成手順を案内します。この例では、Employee テーブルが含まれる SAMPLE データベースを選択します。
    図 3. Add pureQuery Support ウィザード: pureQuery のデータベース接続ページ
    Add pureQuery Support ウィザード: pureQuery のデータベース接続ページ
  3. Finish ボタンをクリックしてウィザードを終了し、Personnel Java プロジェクトを pureQuery 対応にします。

ステップ 3. リレーショナル成果物を Java オブジェクトに変換し、pureQuery コードを自動生成する

データベースに接続されると、Java プロジェクトがデータベースを認識するようになります。すると IDE のデータベース・エクスプローラー (Database Explorer) のツリー・ビューに、該当する特定の接続のすべてのデータベース成果物が自動的に表示されます (図 4 を参照)。

図 4. SAMPLE データベースのすべての成果物を表示するデータベース・エクスプローラー
SAMPLE データベースのすべての成果物を表示するデータベース・エクスプローラー

このファイルを拡大するためには、ここをクリックします。

pureQuery の実力は、基礎となるリレーショナル・データベース・テーブルの任意の成果物を Java オブジェクトに変換するために必要なコードを自動生成できることにあります。その実力を発揮させるには、目的のデータベース成果物を選択して、pureQuery Code Generation ウィザードを起動するだけです。

以下のステップに従って、リレーショナル成果物を Java オブジェクトに変換し、pureQuery コードを自動生成してください。

  1. この例では、データベース・エクスプローラー (Database Explorer) のツリー・ビューから Employee テーブルのノードを選択し、そのノード上でマウスの右ボタンをクリックします (図 5 を参照)。
    図 5. Employee テーブルから Java オブジェクトへの変換: pureQuery コードの自動生成
    Employee テーブルから Java オブジェクトへの変換: pureQuery コードの自動生成

    このファイルを拡大するためには、ここをクリックします。

    ポップアップ・メニューから Generate the pureQuery code オプションを選択します。すると、Generate pureQuery Code ウィザードが起動します (図 6 を参照)。

    図 6. pureQuery Code Generation ウィザード
    pureQuery Code Generation ウィザード
  2. Java Bean の一般オプションを指定します。

    図 6 に示した Generate pureQuery Code for a Table ウィザードの最初のページは、Employee テーブルを表現する Bean クラスの記述を目的とした属性で構成されます。これらの属性はデフォルト値のままで構いません。属性の意味をいくつか以下で説明します。

    • Source folder: 生成されるすべての java ファイルを配置する場所を指定します。このフィールドは、デフォルト値の Personnel/Src のままで構いません。
    • Name: 生成される Java Bean の名前です。この Bean の名前のデフォルトは、データベース・エクスプローラー (Database Explorer) の中で pureQuery コードを生成する対象として選択したデータベース・テーブル成果物 (この例では Employee テーブル) と同じ名前に設定されます。この名前を変更すると、最終的に生成されたファイルに、Bean と対応するデータベース・テーブル成果物とのマッピングを示す注釈が含まれることになります。

      この例では、名前を MyEmployee に変更します。この変更によって、以下の注釈が生成されます。

      @Table(name="EMPLOYEE", schema="DB2ADMIN")
    • Generate annotated-method interface for table: このオプションを選択すると、データベースの作成/更新/削除/挿入メソッドが含まれるインターフェース・ファイルが生成されます。基本的に、これらのメソッドが、セクション 1.0 で説明したデータベース行のオブジェクト化を容易にします。プロジェクトをビルドすると、必要なすべての SQL 文を備えたこのインターフェースのデフォルト実装も生成されます。デフォルト・インターフェースの名前はオプションで変更することができます。
    • Generate test class for annotated-method interface for table: このオプションを選択すると、Bean インターフェースのユニット・テストに使用できる特殊なクラスが生成されます。テスト・クラス名はオプションで変更することができます。
    • Generate test class for Inline-method style: このオプションを選択すると、明示的なインライン SQL 文を含むファイルが生成されます (このオプションを選択しない場合は、デフォルトでインターフェース実装のメソッドとして生成されます) 。単純化された API は、SQL を使って異種のデータ・ソースにクエリーを実行する一貫した方法となります。アプリケーションは、プログラミングやユーザー・エクスペリエンスを一切変更せずにデータベース SQL を静的に実行するように構成することが可能です。テスト・クラス名はオプションで変更することができます。
    • 上記のいずれの場合も、Generate JUnit test cases チェック・ボックスを選択すると、オプションでシステムに一連の JUnit テスト・インスタンスを自動生成させることができます。
    • Include Connection information and user name: このオプションを選択すると、生成されるすべてのテスト・ケースに接続ストリングとユーザー名が含まれることになります。
  3. 生成される Bean 変数の定義方法を指定します。

    ウィザードの 2 番目のページ (図 7 を参照) では、public フィールドを生成してアクセサ・メソッドを作成しないか、protected フィールドを生成してアクセサ・メソッドを公開するかをオプションで指定することができます。

    図 7. Generate pureQuery Code ウィザードでの Bean フィールドの定義
    Generate pureQuery Code ウィザードでの Bean フィールドの定義

    さらにオプションで、Bean 変数の名前を変更することもできます (デフォルトでは、Employee テーブルの列と同じ名前に設定されます)。ただし注意する点として、変数名がその対応するマッピング列名と異なる場合には必ずその変数名に対して特殊な注釈が生成されます。この注釈は以下のような形式です。

    この注釈はその変数の宣言の前に置かれます。例えばこの例で言うと、Bean フィールド名を firstnme から firstnme_new に変更すると、以下のように、注釈が生成され、この注釈は java ファイルで firstnme_new が宣言されている箇所の前に追加されることになります。

    @Column(name="FIRSTNME") protected string firstnme_new

    テーブルの列名と異なるその他の変数名についても同様です (図 9 を参照)。

    この例では、Protected fields with public accessor and mutator methods にチェック・マークが付いていることを確認してください。オプションで、変数の型名をマッピング列のデータ型とは違う名前に変更することもできます。

  4. 生成する SQL 文のさまざまなフレーバーを指定します。

    ウィザードの最後のページ (図 8 を参照) では、生成される SQL 文のさまざまなフレーバーをオプションで指定することができます。この例では、Generate all SQL statements を選択してください。

    図 8. 生成される SQL 文の各種フレーバー
    生成される SQL 文の各種フレーバー
  5. Finish をクリックして pureQuery コードを生成します。

Finish ボタンをクリックした時点で、ウィザードは「pureQuery のオブジェクト化プロセス」で説明した DDO プロセスを完成させる 5 つのメイン・ファイルに加え、ユーティリティー・パッケージを生成します。以下に、生成される成果物の内容について説明します。

  • オブジェクト階層を構成するファイル
    1. MyEmployee.java (図 9 を参照): これがメインの Bean クラスです。このクラスには、Employee テーブルの各列に 1 対 1 でマッピングされた変数および対応するアクセサ・メソッドが含まれます。
      図 9. Employee テーブルを表す Java Bean クラス
      Employee テーブルを表す Java Bean クラス

      このファイルを拡大するためには、ここをクリックします。

    2. MyEmployeeData.java (図 10 を参照): データの照会および操作用にデータベース・アクセス層を抽象化するインターフェース・ファイルです。このインターフェースには、基礎となるテーブルで CRUD 操作を実行することを実装の唯一の目的とした抽象化メソッドが含まれます。
      図 10. CRUD 操作のインターフェースが含まれる MyEmployeeData.java
      CRUD 操作のインターフェースが含まれる MyEmployeeData.java

      このファイルを拡大するためには、ここをクリックします。

    3. MyEmployeeDataImpl.java (図 11 を参照): 前述した MyEmployeeData インターフェースのデフォルト実装です。この実装には、データのアクセスと操作に必要なすべての SQL 文をカプセル化するメソッドが含まれます。

      注: このファイルが生成されるのは、プロジェクトがビルドされる場合のみです。プロジェクトをビルドするには、Eclipse IDE のメイン・メニューで Project の Build Automatically オプションを設定するか、または開発者がプロジェクトを手動でビルドする必要があります。

      図 11. インターフェース・メソッドを備えたクラスの実装
      インターフェース・メソッドを備えたクラスの実装

      このファイルを拡大するためには、ここをクリックします。

    4. MyEmployeeDataTest.java (図 12 を参照): pureQuery システムが生成するデフォルト・クラスで、オプションでユニット・テストに使用することができます。このファイルに含まれる静的 main 関数は基本的に、実装クラス (つまり、MyEmployeeDataTest.java) のすべてのメソッドを実行します。
      図 12. ユニット・テストでの使用を目的として生成されるクラス
      ユニット・テストでの使用を目的として生成されるクラス

      このファイルを拡大するためには、ここをクリックします。

    5. MyEmployeeInLineSample.java (図 13 を参照): このファイルは、Generate Sample Class With Inline method call syntax オプションにチェック・マークが付けられている場合にのみ生成されます。このファイルは基本的に、pureQuery のランタイム API を介したインライン形式のメソッド呼び出しにより、生成されたすべての SQL 文を実行します。
      図 13. インラインで生成された SQL 文をエクササイズするために自動的に生成されたテスト・クラス
      インラインで生成された SQL 文をエクササイズするために自動的に生成されたテスト・クラス

      このファイルを拡大するためには、ここをクリックします。

  • ユーティリティー・パッケージ

    前のセクションで生成されるファイルの他、pureQuery システムは SampleUtil.java というファイルで構成されるユーティリティー・パッケージも生成します (図 14 を参照)。このファイルに含まれる多数の一般的な静的ユーティリティー関数 (接続の取得、出力など) を使用して、例えば生成されたテスト・クラス (つまり、MyEmployeeDataTest.java) が結果を出力し、基礎となるデータベース接続を作成します。

    図 14. 多数の一般的な静的ユーティリティー関数が含まれる自動生成サンプル・クラス
    多数の一般的な静的ユーティリティー関数が含まれる自動生成サンプル・クラス

    このファイルを拡大するためには、ここをクリックします。


クエリー駆動型オブジェクト化 (QDO) の場合のシナリオ

1 つ以上の SQL 文がある場合、pureQuery ではリレーショナル・データ・アクセス層のオブジェクト階層を自動的に作成する直観的な手段を提供します。以下のステップ・バイ・ステップの手順で説明するのは、SQL 文しかない場合にオブジェクト・モデルを作成する際の pureQuery の機能です。

  1. DDO の場合のシナリオのセクションで作成した Eclipse Java Personnel プロジェクトを開きます。
  2. このプロジェクトに新しい Java ファイル・クラスを追加し、main メソッドに以下の SQL 文を組み込みます。
    SELECT BIRTHDATE, BONUS, COMM, EDLEVEL, EMPNO, FIRSTNME, HIREDATE, JOB, LASTNAME, 
    MIDINIT, PHONENO, SALARY, SEX, WORKDEPT from EMPLOYEE
  3. SQL 文内の任意の場所でマウスの右ボタンをクリックし、ポップアップ・コンテキスト・メニューから pureQuery Assist -> Generate SQL Bean オプションを選択します。この操作によって、Create Bean for a SQL Result Set ウィザードが起動します。
    図 15. SQL 文からの Bean の作成
    SQL 文からの Bean の作成

    このファイルを拡大するためには、ここをクリックします。

  4. 最初のページでは、生成される Bean クラスの名前を指定します。この例では「MySQLEmployee」と入力して Next ボタンをクリックしてください。
    図 16. SQL 文から生成する Bean クラス名の指定
    SQL 文から生成する Bean クラス名の指定

    ウィザードの 2 番目のページでは、Bean フィールドの定義方法を指定することができます。この例では、デフォルト値をそのまま使用して構いません。オプションで、変数の型名をマッピング列のデータ型とは違う名前に変更することもできます (図 17 を参照)。

    図 17. Bean フィールドの指定
    Bean フィールドの指定
  5. Finish ボタンをクリックします。これで、MySQLEmployee.Java という名前の Bean ファイルが生成されます。

インターフェースとデフォルト実装ファイルを作成するには、次のセクションで説明する pureQuery の ORM プロセスに従ってください。


オブジェクト・リレーショナル・マッピング (ORM) の場合のシナリオ

Java Bean クラスがある場合には、pureQuery が提供する直観的なメカニズムで、そのクラスのメンバーを基礎となるデータベース・テーブルに含まれる任意のリレーショナル・エントリーにマッピングすることができます。

設計時のマッピングは、テーブルのスキーマと通常のルールに従って行わなければならないことに注意してください。例えば、設計時に、データ型が double の変数をテーブルの XML 型の列にマッピングすることができるとしても、実行時にどうなるかは予測不可能なためエラーという結果になってしまいます。以下の手順を例に、このマッピング方法を説明します。

  1. DDO のシナリオで作成した Eclipse Java Personnel プロジェクトを開きます。
  2. ORM の機能を明らかにするには、既存の Bean を使用することも、データベース内のテーブルを代表する Java のユーザー定義クラスを使用することもできます。この例では既存の Bean を使用するので、MyEmployee.Java を除くすべての生成済み Java ファイルを削除します。
    図 18. Bean とリレーショナル・テーブルのマッピング
    Bean とリレーショナル・テーブルのマッピング

    このファイルを拡大するためには、ここをクリックします。

  3. エディターで MyEmployee.Java クラスを開き、クラス名の先頭に以下の注釈を追加します。
    @Table (name = "EMPLOYEE", Schema = "DB2ADMIN")
  4. この注釈が、クラス名と基礎となるデータベース内のテーブルの間の実際のマッピングを行います。

    マッピング対象とするすべてのフィールド/変数の前に以下の注釈を追加します。この例では、BIRTHDAY フィールドと FIRSTNME フィールドのみをマッピングするため、次のようになります。

    @Column (name = "BIRTHDAY")

    上記の注釈は BIRTHDAY 変数名の前に追加します。

    @Column (name = "FIRSTNME")

    上記の注釈は FIRSTNME 変数名の先頭に追加します (図 19 を参照)。

    図 19. ホスト変数とテーブルの列とをマッピングする注釈
    ホスト変数とテーブルの列とをマッピングする注釈

    このファイルを拡大するためには、ここをクリックします。

  5. エディターの MyEmployee クラス内の任意の場所でマウスの右ボタンをクリックし、ポップアップ・コンテキスト・メニューから pureQuery Assist -> Generate pureQuery CODE オプションを選択します。すると、前述したように Generate pureQuery Code for a Table ウィザードが起動し、このウィザードによって最終的に pureQuery 関連のコード (インターフェース・ファイル、テスト・クラス、実装コードなどを含む) が生成されます。

Java Bean クラスはすでに存在しているため、ウィザードの Bean Field ページは省略されてユーザーには表示されないことに注意してください。


pureQuery のコンテンツ・アシストと Java エディターとの強固な統合

pureQuery の最も強力な機能の 1 つは、単一エディターでの SQL と Java とのシームレスな統合です。この強固な統合が、SQL 文のセマンティックな検証に加え、コード・アシスト、構文検証、カラー化などの Java と SQL の両方に対応する一貫した設計時の機能を実現します。

コード・アシストが提供する機能は以下のとおりです。

  • SQL 文の補完機能により、SELECT などの SQL のキーワードを入力したときや、オペレーターが期待する場所で、該当する文を完成するための候補を示すコンテキスト・ウィンドウが表示されます。
    図 20. 文の補完
    文の補完

    このファイルを拡大するためには、ここをクリックします。

  • コンテンツ・アシストは、特定のリレーショナル成果物 (テーブル、スキーマなど) に関連するエンティティー名の候補リストを表示します。または文の中でパラメーターを指定しなければならない場合には Java ホスト変数のリストを表示します (図 21 および図 22 を参照)。
    図 21. コンテンツ・アシスト
    コンテンツ・アシスト

    このファイルを拡大するためには、ここをクリックします。

    図 22. ホスト変数 コンテンツ・アシスト
    ホスト変数 コンテンツ・アシスト

    このファイルを拡大するためには、ここをクリックします。

  • Quick Fix が提供するインライン動的構文検証メカニズムでは、ミススペルなどのエラーが検出されて即時に修正されます。
    図 23. Quick Fix: Selct と誤って入力されたキーワード Select
    Quick Fix: Selct と誤って入力されたキーワード Select

    このファイルを拡大するためには、ここをクリックします。

  • データベース定義のオートディスカバリー (図 24 および図 25 を参照) では、Bean メンバー名をポイント・アンド・クリックで選択すると同時に、データベース・エクスプローラー (Database Explorer) にデータベース定義が表示されます (例えば、テーブル名にマッピングされたクラス名の場合にはデータベース・エクスプローラーにテーブル・ノードが表示され、列名にマッピングされた変数名の場合にはデータベース・エクスプローラーに列ノードが表示されるといった具合です)。
    図 24. ポイント・アンド・クリックによる Bean クラスのメンバー名の選択
    ポイント・アンド・クリックによる Bean クラスのメンバー名の選択

    このファイルを拡大するためには、ここをクリックします。

    図 25. ポイント・アンド・クリックによるデータベース・エクスプローラーへのジャンプ
    ポイント・アンド・クリックによるデータベース・エクスプローラーへのジャンプ

    このファイルを拡大するためには、ここをクリックします。


設計とランタイムのハンドシェーク

pureQuery の最も有力な設計時の機能として挙げられるのは、エディター内から任意の SQL 文を動的に実行できることです。この独特な機能は、設計時に SQL 文をロールバック機能付きで動的に実行できるようにします。

Java エディターでこの機能を確認するには、生成されたいずれかの SQL 文でマウスの右ボタンをポイント・アンド・クリックし、コンテキスト・メニューから pureQuery Assist -> Run SQL (図 26 を参照) を選択します。この操作によって SQL 文が実行され、Ecipse IDE のデータ (Data) ビューに結果セットが表示されます (図 27 を参照)。

図 26. ポイント・アンド・クリックによる設計時の SQL 実行
ポイント・アンド・クリックによる設計時の SQL 実行

このファイルを拡大するためには、ここをクリックします。

図 27. データ (Data) ビューに表示された設計時の SQL 実行結果
データ (Data) ビューに表示された設計時の SQL 実行結果

このファイルを拡大するためには、ここをクリックします。

データとその効率的なアクセシビリティーがデータベース主体のビジネス・アプリケーションから純粋な Web によるサービスへの進化を支える駆動力となっているこの時代、またアプリケーションの開発と保守の迅速化を求めて生産性の向上が注目されている中、オブジェクト指向のインフラストラクチャー・フレームワークの必要性は未だかつてなく増しています。IBM の pureQuery は、リレーショナル・アクセスをシームレスで直観的にオブジェクト化するプロセスを通じて、最先端のプラグ可能ソリューションを提供し、Eclipse IDE 環境における開発者の生産性とパフォーマンスを最適化します。

参考文献

学ぶために

製品や技術を入手するために

  • DB2 Enterprise 9 の無料の試用版をダウンロードしてください。
  • DB2 を無料で使用するには、コミュニティー向け DB2 Express Edition の無料バージョン、DB2 Express-C をダウンロードしてください。DB2 Express Edtion と同じコア・データ機能を備えた DB2 Express-C は、アプリケーションをビルドしてデプロイメントするための安定した基盤になります。
  • IBM Viper Developer V9.5 Open Beta をダウンロードして、pureQuery プラグイン、そしてこの記事に必要なバージョンの DB2 Developer Workbench を入手してください。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Information Management, Java technology
ArticleID=262429
ArticleTitle=pureQuery について学ぶ: 第 1 回 Java データベース・アプリケーション作成のための IBM の新しいパラダイム
publish-date=12142007