13 外部のメタデータ・ソースの使用
この章の内容は次のとおりです。
ユース・ケース
アプリケーションが複数のクライアントにより共有されるSaaS環境をユーザーが構築したいと考えています。
解決方法
拡張性、マルチテナント、外部メタデータ・ソースなど、TopLinkのSaaS機能を採用します。
コンポーネント
-
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 2.4以降。
ソリューションの概要
実行中のアプリケーションの外部にあるメタデータ・ソースにマッピング情報をストアできます。マッピング情報は、アプリケーションが永続性ユニットを作成するときに取得されるので、デプロイされたアプリケーションで動的にマッピングのオーバーライドまたは拡張を行えます。
eclipselink-orm.xmlファイルの外部使用
EclipseLinkでは、eclipselink-orm.xml
ファイルを使用し、高度なマッピングのタイプおよびオプションをサポートできます。このファイルで、標準のJPA orm.xml
マッピング構成ファイルをオーバーライドできます。
メイン・タスク
外部のメタデータ・ソースをマッピング情報に使用するには、次のタスクを実行します。
タスク1: 永続性ユニットの構成
永続性ユニットで、eclipselink.metadata.source
プロパティを定義して外部のメタデータ・ソースを指定し、その値にorg.eclipse.persistence.jpa.metadata.MetadataSource
を実装するクラスを割り当てます。次に例を示します。
<property name="eclipselink.metadata-source" value="mypackage.MyMetadataSource"/>
たとえば次などのように、クラスでメタデータに任意の場所を自由に用意できます。
public class AdminMetadataSource extends XMLMetadataSource { @Override public XMLEntityMappings getEntityMappings(Map<String, Object> properties, ClassLoader classLoader, SessionLog log) { String leagueId = (String) properties.get(LEAGUE_CONTEXT); properties.put(PersistenceUnitProperties.METADATA_SOURCE_XML_URL, "http://myserverlocation/rest/" + leagueId + "/orm"); return super.getEntityMappings(properties, classLoader, log); } }
その他の参考資料
この章のソリューションを実装するその他のテクノロジおよびツールの詳細は、次の参考資料を参照してください。
-
JPAデプロイメントの詳細は、JPA仕様の次の項(
http://jcp.org/en/jsr/detail?id=317
)を参照してください。-
Bootstrapping in Java SE Environments
-
Container and Provider Contracts for Deployment and Bootstrapping
-
-
永続性ユニットのプロパティの詳細は、Oracle TopLink Java APIリファレンスの
PersistenceUnitProperties
クラスに関する項を参照してください。 -
APIの詳細は、『Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス』で次を参照してください。