この章では、TopLinkのネイティブなオブジェクト・リレーショナル・マッピング(ORM) APIを使用するアプリケーションを現在のEclipseLink APIを使用するアプリケーションに移行する方法を説明します。
TopLink 11gリリース1 (11.1.1)以降、EclipseLinkライブラリはOracle TopLinkのコア・ライブラリとなっています。
この章の内容は次のとおりです。
ユース・ケース
アプリケーションをアップグレードして、使用しているTopLinkにネイティブの以前のORMを、現在の実装であるEclipseLink ORMを使用するようにしたいと開発者は考えています。
解決方法
この章の手順に従って、アプリケーションをアップグレードします。
コンポーネント
TopLink 12c (12.1.2.0.0)以上。
|
注意: TopLinkのコア機能は、オープン・ソースのEclipse Foundationの永続性フレームワークであるEclipseLinkによって提供されています。EclipseLinkでは、Java Persistence API (JPA)、Java Architecture for XML Binding (JAXB)、および標準に基づいたその他の永続性テクノロジと、それらの標準の拡張が実装されます。TopLinkには、EclipseLinkのすべてに加え、Oracleの追加機能が含まれています。 |
(オプション) EclipseLink Workbench。
ネイティブTopLink ORMとは、Java Persistence API (JPA)がオブジェクト・リレーショナル・マッピングAPIを標準化する前に、TopLinkで展開された、API、構成ファイル、オブジェクト・リレーショナル・マッピング用のツールを指します。JPAは、TopLink EssentialsとしてOracle TopLink 10g (10.1.3.1.0)で完全にサポートされるようになりました。ただし、ネイティブTopLinkもサポートされ続けています。
TopLink 11g (11.1.1)リリースより前では、Oracleでは、Eclipse FoundationにTopLink JPAおよびネイティブTopLinkを含むTopLinkのソース・コードを提供し、これを基にして、オープンソースのEclipseLink永続性サービス・プロジェクトの基礎が形成されました。その後、TopLink 11gリリース1 (11.1.1)で、OracleはTopLinkにTopLinkのコア機能を提供するEclipseLinkを含めるようになりました。
TopLinkバージョン11.1.1.0.0から11.1.1.6.0を使用するTopLink開発者は、Oracle独自のtoplink.jarまたはEclipseLink eclipselink.jarのいずれかで、ネイティブTopLink ORMにアクセスできます。toplink.jarのクラスは、名前がoracle.toplink.*で開始するパッケージです。eclipselink.jarでは、これらのパッケージ名は、かわりにorg.eclipselink.persistenceで開始します。
|
注意:
|
toplink.jarのoracle.toplink.*パッケージを使用するアプリケーションを、eclipselink.jarのorg.eclipselink.persistence.パッケージを使用するよう移行できます。アプリケーションの機能は同じですが、eclipselink.jarに移行することにより、最新のコード・ベースが得られます。移行すると、他のTopLink機能を利用できるようになり、アプリケーションでJPAまたは現在のTopLinkのバージョンの他の永続性サービスを使用する準備を整えることができます。
この章では、スタンドアロンのTopLinkにパッケージされている名前変更ツールを使用して、アプリケーションのパッケージ名を簡単に変更し、現在のコード・ベースに移行するために必要なその他のアクションを実行する方法を説明します。
|
注意: この章の説明に従うと、アプリケーションが更新され、現在のEclipseLinkのコード・ベースを使用できるようになります。これを実行した場合、当初実装したアプリケーションの設計および機能が維持されます。ただし、これらの手順では、ネイティブTopLinkベース・アプリケーションでJPAまたは現在のTopLinkのバージョンのその他の任意の永続性サービスを使用するよう変換する方法は説明していません。この情報については、TopLinkのその他のドキュメントを参照してください。 |
この項の内容は次のとおりです。
TopLink 12c (12.1.2.0.0)以上。
11g以上のTopLinkのすべてのダウンロードには、この章で説明している名前変更ツールが含まれています。
|
注意: この名前変更ツールは、Oracle WebLogic ServerまたはOracle Glassfishに組み込まれているバージョンのTopLinkには含まれません。スタンドアロンのTopLinkインストーラをダウンロードする必要があります。 |
http://www.oracle.com/technetwork/middleware/toplink/downloads/index.htmlからTopLinkをダウンロードします。インストール手順については、第2章「Oracle TopLinkのインストール」を参照してください。
(オプション) EclipseLink Workbench。EclipseLink WorkbenchはEclipseLinkのダウンロードに含まれています。http://www.eclipse.org/eclipselink/downloads/のEclipseLinkのダウンロード・ページを参照してください。
TopLink 11gリリース1 (11.1.1)以前のリリースで非推奨であったAPIは、EclipseLinkでは削除されているので、現在のバージョンのTopLinkには含まれていません。アプリケーションでこれらの非推奨のAPIやすでにTopLinkで置換または削除されているAPIを使用している場合、アプリケーションで現在のAPIを使用するよう更新する必要があります。
次の項では、推奨される代替とともに、置換および削除されたAPIを示します。
次の表に、TopLink 11gリリース1 (11.1.1.1.)以上で削除されたAPIを示します。この表に示す代替のAPIを使用するようにしてください。
表7-1 changetracking (oracle.toplink.descriptors.*)
| クラス名 | メソッド名 | 代替のAPI |
|---|---|---|
|
|
|
|
|
|
|
|
表7-2 databaseaccess (oracle.toplink.internal*)
| クラス名 | メソッド名 | 代替のAPI |
|---|---|---|
|
|
完全なクラス名 |
|
表7-4 mappings (oracle.toplink.*)
| クラス名 | メソッド名 | 代替のAPI |
|---|---|---|
|
|
完全なクラス名 |
|
|
|
完全なクラス名 |
|
|
|
完全なクラス名 |
|
表7-5 objectrelational (oracle.toplink.*)
| クラス名 | メソッド名 | 代替のAPI |
|---|---|---|
|
|
完全なクラス名 |
|
表7-6 oraclespecific (oracle.toplink.*)
| クラス名 | メソッド名 | 代替のAPI |
|---|---|---|
|
|
完全なクラス名 |
|
|
|
完全なクラス名 |
|
|
|
完全なクラス名 |
|
|
|
完全なクラス名 |
|
|
|
完全なクラス名 |
|
|
.oraclespecific.TopLinkXMLType 注 2 |
完全なクラス名 |
なし |
注 1 oracle.toplink.oraclespecific.Oracle9Specificは内部のパッケージに移動され、oracle.toplink.internal.platform.database.oracle.Oracle9Specificに名前変更されています。oracle.toplink.oraclespecific.Oracle9Specificの代替のパブリックAPIは、oracle.toplink.platform.database.oracle.Oracle9Specificです。
注 2 oracle.toplink.oraclespecific.TopLinkXMLTypeはその他のもののクラスで代替APIがありません。
表7-7 publicinterface (oracle.toplink.*)
| クラス名 | メソッド名 | 代替のAPI |
|---|---|---|
|
|
完全なクラス名 |
|
|
|
完全なクラス名 |
|
|
|
完全なクラス名 |
|
|
|
完全なクラス名 |
|
|
|
完全なクラス名 |
|
|
|
完全なクラス名 |
|
|
|
完全なクラス名 |
|
|
|
完全なクラス名 |
|
|
|
完全なクラス名 |
|
|
|
完全なクラス名 |
|
注 1 oracle.toplink.publicinterface.DatabaseSessionは内部のパッケージに移動され、oracle.toplink.internal.sessions.DatabaseSessionImplに名前変更されています。oracle.toplink.publicinterface.DatabaseSessionの代替のパブリックAPIは、oracle.toplink.sessions.DatabaseSessionです。
注 2 oracle.toplink.publicinterface.Sessionは内部のパッケージに移動され、oracle.toplink.internal.sessions.AbstractSessionImplに名前変更されています。oracle.toplink.publicinterface.Sessionの代替のパブリックAPIは、oracle.toplink.sessions.Sessionです。
注 3 oracle.toplink.publicinterface.UnitOfWorkは内部のパッケージに移動され、oracle.toplink.internal.sessionl.UnitOfWorkImplに名前変更されています。oracle.toplink.publicinterface.UnitOfWorkの代替のパブリックAPIはoracle.toplink.sessions.UnitOfWorkです。
表7-9 entitymanager (oracle.toplink.sessions.*)
| クラス名 | メソッド名 | 代替のAPI |
|---|---|---|
|
すべてのクラス |
すべてのメソッド |
JPA: 7.2.2.4.1項「JPA永続性プロバイダの実装」を参照 |
表7-11 xml (oracle.toplink.*)
| クラス名 | メソッド名 | 代替のAPI |
|---|---|---|
|
|
完全なパッケージ名 |
|
|
|
完全なパッケージ名 |
|
|
|
完全なパッケージ名 |
. |
|
|
完全なパッケージ名 |
|
|
|
完全なパッケージ名 |
|
表7-12 XMLCommandConverter (oracle.toplink.*)
| クラス名 | メソッド名 | 代替のAPI |
|---|---|---|
|
|
完全なクラス名 |
なし |
|
|
完全なクラス名 |
なし |
|
|
完全なクラス名 |
なし |
|
|
error_loading_resources |
なし |
|
|
error_parsing_resources |
なし |
|
|
unexpect_argument |
なし |
表7-13 Remoteプロトコル(oracle.toplink.*)
| クラス名 | メソッド名 | 代替のAPI |
|---|---|---|
|
|
完全なパッケージ名 |
なし |
|
|
完全なパッケージ名 |
なし |
|
|
完全なパッケージ名 |
なし |
|
|
|
なし |
|
|
|
なし |
|
|
完全なクラス名 |
なし |
|
|
完全なクラス名 |
なし |
|
|
完全なクラス名 |
なし |
|
|
|
なし |
次の表にTopLink 11gリリース1 (11.1.1)リリースより前に非推奨となり、したがって現在のリリースではEclipseLinkライブラリに置き換えられたために削除されたAPIを示します。かわりに示した代替のAPIを使用してください。
|
注意: 非推奨となったクラスと移動したクラスの名前は同じなので、古いパッケージと新しいパッケージの両方から |
表7-15 mappings (oracle.toplink.*)
| クラス名 | メソッド名 | 代替のAPI |
|---|---|---|
|
|
|
|
表7-16 descriptors (oracle.toplink.*)
| クラス名 | メソッド名 | 代替のAPI |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
次のクラスは、TopLink 11gリリース1 (11.1.1)より前のリリースで削除されています。
OTSTransactionController
OTSSynchronizationListener
OracleSequenceDefinition(かわりにSequenceObjectDefinitionを使用)
TimeTenSequenceDefinition(かわりにSequenceObjectDefinitionを使用)
APIに対するその他の変更は次のとおりです。
TopLink 11g (11.1.1)以上のリリースでは、永続性プロバイダは、eclipselink.jarのパッケージに実装されています。たとえば次など、それまでのすべての実装で置き換わっています。
toplink.jar
toplink-essentials.jar
TopLink 11g (11.1.1) Technology Preview 3では、パフォーマンス向上のため、デフォルトではセッション・ファイナライザは無効になっていました。セッション・ファイナライザを有効にするには、SessionメソッドのsetIsFinalizersEnabled(true)を使用します。
VectorまたはHashtableを返すすべてのSessionまたはClassDescriptorメソッドは、それぞれListまたはMapを返すよう変更されます。この変更に備えるには、VectorおよびHashtableの戻り型をそれぞれListまたはMapにキャストします。たとえば、Javadocでは、ClassDescriptorメソッドのgetMappingsはjava.util.Vectorですが、戻り値はListにキャストされるようにする必要があります。
List mappings = (List) descriptor.getMappings();
現在、変更されMapを戻すようになっているものは次のとおりです。
ClassDescriptor.getQueryKeys()
ClassDescriptor.getProperties()
DescriptorQueryManager.getQueries()
EISInteraction.getProperties()
Session.getProperties()
Session.getQueries()
getAttributesToAlwaysInclude()
getSpecialOperations()
getValuesToExclude()s
TopLinkには、TopLink 11g,リリース1 (11.1.1)以上で、EclipseLinkのすべてのライブラリが含まれるようになりました。EclipseLinkは、TopLinkのコア機能を提供するもので、現在では、JPA 2.x、JAXBおよびその他の標準に基づく永続性サービスやそれらの標準の拡張をサポートしています。また、TopLinkではTopLinkのネイティブAPIもサポートされ続けています(ただし、oracle.toplink.*パッケージは現在すべてorg.eclipse.persistence.*に名前変更となっています)。
新しいコード・ベースを使用するようアプリケーションを移行するには、コードでパッケージ名を変更する必要があります。TopLinkのインストールには、これらをスムーズに行うパッケージの名前変更ツールが含まれています。これらのツールを、次のすべてに対して使用します。
プロジェクトのソース・コード
project.xmlファイル
persistence.xmlファイル
sessions.xmlファイル
パッケージの名前変更ツールは、toplink_install_directory\toplink\utils\renameディレクトリにあります。WindowsおよびUNIX/LINUX用のスクリプトが含まれています。
このスクリプトを使用し、パッケージの名前変更ツールを実行するには、次を実行します。
toplink_install_directory\toplink\utils\rename ディレクトリで packageRename.cmd (Windows)およびpackageRename.sh (UNIX/LINUX)スクリプトを探します。
次の引数を使用し、packageRename.cmdまたはpackageRename.shを実行します。
sourceLocation: 名前変更するファイルを含むディレクトリ。
targetLocation: 名前変更したファイルの宛先ディレクトリ。パッケージの名前変更ツールは、JavaおよびXMLファイルが存在する場合、それをすべてを削除してしまうので、空のディレクトリを指定することをお薦めします。
次に例を示します。
packageRename c:/mySourceLocation c:/myDestinationLocation
パッケージの名前変更ツールでは、名前変更するJavaおよびXMLファイルをディレクトリから再帰的に検索します。各ファイルの名前変更されたバージョンは、宛先の場所の対応するディレクトリに保存されます。
パッケージの名前変更ツールでは、TopLinkのXML構成ファイルを変換できますが、ファイルの種類によっては他にも変更を行う必要があります。
TopLink 10.1.3以上のデプロイメントXMLファイルは、TopLink 11.1.1以上で読取りが可能です。これらのファイルは使用し続けることができますが、上位との互換性をより向上させるには、これらのファイルに対し名前変更ツールを実行し、XML Headerのバージョンの文字列を次と置き換えます。
Eclipse Persistence Services
TopLinkを永続性プロバイダとして使用するには、persistence.xmlファイルに対して名前変更ツールを実行する必要があります。名前変更ツールにより、永続性プロバイダがEclipseLinkとなるよう更新され、またTopLinkに固有なネイティブなすべてのプロパティもEclipseLinkの対応するものに更新されます。
TopLink 11gリリース1 (11.1.1)より前のリリースでは、Oracle TopLink Workbenchというグラフィカルな編集ツールが識別子の構成とプロジェクトのマッピング用に用意されていました。このツールはOracleでは提供しなくなりましたが、対応するEclipseLink WorkbenchというツールがEclipse Foundationから入手できます。古いTopLink Workbenchのプロジェクトは、EclipseLink Workbenchのプロジェクトに変換出力し、それを現在のOracle TopLinkアプリケーションで使用できます。WorkbenchプロジェクトはOracle JDeveloperにインポートすることも可能です。
|
注意: EclipseLink Workbenchは、オープンソースのソフトウェアなので、Oracleではサポートされていません。 |
Oracle TopLink Workbench (.mwp)プロジェクトをEclipseLink Workbenchプロジェクトに変換するには、次の手順を実行します。
(前述の)パッケージの名前変更ツールを使用し、Oracle TopLink Workbenchプロジェクト・ソースを移行します。
EclipseLink WorkbenchでOracle TopLink Workbenchのプロジェクトを開きます。
EclipseLink Workbenchによってプロジェクトが検出され、現在のWorkbenchのバージョンで保存するか質問するメッセージが表示されます。
「すぐに保存」をクリックして、プロジェクトを保存する新しいディレクトリを選択します。
この章のソリューションが実装されているその他のテクノロジおよびツールの詳細は、次の参考資料を参照してください。