Sun ONE ロゴ     前へ      目次      索引      次へ     
Sun ONE Application Server 7 Enterprise Java Beans 開発者ガイド



Sun ONE Studio 4 インタフェースによる CMP のマッピング

この章では、Sun ONE Studio 4 インタフェースを使って、Java プログラミング言語のクラスセットとリレーショナルデータベースをマップする方法を示します。

この章には次の項目があります。

ここに示す手順を行うには、「エンティティ Beans のコンテナ管理による持続性の使用」、および『Enterprise JavaBeans Specification, v2.0』の第 10 章の内容を十分に理解している必要があります。

CMP Beans のマッピング

コンテナ管理による持続性 Beans をマップするには、まず最初にスキーマを取り込み、次にそのスキーマに Beans をマップする必要があります。

この節には次の項があります。

スキーマの取り込み

Enterprise JavaBean をデータベーススキーマにマップする前に、スキーマを取り込んでファイルシステムに作業用コピーを作成する必要があります。これにより、データベース自体に影響を及ぼさずに、開発者は作業を行うことができます。



取り込んだスキーマをパッケージ内に保存することをお勧めします。スキーマを格納するパッケージがない場合は、ファイルシステム上で右クリックして「新規」 -> 「Java パッケージ」を選択します。



  1. マッピングツールを表示します。次の 3 つの方法があります。
    • ファイルシステム上で右クリックして、「新規」 > 「データベース」 > 「データベーススキーマ」を選択する
    • 「ファイル」メニューから「新規」を選択し、「テンプレートを選択」で「データベース」をダブルクリックして、「データベーススキーマ」を選択する
    • 「ツール」メニューから「データスキーマの収集」を選択する

  2. 「作成場所」ペインで、スキーマの作業用コピーのファイル名を入力し、次に、取り込んだスキーマのパッケージを選択します。
  3. 「データベース接続」ペインで、確立済みの接続がある場合は、「既存の接続」メニューからその接続を選択します。既存の接続がない場合は、「新規接続」で次の情報を入力します。
    • 接続するデータベースの名前。ドロップダウンメニューに目的のデータベースが表示されない場合は、マッピングツールを一旦終了して IDE にドライバをインストールしてから作業を続ける必要がある
    • システムの JDBC ドライバ
    • データベースの JDBC URL。これは、ドライバ識別子、サーバー、ポート、およびデータベース名で構成される。たとえば、jdbc:pointbase://localhost:9092/sample のようになる
    • JDBC URL の形式は、使用するデータベース管理システム (DBMS) の種類 (Oracle、Microsoft SQL Server、PointBase など)、およびその DBMS のバージョンによって異なる。使用する DBMS の正しい URL 形式については、システム管理者に確認する。

    • データベースのユーザー名
    • そのユーザーのパスワード

  4. 「表とビュー」ペインで、取り込む表とビューを選択して、「完了」をクリックします。


  5. 1 つの表を選択し、外部キーによって取り込まれた表に参照される別の表を除外する場合は、1 つだけ指定した場合でも、両方の表が取り込まれます。



    データベースとそのスキーマが、次の図に示すように表示されます。


    VbgAf[^x[XXL[}\B

既存の Enterprise JavaBeans とスキーマとのマッピング

ここでは、コンテナ管理による持続性を使ってマッピングをカスタマイズする、または既存のオブジェクトモデルのマッピングを作成する方法について説明します。

Enterprise JavaBean をデータベーススキーマにマップするには、そのデータベーススキーマを取り込んでエクスプローラのファイルシステムにマウントする必要があります。この手順については、「スキーマの取り込み」を参照してください。

「プロパティ」ウィンドウで個々のプロパティを編集することによって、マッピングを部分的に設定または編集することができます。「プロパティ」ウィンドウから、マッピングおよび持続性に関するすべての情報にアクセスできます。マッピングフィールドのプロパティエディタを利用すると、クラスやフィールドのグループを一度に表示および編集できます。さらに、作成したマッピングモデルの有用な概要を表示することもできます。

  1. 「ファイルシステム」の下にある「EJB モジュール」を開きます。
  2. そのモジュールに含まれる Enterprise JavaBeans が表示されます。

  3. 開いている EJB モジュールから Enterprise JavaBean を選択します。
  4. その Enterprise JavaBean のプロパティ表が表示されます。

  5. 準備作業が完了している場合は、「次へ」をクリックして、マッピングツールの「表を選択」ペインを表示します。
  6. 準備作業がまだ完了していない場合は「取消し」をクリックし、その作業を完了してから、マッピングツールを再起動します。

  7. 「主表」コンボボックスから主表を選択し、「ブラウズ」をクリックして「主表を選択」ダイアログを開きます。

  1. 「主表を選択」ダイアログを開いたら、スキーマを探して展開し、そのスキーマの表を探します。
  2. 表を選択して「了解」をクリックします。
  3. 主表として選択する表は、マップするクラスにもっとも緊密に一致する表である必要があります。


VbgAXL[}e[uWJB

  1. 主表を設定したあとは、「追加」をクリックすることによって、1 つまたは複数の二次表をマップできます。
  2. この場合は、「マップされた二次表の設定」ダイアログボックスが開きます。

    二次表を追加すると、Enterprise JavaBean 内のフィールドを主表以外のカラムにマップできます。たとえば、Employee クラスに department name を含めるために、DEPARTMENT 表を二次表として追加することができます。関係では、関係フィールドによって 1 つのクラスを別のクラスに関係付けます。二次表のマッピングでは、同じクラス内のフィールドを、2 つの異なる表にマップします。二次表を追加すると、フィールドを主表以外のカラムに直接マップできます。このペインでは、二次表を選択するほかに、二次表が主表にどのようにリンクされているかを表示することができます。

    二次表は、1 つ以上のカラムによって主表に関係付けられている必要があり、関係付けられたカラムの行は両方の表で同じ値を保有します。通常、これは両表間の外部キーとして定義されます。ドロップダウンメニューから二次表を選択するときに、2 つの表間の外部キーがあるかどうかがマッピングツールによって確認されます。外部キーが存在する場合は、それがデフォルトの参照キーとして表示されます。

    1. コンボボックスから二次表を選択します。
    2. 二次表を選択すると、コンテナ管理による持続性の実装によって、主表と二次表の間に外部キーが存在するかどうかが確認されます。存在する場合は、その外部キーがデフォルトの参照キーとして表示されます。外部キーが存在しない場合は、「列を選択」が表示され、参照キーを設定する必要があります。

    3. 参照キーを設定するには、「列を選択」をクリックして、ドロップダウンメニューからカラムを選択します。
    4. 主カラムを選択すると、二次カラムの選択肢が、互換性のあるタイプのカラムに限定されます。互換性のあるカラムが存在しない場合は、フィールドに「互換カラムがありません」と表示されます。二次カラムと互換性のない主カラムを選択すると、二次カラムの値が「列を選択」に戻ります。



      論理的に関連するとみなされるカラムのペアがなく、論理的な参照キーを設定できない場合は、二次表の選択を再考することをお勧めします。



      「ペアを追加」キーを選択すると、2 組以上のカラムペアを使って複雑なキーを設定することができます。

  3. 「了解」をクリックして、選択した内容を保存します。
  4. マッピングツールで「次へ」をクリックして、「Sun ONE AS マッピング」パネルを表示します。
  5. 「Sun ONE AS マッピング」パネルには、Enterprise JavaBean のすべての持続性フィールドと、そのマッピング状態が表示されます。フィールドをカラムにマップするには、そのフィールドのドロップダウンメニューでカラムを選択します。また、マップされていないすべてのフィールドをマップするには、「自動マップ」を選択します。「自動マップ」では、関係フィールドおよびすでにマップされているフィールドは無視して、もっとも論理的な選択が行われます。既存のマッピングはそのまま変更されません。

    設定可能でない別の表のカラムにフィールドをマップしたい場合は、「戻る」をクリックしてマッピングツールの前のページに戻り、目的のカラムが含まれている二次表を追加します。

    1 つまたは複数のフィールドを選択して、マッピングを解除することができます。一度に複数のフィールドのマッピングを解除するには、Shift キーまたは Ctrl キーを押しながら、解除するフィールドを選択します。1 つのフィールドのマッピングを解除する場合は、そのフィールドのドロップダウンメニューで「アンマップ」を選択します。

    1. 1 つのフィールドを複数のカラムにマップするには、「Sun ONE AS マッピング」ペインで目的のフィールドの省略符号ボタン (「...」) をクリックして、フィールドを複数カラムにマップするダイアログボックスを表示します。
    2. このダイアログボックスで、マッピングカラムのリストにカラムを追加します。追加するカラムは、このクラスにマップした表のカラムです。カラムの順序を変更するには、「上へ移動」および「下へ移動」を使用します。

      マップしたいカラムが表示されない場合は、マッピングに二次表を追加するか、選択した主表を変更する必要があります。カラムが 1 つも表示されない場合は、主表をまだマップしていないか、カラムのない表をマップしています。

      1 つのフィールドを複数のカラムにマップすると、すべてのカラムが、表示された最初のカラムの値で更新されます。したがって、それらのカラムの 1 つの値がコンテナ管理による持続性アプリケーション以外で変更されると、その値が読み取られるのは、その変更が最初のカラムに対して行われた場合だけです。データベースに値を書き込むと、ほかのカラムに加えられた矛盾する変更があればすべて上書きされます。

      また、それらのカラムのいずれかに複数のフィールドをマップする場合は、マッピングを部分的に重複させることはできないことを確認する必要があります。次の 3 つのケースについて検討してみましょう。

      • フィールド A はカラム A と B にマップされ、フィールド B はカラム B にマップされている場合。このマッピングは一部分のみが重複しているので、この例ではコンパイル時に妥当性検証エラーが発生する
      • フィールド A がカラム A にマップされ、フィールド B がカラム B にマップされている場合。一意なので、このマッピングは許容される
      • フィールド A がカラム A と B にマップされ、フィールド B がカラム A と B にマップされている場合。マッピングが完全に重複しているので、このマッピングは許容される

    3. 「了解」をクリックして、マッピングを保存します。

関係フィールドのマッピング

データベースの表間に外部キーがある場合、通常は、Java クラス参照でそれらの関係を保持する必要があります。CMR フィールドのマッピングでは、クラス参照フィールドに対応する関係を指定できます。

  1. 関係フィールドをマップするには、「Sun ONE AS マッピング」パネルで、関係フィールドのドロップダウンメニューの隣にある省略符号ボタン (「...」) をクリックして、「関連マッピング」エディタを表示します。

マッピングツールの外部で「関連マッピング」エディタを使用するには、Explorer で関係フィールドをクリックして、そのマッピングプロパティを編集します。

    1. このペインで、「関連クラス」が設定されていることを確認する。関連するクラスが設定されていない場合は、これを設定する。選択したいクラスが持続性に対応していない場合は、エディタをキャンセルして終了し、そのクラスを持続性対応に変換してからエディタに戻る必要がある
    2. 「関連フィールド」が適切であること (存在する場合)、および関連するクラスの主表が設定されていることを確認する


    3. 論理的に関連するフィールドがある場合は、主表を選択する必要があります。これにより管理関係が作成されます。



    4. 表を直接リンクするか、結合表を使うかを選択する

  1. 関係が一対一または一対多の場合は、表を直接リンクする方法を選択します。「次へ」をクリックして、「関連マッピング」エディタの「キーにマップ」ペインを開きます。
  2. このペインには、次の内容が表示されます。

    • 既存のマッピングが 1 つあり、最初の設定ページで何も変更がなかった場合は、既存のマッピング
    • 既存のマッピングが存在しないか、またはすでに無効になっている場合は、デフォルトのマッピング
    • 既存の外部キーに基づいて、2 つの関連クラスでもっとも論理的なキーカラムペアが判別される。外部キーが存在しない場合は、ローカルカラムと外部カラムを選択してキーカラムペアを作成する必要がある。各ペアのカラムは同じ値を保有することが求められる

      複雑なキーを作成するには、「ペアを追加」ボタンを使って「キーカラムペア」を追加する。

      「完了」ボタンが使用不可の場合は、「キーと列のペア」を選択する必要がある。

  3. 関係が多対多の場合は、結合表によって表をリンクします。「次へ」をクリックして、「キーにマップ: ローカル列から結合表へ」ペインを開きます。
  4. このペインには、次の内容が表示されます。

    • 関係内の最初のクラスとフィールド
    • フィールド間の関係の作成に使用する結合表
    • フィールド結合表と、関連クラスをマップする表の間のキーカラムペア
    • このペインでは、結合表を選択し、関係フィールドをキーにマップする。これは、「このクラス」をマップする表と結合表の間の唯一の関係である。結合表がない場合は、前のパネルに戻って「マップされている表を直接リンク」を選択する

      クラスをマップする 2 つの表間の結合表を選択する。結合表と、「このクラス」をマップする表の間のもっとも論理的なキーカラムペアが判別される

      表間に外部キーがある場合は、その外部キーがデフォルトのキーカラムペアとして使用される。外部キーがない場合は、結合表から「このクラス」をマップする表に移動できるカラムペアを選択して、キーを作成する必要がある。各ペアのカラムは同じ値を保有することが求められる

      複合キーを作成するには、「ペアを追加」ボタンを使って「キーと列のペア」を追加する

      「次へ」ボタンが使用不可の場合は、結合表を選択するか、両方の側にカラムを持つキーカラムペアが 1 つ以上存在していることを確認する必要がある

  5. 「次へ」をクリックして、「キーにマップ: 結合表から外部列へ」ペインを開きます。
  6. このペインでは、前のペインで選択した結合表に 2 番目の表を関係付けます。

    結合表と、「関連クラス」をマップする表の間のもっとも論理的なキーカラムペアが判別されます。

    表間の外部キーがある場合は、その外部キーがデフォルトのキーカラムペアとして使用されます。外部キーがない場合は、結合表から「関連クラス」をマップする表に移動できるカラムペアを選択して、キーを作成する必要があります。各ペアのカラムは同じ値を保有することが求められます。

    複合キーを作成するには、「ペアを追加」ボタンを使ってキーカラムペアを追加します。

    「完了」ボタンが使用不可の場合は、有効なキーカラムペアを選択する必要があります。

  7. 「完了」をクリックして、マッピングツールの「Sun ONE AS マッピング」ペインに戻ります。
  8. 「完了」をクリックして「Sun ONE AS マッピング」ペインを閉じ、データベーススキーマに Java クラスをマップします。

EJB 持続性プロパティ

コンテナ管理による持続性を使用する Enterprise JavaBean には、マッピングツールの外部で指定できる固有のプロパティがいくつかあります。

それらの固有プロパティを次の表に示します。

   CMP Enterprise JavaBean のプロパティ 

プロパティ

説明

マップされた主表

 

持続性対応クラスに対して選択する主表は、そのクラスともっとも緊密に一致するスキーマの表にする必要がある。持続性対応クラスをマップするには、主表を指定する必要がある。この手順については「既存の Enterprise JavaBeans とスキーマとのマッピング」を参照

 

マップされたスキーマ

 

持続性対応クラスをマップする表が属するスキーマ。主表、二次表、および関連クラスはこのスキーマに属している必要がある。「スキーマの取り込み」で説明したように、スキーマを取り込むまでは、この設定を行うことができない

 

マップされた二次表

 

二次表を追加すると、主表以外のカラムをクラスフィールドにマップできる。たとえば、Employee クラスに department name を含めるために、DEPARTMENT 表を二次表として追加することができる。複数の二次表を追加できるが、二次表は必須ではない。このプロパティは、マップされた主表が設定されている場合のみ使用できる。二次表の追加については 97 ページおよび 221 ページを参照

 

整合性のレベル

 

Bean 内のデータに関するトランザクションの整合性を保証する際のコンテナの動作を指定する。整合性検査フラグ要素が存在しない場合は、none とみなされる。整合性レベルの詳細については、「consistency」を参照

 

フェッチグループ

 

fetched-with プロパティは、フィールドおよび関係のフェッチグループ設定を指定する。フィールドは、階層フェッチグループまたは独立フェッチグループに属することができる。fetched-with 要素が存在しない場合は、次の値が適用される。<fetched-with><none/></fetched-with>。詳細は、「fetched-with」を参照

 

クラスのマッピングを解除するには、「マップされた主表プロパティ」のドロップダウンメニューから <unmapped> を選択します。現在マップされているクラスのマッピングを解除するときに、フィールドマッピングまたは二次表が存在する場合は、警告が表示されます。そのクラスのマッピングを解除する場合は「了解」をクリックします。マッピング解除を中止する場合は、「取消し」をクリックしてマッピングステータスの変更を取り消すと、そのクラスがマップされたままになります。

持続性対応クラスのフィールドマッピングプロパティを表示するには、「プロパティ」ウィンドウの一番下にある「Sun ONE AS マッピング」タブをクリックします。


VbgANXtB[h}bsOvpeBB


前へ      目次      索引      次へ     
Copyright 2002 Sun Microsystems, Inc. All rights reserved.