Skip to main content

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.

Jump to: navigation, search

Difference between revisions of "EclipseLink/DesignDocs/232063"

Line 34: Line 34:
 
* Transparent support for relationships from @Cacheable(true) to @Cacheable(false).
 
* Transparent support for relationships from @Cacheable(true) to @Cacheable(false).
 
* Separate Isolated configuration from  @Cacheable(false)
 
* Separate Isolated configuration from  @Cacheable(false)
* Behaviour of @Cacheable(false)
+
** Create multi-valued configuration option
** Instances will be maintained within a Weak Identity Map.
+
*** SHARED - Entities are fully cached within the IdentityMaps (normal behaviour)
*** This will ensure 'Read-Only' entities can be built and maintain referential integrity.
+
*** PROTECTED - Users aways receive cloned versions of these classes but data is cached in shared cache
** Any instance read through or registered within a EM/Persistence Context will be "refreshed" to the latest data before being returned to the user.
+
*** ISOLATED - Data is not cached in shared cache ( @Cacheable(false) ) has same isolated behaviour as today
 +
** When the metadata is processed any SHARED Entities that reference PROTECTED or ISOLATED Entities will be elevated to PROTECTED.
  
 
=== EclipseLink JPA Metadata  ===
 
=== EclipseLink JPA Metadata  ===
* There is no new Metadata
+
* @Cache(isolaton=IsolationType.PROTECTED)
 +
* <cache isolation="PROTECTED"/>
  
 
== High Level Design  ==
 
== High Level Design  ==
# ForeignReferenceMappings will track when they reference @Cacheable(false)
+
* PROTECTED/ISOLATED Entities will always be cloned when returned
** This information will be used during registration with the Persistence Context to ensure the @Cacheable(false) Entities are reloaded from the database.
+
* ISOLATED Entities will not be cached but will be reloaded each time
# For Shared Cache and Read-Only Entities @Cacheable() will be treated separately from isIsolated.
+
* ForeignReferenceMappings will track when they reference ISOLATED Entities
 +
** This allows the mapping to determine how and when the relationship should be built.
 +
** Relationships owned by the PROTECTED/SHARED Entity will cache Within the PROTECTED/SHARED Entity in the form of PK(s) values.
 +
** Un-Owned relationships will not be built or cached
  
 
== Design / Functionality  ==
 
== Design / Functionality  ==

Revision as of 11:37, 23 June 2010

Design Specification:
     Relationships between non-Cachable and Cachable Entities

ER 232063

Document History

Date Author Version Description & Notes
2010/05/27 Gordon Yorke Initial creation of this doccumentation

Project overview

Goals:

  • Relationships between JPA 2.0 Cachable(false) and Cachable(true) Entities should be supported

Concepts

Currently EclipseLink uses the Isolated Cache functionality to provide @Cacheable(False) requirements. The Isolated Cache functionality was created with security as a primary requirement and Isolated Entities were not allowed to reference Shared Cache Entities. Transitioning Isolated Caches to the JPA 2.0 @Cacheable() requirements means this functionality must adapt and be more flexible as @Cacheable(true) Entities must be able to reference @Cacheable(false) Entities.

Requirements

  • Transparent support for relationships from @Cacheable(true) to @Cacheable(false).
  • Separate Isolated configuration from @Cacheable(false)
    • Create multi-valued configuration option
      • SHARED - Entities are fully cached within the IdentityMaps (normal behaviour)
      • PROTECTED - Users aways receive cloned versions of these classes but data is cached in shared cache
      • ISOLATED - Data is not cached in shared cache ( @Cacheable(false) ) has same isolated behaviour as today
    • When the metadata is processed any SHARED Entities that reference PROTECTED or ISOLATED Entities will be elevated to PROTECTED.

EclipseLink JPA Metadata

  • @Cache(isolaton=IsolationType.PROTECTED)
  • <cache isolation="PROTECTED"/>

High Level Design

  • PROTECTED/ISOLATED Entities will always be cloned when returned
  • ISOLATED Entities will not be cached but will be reloaded each time
  • ForeignReferenceMappings will track when they reference ISOLATED Entities
    • This allows the mapping to determine how and when the relationship should be built.
    • Relationships owned by the PROTECTED/SHARED Entity will cache Within the PROTECTED/SHARED Entity in the form of PK(s) values.
    • Un-Owned relationships will not be built or cached

Design / Functionality

Design Notes

Testing

API

Config files

Documentation

Open Issues

This section lists the open issues that are still pending that must be decided prior to fully implementing this project's requirements.

Issue # Owner Description / Notes

Decisions

This section lists decisions made. These are intended to document the resolution of open issues or constraints added to the project that are important.

Issue # Description / Notes Decision

Future Considerations

During the research for this project the following items were identified as out of scope but are captured here as potential future enhancements. If agreed upon during the review process these should be logged in the bug system.

Back to the top