この章では、OC4Jで使用可能な2種類の永続性マネージャについて説明し、永続性マネージャ(Orion)から別の永続性マネージャ(TopLink)に移行する際の詳細な手順も説明します。
この章の内容は次のとおりです。
OC4J EJBコンテナはEJB 2.0を完全にサポートしており、そのサポート対象には次のようなものがあります。
セッションBean
エンティティBean
メッセージドリブンBean
BMP
CMP
オブジェクト・リレーショナル・マッピング
OC4Jには、オブジェクト・リレーショナル・マッピングをサポートするエンティティBeanに対するCMP実装が用意されています。OC4Jは1対1、1対多、多対1および多対多のオブジェクト・リレーショナル・マッピング(「コンテナ管理の関連」を参照)をサポートします。これには単一、プリミティブおよびシリアライズ可能オブジェクトに対する単一的なオブジェクト・リレーショナル・マッピングのみでなく、複合オブジェクト、エンティティ参照および集合に対する複合的なオブジェクト・リレーショナル・マッピングのサポートも含まれます。
Orion永続性マネージャ(「Orion永続性マネージャ」を参照)を使用して、EJB 2.0エンティティBeanが永続するようにOC4Jを使用できます。
注意: Orion永続性マネージャ(「Orion永続性マネージャ」を参照)とTopLink永続性マネージャ(「TopLink永続性マネージャ」を参照)の主な違いは、Orion永続性マネージャがEJB 2.0エンティティBeanのサポートに限られているのに対し、TopLink永続性マネージャがEJB 2.1エンティティBeanおよびEJB 3.0エンティティをサポートすることです。 |
EJBコンテナは永続性マネージャを使用し、エンティティBeanからデータベースに対してデータを持続します。永続性マネージャの機能の一覧を次に示します。
コンテナ管理の永続性を持つエンティティBeanを持続するプロセスを、実行時に自動的に処理します。
Beanと永続性マネージャの間の約定(抽象スキーマ)に基づいて、エンティティBeanをデータベースにマップします。
EJB QLを使用し、finderメソッドおよびselectメソッドを実装して実行します。
この項の内容は次のとおりです。
Orion永続性マネージャとTopLink永続性マネージャ(「TopLink永続性マネージャ」を参照)の主な違いは、Orion永続性マネージャがEJB 2.0エンティティBeanのみをサポートするのに対し、TopLink永続性マネージャはEJB 2.1エンティティBeanのみでなくEJB 3.0エンティティもサポートすることです。
Orion永続性マネージャは廃止予定であり、今後のリリースではサポートされません。オラクル社では、新規の開発にはOC4JおよびTopLink永続性マネージャを使用することをお薦めします。移行ツールを使用すると(「TopLink永続性マネージャへの移行」を参照)、Orion永続性マネージャとともにEJB 2.0エンティティBeanを使用する既存のOC4Jアプリケーションを、TopLink永続性マネージャ(「TopLink永続性マネージャ」を参照)とともにEJB 2.0エンティティBeanを使用するように簡単に移行できます。
Oracle TopLinkは高度なオブジェクト永続およびオブジェクト変換のためのフレームワークです。TopLinkには、開発および保守の工数を削減するだけでなく、エンタープライズ・アプリケーション機能を強化する開発ツールとランタイム機能が備わっています。
TopLinkを利用して、リレーショナル・データベースに永続オブジェクト指向データを格納する高パフォーマンスなアプリケーションを構築できます。これはオブジェクト指向データをリレーショナル・データまたはXML要素のどちらかに正確に変換します。TopLinkを使用すると、効率的で柔軟で実績のあるソリューションを利用することで、中心的な領域の問題に焦点を置きつつ、アプリケーションで永続性とオブジェクト変換を統合できます。TopLinkが提供する拡張的な開発ツール・セット(Oracle TopLink Workbenchなど)を使用して、柔軟で効率的なメタデータ形式で、オブジェクトからデータへのソース、およびオブジェクトからデータへの表示マッピングを迅速に獲得および定義することができます。TopLinkランタイムを利用することで、アプリケーションでは、データ・アクセス、問合せ、トランザクションおよびキャッシングに対する詳細なサポートを提供するシンプルなセッション・ファサードとともに、このマッピング・メタデータを活用できます。
TopLinkの主な特徴を次に示します。
非侵入的で柔軟なメタデータベース・アーキテクチャ
包括的なビジュアルTopLink Workbench
高度なマッピング・サポートと柔軟性(リレーショナル、オブジェクト・リレーショナル、EISおよびXML)
オブジェクト・キャッシング・サポート
問合せの柔軟性
ジャストインタイムの読取り
キャッシング
オブジェクトレベルのトランザクション・サポートおよび統合
ロック
複数のパフォーマンス・チューニング・オプション
アーキテクチャの柔軟性
TopLinkの詳細は、Oracle Technology NetworkのTopLinkページ(http://www.oracle.com/technology/products/ias/toplink/index.html
)を参照してください。
注意: 現在、TopLink永続性マネージャはOC4Jのデフォルトの永続性マネージャです。これはEJB 2.1およびEJB 3.0の永続性APIをサポートしています。 |
TopLink永続性マネージャとともにOC4Jを使用する利点を次に示します。
データベース表への同時アクセスが可能で、データベース・リソース競合も回避されます(「データベース・リソース競合の回避」を参照)。
TopLinkの問合せおよび式のフレームワークを使用して、EJB 3.0の問合せやEJB 2.1のfinderまたはselectメソッドに対する選択基準を表すことができます。
定義済でデフォルトのfinderおよびselectメソッドを利用できます。
TopLink永続性マネージャは、指定した問合せ構文(「問合せ構文の理解」を参照)を取得して、基底となるリレーショナル・データベースに対するネイティブSQLを生成します。
TopLink移行ツールを使用すると、Orion永続性マネージャとともにEJB 2.0エンティティBeanを使用する既存のOC4Jアプリケーションを、TopLink永続性マネージャとともにEJB 2.0エンティティBeanを使用するように簡単に移行できます。
TopLinkをデフォルトの永続性マネージャとして使用するようにOC4Jを構成できます。10gリリース3(10.1.3.1)では、OC4Jは出荷時にTopLinkをデフォルトの永続性マネージャとして使用するように構成されています。
注意: JARファイルのすべてのCMP EJBに対して使用できる永続性マネージャは1つのみです。 |
TopLinkには、TopLinkを永続性マネージャとして使用するように既存のJ2EEアプリケーションを移行するための自動化サポートが用意されています。10.1.3リリースでは、リリース2(9.0.4)以上のOC4Jインストールに対するこの移行を自動化するために使用できる、TopLink移行ツールが提供されます。OC4Jをこの新規リリースにアップグレードした場合、元のorion-ejb-jar.xml
ファイルから永続性構成をtoplink-ejb-jar.xml
ファイルに移行する必要があります。
TopLink移行ツールを使用した後、「移行後の変更」に説明のある追加的な変更が必要になる場合があります。
移行中に問題が発生した場合は、「移行に関するトラブルシューティング」を参照してください。
この項では、次のトピックでTopLink移行ツールの使用方法を説明します。
TopLink移行ツールを使用する前に、TopLink移行ツールがどのように機能するかを理解し、どのOC4J永続性マネージャ・メタデータが移行されるか、または移行されないのかを判断するために、この項を確認してください。
入力と出力
TopLink移行ツールは次のファイルを入力として取り入れます。
ejb-jar.xml
orion-ejb-jar.xml
ツールはOC4J固有の永続性構成をできるかぎり新しいtoplink-ejb-jar.xml
ファイルに移行して、ユーザーが指定したターゲット・ディレクトリに次の新規ファイルを作成します。
orion-ejb-jar.xml
toplink-ejb-jar.xml
TopLink Workbenchプロジェクト・ファイルのTLCmpProject.mwp
ejb-jar.xml
およびorion-ejb-jar.xml
ファイルはEARファイル、JARファイル、またはスタンドアロンのXMLファイル内にある場合があります。(EARファイルやJARファイルではなく)スタンドアロンのXMLファイルから移行する場合は必ず、ドメイン・クラスがアクセス可能で、クラスパス内に含まれるようにしてください。
TopLink移行ツールは元のファイルを読み取ったときの同じ書式で、ユーザーが指定したターゲット・ディレクトリに新規のorion-ejb-jar.xml
およびtoplink-ejb-jar.xml
ファイルを作成します。たとえば、EARファイルを入力として指定した場合、TopLink移行ツールは、新規のorion-ejb-jar.xml
およびtoplink-ejb-jar.xml
ファイルの両方を含むが他の点は元のファイルと同じ新規EARファイルをステージングして作成します。
TopLink Workbenchプロジェクト・ファイルは常に別のファイルとして作成されます。
注意: TopLink移行ツールを使用する前にorion-ejb-jar.xml ファイルのバックアップ・コピーを作成することをお薦めします。 |
移行
操作の際、TopLink移行ツールはすべてのエラーと診断出力を出力ディレクトリのoc4j_migration.log
というログ・ファイルに記録します。
TopLink移行ツールは入力ファイルのディスクリプタ、マッピング、および問合せ情報を次のように処理します。
各エンティティBeanに対するTopLinkディスクリプタ・オブジェクトを構築し、マップされた表、主キー、コンテナ管理の永続および関連フィールドなどのネイティブ永続メタデータを移行します。
エンティティBeanのあらゆるコンテナ管理の永続および関連フィールドに対するTopLinkマッピング・オブジェクトを構築し、外部キー参照などのネイティブ永続メタデータを移行します。
エンティティBeanの各ejbFind
またはejbSelect
に対するTopLink問合せオブジェクトを構築し、カスタマイズされた問合せ文などの永続メタデータを移行します。
表3-1にorion-ejb-jar.xml
ファイルのOC4J <entity-deployment>
の属性および下位要素の一覧と、それぞれについて移行ツールが次の処理を実行するかどうかを示します。
新規のorion-ejb-jar.xml
ファイルに保存
新規のtoplink-ejb-jar.xml
ファイルに移行
表3-1では、要素は山カッコで表示されています。詳細は表A-1「<entity-deployment>要素の属性」を参照してください。
表3-1 OC4J orion-ejb-jar.xmlの機能移行
orion-ejb-jar.xmlの機能 | 新規orion-ejb-jar.xmlに保存 | 新規toplink-ejb-jar.xmlに移行 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||
1より大きい任意の値 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
脚注 1 TopLinkは実行時にouter
およびinner
両方の結合をサポートします。これらのオプションでEJBディスクリプタを手動で構成できます。
脚注 2 persistence-type
属性の表の列サイズは、もし存在する場合は破棄されます。詳細は「persistence-typeの表の列サイズのリカバリ」を参照してください。
表3-2にOC4Jの機能と、TopLink移行ツールで構成されたTopLinkの対応する機能を一覧表示します。
表3-2 OC4JとTopLinkの機能比較
機能 | orion-ejb-jar.xml | toplink-ejb-jar.xml |
---|---|---|
CMPフィールド・マッピング |
直接 シリアライズ・オブジェクト |
フィールドに直接 シリアライズ・オブジェクト |
CMRフィールド・マッピング |
1対1 1対多 多対多 |
1対1 1対多 多対多 |
部分問合せ |
完全なSQL文 |
SQLコール |
ファインダ |
Oracle固有構文 |
SQLコールまたはEJB-QL |
遅延ロード(フェッチ・グループ) |
主キーの遅延ロードとCMPフィールド |
サポートされていません。 かわりにTopLink対応機能を適宜、手動で構成できます。 |
SQL文キャッシュ |
静的SQLのキャッシュ |
Beanレベルではサポートされていません。 TopLinkはセッションおよび問合せレベルにおけるパラメータ使用のSQLおよびSQL文のキャッシュをサポートします。 |
ロック |
optimistic: データベース・レベル pessimistic: Beanインスタンス・レベル |
optimistic: オブジェクト・レベル pessimistic: データベース・レベルの問合せロック |
読取り専用 |
変更を試行すると |
変更を試行すると |
有効性のタイムアウト |
読取り専用Beanのリロードされる前の有効性タイムアウト |
キャッシュ・タイムアウト |
分離レベル |
コミット済 シリアライズ可能 |
コミット済 シリアライズ可能 コミットされない 繰返し可能ではない |
コミットまでの更新遅延 |
サポート対象 |
サポート対象 |
Beanの排他的書込みアクセス |
デフォルト値は |
|
存在チェックなしの挿入 |
サポート対象 |
サポート対象 |
変更されたフィールドのみ更新 |
サポート対象 |
サポート対象 |
強制更新 |
永続フィールドが変更されていない場合でも、Beanライフ・サイクルの |
サポート対象 |
コマンドラインからTopLink移行ツールを使用するには、次の手順を実行します。
次のパスがクラスパス内にあることを確認します。
<
TOPLINK_HOME
>/jlib/antlr.jar
<
TOPLINK_HOME
>/jlib/ejb.jar
注意: 特定のインストールでは、ejb.jar ファイルが<ORACLE_HOME>/j2ee/home/lib/ ディレクトリにある場合もあります。 |
<
TOPLINK_HOME
>/jlib/toplink.jar
<
TOPLINK_HOME
>/jlib/cmpmigrator.jar
<
TOPLINK_HOME
>/jlib/toplinkmw.jar
<
TOPLINK_HOME
>/jlib/tlmwcore.jar
<
TOPLINK_HOME
>/config
<
ORACLE_HOME
>/lib/xmlparserv2.jar
(EARファイルやJARファイルではなく)プレーンXMLファイルから移行する場合は必ず、ドメイン・クラスがアクセス可能で、クラスパス内に含まれるようにしてください。
元のXMLファイルのバックアップ・コピーを作成します。
表3-3に一覧のある適切な引数を使用して、例3-1のようにTopLink移行ツールを実行します。
TopLink移行ツールの使用情報は次のとおりです。
java -Dtoplink.ejbjar.schemavalidation=<true|false> -Dtoplink.migrationtool.generateWorkbenchProject=<true|false> -Dhttp.proxyHost=<proxyHost> -Dhttp.proxyPort=<proxyPort> oracle.toplink.tools.migration.TopLinkCMPMigrator -s<nativePM> -i<inputDir> -a<ear>|<jar> -x -o<outputDir> -v
入力ファイルを特定するには、-a
または-x
のいずれかを指定します。
トラブルシューティング情報は、「移行に関するトラブルシューティング」を参照してください。
例3-1 コマンドラインからのTopLink移行ツールの使用
java -Dhttp.proxyHost=www-proxy.us.oracle.com -Dhttp.proxyPort=80 oracle.toplink.tools.migration.TopLinkCMPMigrator -sOc4j-native -iC:/mywork/in -aEmployee.ear -oC:/mywork/out -v
表3-3 TopLink移行ツール引数
引数 | 説明 |
---|---|
|
デフォルト値は |
|
TopLink Workbenchプロジェクトの生成の有効化に使用されるシステム・プロパティ。 デフォルト値は |
|
ローカルHTTPプロキシ・ホストのアドレス。 |
|
ローカルHTTPプロキシ・ホストがHTTPリクエストを受信するポート番号。 |
|
移行する対象のネイティブ永続性マネージャの名前。 OC4Jの場合は、 |
|
移行するOC4Jの 現在の作業ディレクトリがデフォルトです。 |
|
移行するOC4Jの |
|
移行元の入力ディレクトリのOC4JファイルがプレーンXMLファイル(アーカイブ・ファイル内ではない)であることを、TopLink移行ツールに伝えます。 このオプションを使用する場合は必ず、ドメイン・クラスがアクセス可能で、クラスパス内に含まれるようにしてください。 |
|
このディレクトリに設定されている権限で、TopLink移行ツールによるファイルおよびサブディレクトリの作成が許可されていることを確認してください。 |
|
詳細モード。エラーおよび診断情報をコンソールに記録するようにTopLink移行ツールに伝えます。 |
orion-ejb-jar.xml
ファイルの永続性構成をtoplink-ejb-jar.xml
ファイルに移行したら、次のような移行後の変更を検討してください。
persistence-typeの表の列サイズのリカバリ
orion-ejb-jar.xml
ファイルで、例3-2に示すタイプおよび列サイズの両方を提供するpersistence-type
属性を使用して、このcmp-field-mapping
マッピングを指定できます。
例3-2 列サイズを指定するpersistence-typeを使用したcmp-field-mapping
<cmp-field-mapping ejb-reference-home="MyOtherEntity" name="myField" persistence-name="myField" persistence-type="VARCHAR2(30)">
TopLink移行ツールは永続性タイプは移行しますが、列サイズは移行しません。これは、TopLinkプロジェクトに通常、このサイズ情報が含まれないためです。
persistence-type
列サイズをリカバリするには、次の手順を実行します。
「コマンドラインからのTopLink移行ツールの使用」の説明どおりに移行を実行します。
生成されたTopLink Workbenchプロジェクト・ファイルのTLCmpProject.mwp
を起動します。
データベースにログインします。
不明な主キー・クラスのマッピング順序表の更新
TopLinkは不明な主キー・クラスの使用をサポートしています。このため、TopLink移行ツールでもこの機能はサポートされています。
OC4Jはネイティブ・ランタイム・キー・ジェネレータを使用して、auto-id
キー・フィールドの一意キーを生成します。一方、TopLinkは順序表を使用します。
OC4Jの永続性構成に不明な主キー・クラスの使用が含まれる場合は、TopLink移行ツールによりこの目的のための順序表が作成されます。
移行後にアプリケーションをデプロイする前に、次の手順を実行します。
移行前に生成された最も大きいキー値を割り出します。
TopLink移行ツールが生成した順序表のカウンタを、移行前に生成された最も大きいキー値よりも大きい数字に手動で更新します。
プロジェクトの次のコンポーネントはカスタマイズが可能です。
永続性マネージャ・プロパティ: アプリケーションを移行した後、orion-ejb-jar.xml
ファイルの永続性マネージャ・プロパティをカスタマイズする場合があります。これらのプロパティは、TopLinkランタイムがCMPプロジェクト用に内部で使用するTopLinkセッションの構成に使用されます。
セッション・イベント・リスナー: デプロイ時にデフォルト設定をプロジェクトに適用した後、セッション・イベント・リスナーを構成してTopLinkセッションをカスタマイズする場合があります。セッションが呼び出すログイン前イベントは特に有用です。これによって、セッションが初期化され接続が確立する直前に、セッションに対するカスタム(非デフォルト)仕様を定義できます。
この項では、次のような移行時の問題に対するソリューションを説明します。
ログ・メッセージ
操作の際、TopLink移行ツールはすべてのエラーと診断出力を出力ディレクトリのoc4j_migration.log
というログ・ファイルに記録します。
これらの警告以外に、TopLink移行ツールは移行の完了を妨げる問題が発生した場合にエラーを記録します。表3-4にこれらの問題と可能なソリューションを一覧表示します。
表3-4 TopLink移行ツールのエラー・メッセージ
エラー・メッセージ | 説明 |
---|---|
入力ファイルに |
|
ネイティブ永続メタデータが定義された |
|
|
ターゲット・ディレクトリから |
予期しない関連多重度
TopLink移行ツールはOC4J ejb-jar.xml
ファイルからではなく、orion-ejb-jar.xml
ファイルから関連多重度を取得します。
このため、OC4J ejb-jar.xml
ファイルが関連を1対多に定義している場合でも、orion-ejb-jar.xml
ファイルが同じ関連を多対多に定義していると、TopLink移行ツールは関連を多対多として移行します。