Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

EclipseLink/Examples/JPA/Extensible

< EclipseLink‎ | Examples‎ | JPA
Revision as of 11:33, 2 March 2011 by Douglas.clarke.oracle.com (Talk | contribs) (Values Extensions)

Catnicon.gifUNDER CONSTRUCTION

Extensible Entities Example

This example illustrates how EclipseLink 2.2 can be used to build a domain model that allows addition 'extension' properties, relationships, and types to added and used in the application.

NOTE: This functionality is being formalized into new features for EclipseLink Indigo (2.3) in its Extensibility features.

Getting the Code

The example is being developed within the trunk of EclipseLink:

Usage Instructions

Code Examples

The following are code snippets extracted from the example to illustrate key use-cases.

Values Extensions

Values extensions use a separate table to store the extension properties. In this example the Employee entity type uses values extensions and is configured as:

    @Transient
 
    @ValuesExtensions(table = @Table(name = "emp_ext"), 
            id = @Column(name = "EXT_ID"), 
            value = @Column(name = "EXT_VALUE"))
    private Map<String, Object> extensions;

It is annotated as @Transient so that the default JPA mappings are not applied. The configuration section below shows how the mapping is actually enabled.

El-values-extensions-schema.gif

Flex Extensions

In this example the Address class uses flex extensions and is configured as:

    @Transient
 
    @FlexExtensions(initial=5, create=false)
    private Map<String, Object> extensions = new HashMap<String, Object>();

Configuration

In order to enable the extensions a session customizer is used. This will use the ExtensionManagerHelper to enable extensions usage in the specified classes.

src/model.extensions.ExtensionsCustomizer

public class ExtensionsCustomizer implements SessionCustomizer {
 
    public void customize(Session session) throws Exception {
        ExtensionManagerHelper helper = new ExtensionManagerHelper(session);
 
        helper.initializeValueExtensions(Employee.class, "extensions"); 
        helper.initializeFlexExtensions(Address.class, "extensions"); 
    }
}

Copyright © Eclipse Foundation, Inc. All Rights Reserved.