Cosminexus アプリケーションサーバ V8 アプリケーション設定操作ガイド
CMP2.x Entity Beanのフィールドをデータベース上のテーブルにマッピングします。
また,ここでは,CMPを定義した二つのCMP2.x Entity Beanの間に関連(CMR)を定義する方法についても説明します。
CMP2.xとデータベースのマッピング手順を,次に示します。
CMPを定義した二つのCMP2.x Entity Beanの間にCMRの関係がある場合,CMP2.x Entity Bean間にCMRを定義します。
EJB-JAR属性ファイル
次に示すコマンドを実行してEJB-JAR属性ファイルを取得します。
cjgetappprop [<サーバ名称>] [-nameserver <プロバイダURL>] -name <J2EEアプリケーション名> -type ejb -resname <EJB-JAR表示名> -c <EJB-JAR属性ファイルパス> |
cjgetappprop MyServer -name adder -type ejb -resname adder -c C:\home\adder_ejb.xml
次に示すコマンドを実行して,EJB-JAR属性ファイルの値を反映します。
cjsetappprop [<サーバ名称>] [-nameserver <プロバイダURL>] -name <J2EEアプリケーション名> -type ejb -resname <EJB-JAR表示名> -c <EJB-JAR属性ファイルパス> |
cjsetappprop MyServer -name adder -type ejb -resname adder -c C:\home\adder_ejb.xml
二つのCMP2.x Entity Bean間の関係を定義する(<relationships> - <ejb-relation>)プロパティ設定項目を次に示します。
項目 | 必須 | 対応するタグ名 |
---|---|---|
説明 | △ | <description> |
関連定義名 | ○ | <ejb-relation-name> |
Enterprise Bean(EJB1)情報 | ○ | <ejb1> |
Enterprise Bean(EJB2)情報 | ○ | <ejb2> |
(凡例) ○:必須 △:任意
プロパティの設定項目については,マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(アプリケーション/リソース定義)」の「3.3.1 EJB-JAR属性ファイルの指定内容」を参照してください。
Enterprise Bean(EJB1)情報(<ejb1>)とEnterprise Bean(EJB2)情報(<ejb2>)について,それぞれ,設定側のEnterprise Beanと相手側のEnterprise Beanの関連についての項目を指定します。
項目 | 必須 | 対応するタグ名 |
---|---|---|
説明 | △ | <description> |
関連のロール名 | △ | <ejb-relationship-role-name> |
設定側の多重度 | ○ | <multiplicity> |
カスケードデリートの設定 | ○ | <cascade-delete> |
設定側の<ejb-name> | ○ | <ejb-name> |
CMRフィールドの名称 | ○ | <cmr-field-name> |
CMRフィールドの型 | △ | <cmr-field-type> |
(凡例) ○:必須 △:任意
プロパティの設定項目については,マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(アプリケーション/リソース定義)」の「3.3.1 EJB-JAR属性ファイルの指定内容」を参照してください。
CMP2.x Entity Beanのフィールドをデータベース上のテーブルにマッピングします。
編集する属性ファイルについては,「9.6.2 CMP1.xとデータベースのマッピング」の「(1) 編集する属性ファイル」を参照してください。
編集する属性ファイルの所得と属性の設定については,「9.6.2 CMP1.xとデータベースのマッピング」の「(2) 編集する属性ファイルの取得と属性の設定」を参照してください。
CMP2.x Entity Beanのフィールドをデータベース上の表にマッピングする(<cmp-map>)プロパティ設定項目を次に示します。
項目 | 必須 | 対応するタグ名 |
---|---|---|
リソースアダプタの表示名※1 | ○ | <datasource-name> |
データベースのカタログ名 | △ | <catalog-name> |
データベースのスキーマ名 | △ | <schema-name> |
データベースのテーブル名 | ○ | <table-name> |
データベースへの書き込み許可/禁止 | ○ | <read-only-access> |
トランザクション遮断レベル※2 | △ | <transaction-isolation> |
データベース書き込みデータ照合方法 | △ | <concurrency-protection> |
フィールドとテーブルのカラムとのマッピング情報※3 | ○ | <field-impl> |
(凡例) ○:必須 △:任意
項目 | 対応するタグ名 |
---|---|
EntityBeanのフィールド名 | <field-name> |
テーブルのカラム名 | <column-name> |
プロパティの設定項目については,マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(アプリケーション/リソース定義)」の「3.5.1 Entity Bean属性ファイルの指定内容」を参照してください。
finder/selectメソッドが実行されたときに使用されるSQL文を生成します。
次に示すコマンドを実行してSQL文を生成します。
cjgencmpsql [<サーバ名称>] -name J2EEアプリケーション名 |
cjgencmpsql MyServer -name App1
cjgencmpsql [<サーバ名称>] -name J2EEアプリケーション名 -resname <EJB-JARの表示名/Entity Beanの表示名> |
cjgencmpsql MyServer -name App1 -resname EjbJar1/Ejb1
cjgencmpsqlコマンドの詳細については,マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjgencmpsql(CMP2.x Entity Bean用SQL文の生成)」を参照してください。
ここでは,CMR用の表について説明します。
なお,以降の説明では,EJB-JARの<ejb1> - <ejb-name>で設定されているEntity Beanを「Bean1」,<ejb2> - <ejb-name>で設定されているEntity Beanを「Bean2」と呼びます。
EJBコンテナでは,CMP2.x Entity Beanの間にCMRの関係があった場合,データベース上に表を作り,CMRの状態の保持のために利用します。
次の図に示すようにCMR用の表には関係を結ぶ二つのEntity Beanのプライマリキーが格納されます。
図9-1 CMR用の表(1対1,双方向の関係の場合)
CMRを含むアプリケーションを開始すると,CMR用の表が生成されます。生成される場所はBean1の表があるスキーマです。この表はアプリケーションの停止時に削除されます。表の生成,削除,操作のためのSQLは,アプリケーションをカスタマイズするときのデータベースマッピングのあとで生成されたSQLを使用します。
アプリケーションが開始状態のままサーバを停止させた場合はCMR用の表はデータベース上に残ります。また,アプリケーションが開始状態のままサーバが再起動された場合は,CMR用の表がデータベース上にあるかどうかをチェックします。アプリケーションの開始時およびサーバ起動時のCMR用の表生成処理を次の表に示します。
表9-4 アプリケーションの開始時およびサーバ起動時のCMR用の表生成処理
状態 | 作成する表と同名の表がデータベース上にあるかどうか | 同名の表がある場合,列の数,名前,JDBC型が同じかどうか | 動作 | 出力メッセージID |
---|---|---|---|---|
開始時※1 | なし | 該当しない | 表を生成し,利用します。 | KDJE43007-I |
あり | 同じまたは同じでない | 開始を中断します。※2 | KDJE43003-E | |
J2EEサーバ起動時 | なし | 該当しない | 開始を中断します。※3 | KDJE43008-E |
あり | 同じ | 開始時にCMR用として作ったものであると判断し,利用します。 | KDJE43006-I | |
同じでない | 開始を中断します。※3 | KDJE43008-E |
CMR用の表の名前は次のようになります。
ただし,この方法で決めた名前が29文字以上になった場合は,28文字になるように切ります。28文字になるように切った名前がデータベース上の既存の表の名前や同じEJB-JAR内のほかのCMR用の表の名前と重なる場合は,0〜99の番号を末尾に付けて区別します。
CMRを含むアプリケーションが開始され,運用していた状態で保守などのためにJ2EEサーバを停止,起動したときに障害が発生すると,CMRを含むアプリケーションが開始された状態で立ち上がらないことが考えられます。障害を解決し,再度CMRを含むアプリケーションを開始しようとしても,表9-4に示されるように作成する表と同名の表がデータベース上にある場合,開始ができません(アプリケーション間で表の共有を避けるため)。
ここで,SQL生成を再度実行すると,新しいCMR用の表名を使用したSQLが生成され,新しいCMR用の表を使用するように開始ができます。しかし,J2EEサーバを停止する以前に使用していた関係を継続させたい場合,データベースに残っている表を使うように開始する必要があります。
usrconf.propertiesファイルのejbserver.ejb.cmp20.cmr.use.existing_tableキーは,アプリケーションの起動障害発生時,それまで使用していた関係の情報を回復させるためのオプションです。このキーにtrueを指定すると,データベース既存の表を使用するように開始できます。このキーに何も指定しない,またはfalseを指定した場合は,表9-4の動作をします。このオプションを使用して,既存の表を使用する場合の手順を次に示します。
All Rights Reserved. Copyright (C) 2008, 2011, Hitachi, Ltd.