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

Difference between revisions of "EclipseLink/Examples/JPA/Extensible"

(Values Extensions)
(Flex Extensions)
Line 47: Line 47:
 
     @Transient
 
     @Transient
 
      
 
      
     @FlexExtensions(initial=5, create=false)
+
     @FlexExtensions(initial=2, create=false)
 
     private Map<String, Object> extensions = new HashMap<String, Object>();
 
     private Map<String, Object> extensions = new HashMap<String, Object>();
 
</source>
 
</source>
 +
 +
The underlying schema for the extension storage would look like:
 +
 +
[[Image:El-flex-extensions-schema.gif]]
  
 
==== Configuration ====
 
==== Configuration ====

Revision as of 11:34, 2 March 2011

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=2, create=false)
    private Map<String, Object> extensions = new HashMap<String, Object>();

The underlying schema for the extension storage would look like:

El-flex-extensions-schema.gif

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

Back to the top