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);
    }
}

タスク2: サーバーの構成

メタデータ・ファイルにアクセスするには、次のいずれかの方法を使用して、サーバーでマッピング・ファイルへURLでアクセスできる必要があります。

  • 静的なファイル提供サービス

  • 独自のマッピング・ファイルを使用するサーバーベースのソリューションまたは、ストアされたマッピング情報を使用するオンデマンドで作成されるマッピング・ファイル

  • その他のWebテクノロジ

その他の参考資料

この章のソリューションを実装するその他のテクノロジおよびツールの詳細は、次の参考資料を参照してください。