Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "EclipseLink/UserGuide/sandbox/gelernter/External Mappings"
m |
m |
||
Line 7: | Line 7: | ||
|apis= | |apis= | ||
* [[http://www.eclipse.org/eclipselink/api/latest/org/eclipse/persistence/jpa/metadata/MetadataSource.html| MetadataSource]] | * [[http://www.eclipse.org/eclipselink/api/latest/org/eclipse/persistence/jpa/metadata/MetadataSource.html| MetadataSource]] | ||
+ | * [[http://www.eclipse.org/eclipselink/api/latest/org/eclipse/persistence/config/PersistenceUnitProperties.html#METADATA_SOURCE| METADATA_SOURCE]] | ||
+ | * [[http://www.eclipse.org/eclipselink/api/latest/org/eclipse/persistence/config/PersistenceUnitProperties.html#METADATA_SOURCE_XML_FILE| METADATA_SOURCE_XML_FILE]] | ||
+ | * [[http://www.eclipse.org/eclipselink/api/latest/org/eclipse/persistence/config/PersistenceUnitProperties.html#METADATA_SOURCE_XML_URL| METADATA_SOURCE_XML_URL]] | ||
|examples=y | |examples=y | ||
|example= | |example= | ||
− | *[[ http://wiki.eclipse.org/EclipseLink/Examples/MySports | + | *[[http://wiki.eclipse.org/EclipseLink/Examples/MySports MySports Example]] |
}} | }} | ||
===******SANDBOX VERSION******=== | ===******SANDBOX VERSION******=== | ||
''This page is under construction''' | ''This page is under construction''' | ||
− | = | + | = External Mappings= |
{{EclipseLink_NewIn | {{EclipseLink_NewIn | ||
Line 19: | Line 22: | ||
<br> | <br> | ||
<br> | <br> | ||
− | |||
− | + | You can store mapping information using a metadata source external to the running application. This allows you to dynamically integrate mapping overrides and extended mappings into deployed applications. The mapping information is retrieved when the application's persistence unit is being created. This feature can be used for any mapping customization including [[EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Extensible_Entities| Extensible JPA Entities]]. | |
− | # [# Configuring the Persistence Unit|Configure the client persistence unit] | + | To configure external mapping, you must: |
− | # [# Configuring the Server|Configure the server] | + | |
+ | # [[# Configuring the Persistence Unit|Configure the client persistence unit]] | ||
+ | # [[# Configuring the Server|Configure the server]] | ||
== Configuring the Persistence Unit == | == Configuring the Persistence Unit == | ||
− | The | + | The simplest way to store mappings externally is to make the <tt>eclipselink-orm.xml</tt> file with the additional mapping information available on a Web server as a file. A more \complex way is to establish a server process that stores the mapping information and supports dynamically updating this information. |
+ | |||
+ | === Mapping File at a Fixed URL === | ||
− | + | To access an external mapping file at a fixed URL for a persistence unit, use something like the folloiwng: | |
<source lang="xml"> | <source lang="xml"> | ||
Line 37: | Line 43: | ||
</source> | </source> | ||
− | + | === Mapping a Location Based on the Application Context === | |
+ | |||
+ | For more complex requirement, for example, to provide tenant-specific extensions in a multi-tenant application, you can specify the location of the mapping information based on application context. To do so, implement the <tt>MetadataSource</tt> interface, and set the properties as follows: | ||
<source lang="xml"> | <source lang="xml"> | ||
Line 44: | Line 52: | ||
</source> | </source> | ||
− | In the MySports example application a JAX-RS (RESTful) service is built that returns the mapping file per tenant | + | In the following example, (from the *[[http://wiki.eclipse.org/EclipseLink/Examples/MySports MySports]] example application), a JAX-RS (RESTful) service is built that returns the mapping file per tenant: |
<source lang="java"> | <source lang="java"> | ||
Line 64: | Line 72: | ||
* Server-based solution with its own persistent store of XML files or mapping information stored in a granular form and put together into mapping documents on demand | * Server-based solution with its own persistent store of XML files or mapping information stored in a granular form and put together into mapping documents on demand | ||
− | + | See the [[http://wiki.eclipse.org/EclipseLink/Examples/MySports MySports]] example application) for an implementation of a JAX-RS based solution. The mapping extensions are stored as separate JPA entities and combined together on demand to create a tenant-specific mapping override file with that tenant's extension mappings. | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + |
Revision as of 09:04, 4 July 2011
EclipseLink JPA
EclipseLink | |
Website | |
Download | |
Community | |
Mailing List • Forums • IRC • mattermost | |
Issues | |
Open • Help Wanted • Bug Day | |
Contribute | |
Browse Source |
Key API
Examples
******SANDBOX VERSION******
This page is under construction'
External Mappings
You can store mapping information using a metadata source external to the running application. This allows you to dynamically integrate mapping overrides and extended mappings into deployed applications. The mapping information is retrieved when the application's persistence unit is being created. This feature can be used for any mapping customization including Extensible JPA Entities.
To configure external mapping, you must:
Configuring the Persistence Unit
The simplest way to store mappings externally is to make the eclipselink-orm.xml file with the additional mapping information available on a Web server as a file. A more \complex way is to establish a server process that stores the mapping information and supports dynamically updating this information.
Mapping File at a Fixed URL
To access an external mapping file at a fixed URL for a persistence unit, use something like the folloiwng:
<property name="eclipselink.metadata-source" value="XML"/> <property name="eclipselink.metadata-source.xml.url" value="foo://bar"/>
Mapping a Location Based on the Application Context
For more complex requirement, for example, to provide tenant-specific extensions in a multi-tenant application, you can specify the location of the mapping information based on application context. To do so, implement the MetadataSource interface, and set the properties as follows:
<property name="eclipselink.metadata-source" value="mypackage.MyMetadataSource"/> <property name="eclipselink.metadata-source.xml.url" value="foo://bar"/>
In the following example, (from the *[MySports] example application), a JAX-RS (RESTful) service is built that returns the mapping file per tenant:
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://foo.bar/rest/" + leagueId + "/orm"); return super.getEntityMappings(properties, classLoader, log); } }
Configuring the Server
The server must provide URL access to a mapping file. This can be done using a number of Web technologies, including:
- Static file serving
- Server-based solution with its own persistent store of XML files or mapping information stored in a granular form and put together into mapping documents on demand
See the [MySports] example application) for an implementation of a JAX-RS based solution. The mapping extensions are stored as separate JPA entities and combined together on demand to create a tenant-specific mapping override file with that tenant's extension mappings.