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/Development/200040/FunctionalSpec"
(→Native ORM Usage) |
|||
Line 94: | Line 94: | ||
''Note: It is important to document that this approach may introduce portability issues and that default EclipseLink naming or reference through a sessions configuration can also be used. | ''Note: It is important to document that this approach may introduce portability issues and that default EclipseLink naming or reference through a sessions configuration can also be used. | ||
− | === | + | === API access to EclipseLink-ORM.XML === |
The EclipseLink-ORM.XML file will be usable anywhere the previous deployment XML file can be used: | The EclipseLink-ORM.XML file will be usable anywhere the previous deployment XML file can be used: | ||
* Through an XMLProjectReader - There are no classes to process however and the new process requires classes. | * Through an XMLProjectReader - There are no classes to process however and the new process requires classes. | ||
+ | ** ''How will multiple EclipseLink-ORM.XML files be loaded intoa single project? Will this require the usage of sessions.xml which already supports multiple maps?'' | ||
* Through SessionManager (XMLLoader) and SessionFactory | * Through SessionManager (XMLLoader) and SessionFactory | ||
Revision as of 11:30, 20 November 2007
Contents
- 1 Functional Specification: New Native Object-Relational Mapping XML
- 2 Document History
- 3 Project overview
- 4 Concepts
- 5 Requirements
- 6 Functionality
- 7 Design Constraints
- 8 Maintainability
- 9 GUI
- 10 Config files
- 11 Open Issues
- 12 Decisions
- 13 Future Considerations
Functional Specification: New Native Object-Relational Mapping XML
Document History
Date | Author | Version Description & Notes |
---|---|---|
2007-11-15 | Guy Pelletier | Initial Draft |
2007-11-20 | Doug Clarke | Flushing out requirements and functionality sections |
Project overview
This project will introduce a new native XML configuration file that can be used to define the object-relational mapping metadata the EclipseLink runtime will use.
Goals:
- Improve the usability of the native ORM.XML file by making it more readable and less verbose (configuration by exception). Naming will align wit h JPA's ORM.XML to make usage of the native ORM.XML as intuitive as possible.
- Support various usage scenarios
- As standalone mapping file(s) replacing the existing deployment project/map XML
- As an override for JPA's ORM.XML enabled fine grain customization
Note this project will not address our OXM (JAXB, SDO) and EIS functionality. Those technologies will be addressed at a later time and should provide their own schema definitions etc. This project will concentrate solely on the ORM features available from EclipseLink.
Concepts
The following concepts are used in the document:
- ORM.XML refers to the JPA specification defined XML configuration file which can be used within a persistence unit through reference in the persistence.xml or through default location (META-INF/orm.xml)
- EclipseLink-ORM.XML (EL-ROM.XML) – EclipseLink’s native metadata XML file which is being defined along with its usage within this project.
Requirements
The following sections will expand the goals of this project into more concrete requirements.
EclipseLink-ORM.XML XSD
A new XSD for defining EclipseLink's object-relational metadata will be defined:
- Must support the complete functionality of the existing deployment project/map XML plus any additional features developed in parallel or selected for inclusion during the design process.
- Must align with JPA's ORM.XML to make it both intuitive to use and also facilitate overriding. The new XSD will not import or reference JPA's ORM.XML but must instead align with it through common element and attribute naming.
- Must embrace configuration by exception so only scope and non-default configurations need to be specified.
EclipseLink-ORM.XML Processing
The usage of EclipseLink-ORM.XML file(s) will conform to the following processing rules:
- Design a runtime architecture that leverages MOXy for metadata loading in conjunction with annotations. This must handle JPA (annotations + ORM.XML) as well as additional native EclipseLink options (annotations + EclipseLink-ORM.XML).
- Expand EclipseLink’s feature availability within the EclipseLink-ORM.XML beyond what is currently available - NICE TO HAVE
- TO DO: Define candidate list of features that must be added during this process and file bugs for additional capabilities to be added later
- Support multiple metadata loading schemes
- JPA only (annotations and XML)
- EclipseLink Native only (native annotations and XML)
- Oracle TopLink only: Support reading in and using Orcale TopLink's 11gR1 and 10.1.3 XML configuration files
- JPA + EclipseLink Native
- JPA + Oracle TopLink – Not supported
- Define a new XSD embracing minimal config, JPA ORM.xml alignment for overrides, and complete configuration without any JPA annotations or XML.
- Ensure we can have a persistence unit defined with no entities. If a customer just wants to access the database using SQL or stored procedures they should be able to define a persistence unit with zero entities and just the named queries.
- Be able to have named native SQL and stored procedure queries where the results can be shaped using any arbitrary entity or non-entity class. I think of this as constructor results for native queries.
EclipseLink-ORM.XML Locations
Developers will be able to leverage this XML file for the purposes of JPA configuration. There are a number of ways this XML file can be used.
Usage of the EclipseLink-ORM.XML file as an override for JPA annotations and/or ORM.XML. The files can be referenced for inclusion in a persistence unit's metadata definition through:
- Default location
- META-INF/eclipselink-orm.xml
- META-INF/orm.xml (in place of JPA's ORM.XML. Note: May not be portable)
- Referenced as persistence unit mapping file in persistence.xml
- Referenced through session configuration (sessions.xml)
Default Locations
As with JPA's default assumption that the existence of a META-INF/orm.xml indicates that it should be used for any persistence unit, EclipseLink will have a default assumption that the existence of META-INF/eclipselink-orm.xml will be used. This file can exist in addition to JPA's META-INF/orm.xml as an override or in isolation.
The runtime will also support the default JPA META-INF/orm.xml being an EclipseLink ORM configuration file.
File Granularity
Developers will be able to use this native XML configuration file at the same granularity as a JPA ORM.XML. This means that within a persistence unit there can be zero or more files used
EclipseLink-ORM.XML in place of JPA's ORM.XML
The EclipseLink runtime will support usage of EclipseLink-ORM.XML anywhere a JPA ORM.XML can be used. The runtime will automatically detect that the file is a native implementation and read and interpret its complete contents.
Note: It is important to document that this approach may introduce portability issues and that default EclipseLink naming or reference through a sessions configuration can also be used.
API access to EclipseLink-ORM.XML
The EclipseLink-ORM.XML file will be usable anywhere the previous deployment XML file can be used:
- Through an XMLProjectReader - There are no classes to process however and the new process requires classes.
- How will multiple EclipseLink-ORM.XML files be loaded intoa single project? Will this require the usage of sessions.xml which already supports multiple maps?
- Through SessionManager (XMLLoader) and SessionFactory
Backwards Compatibility
EclipseLink will support reading XML mapping files from Oracle TopLink 11 and 10.1.3. It will not be required to handle XML mapping files from early milestones of EclipseLink.
EclipseLink-ORM.XML Writing
The EclipseLink runtime currently supports writing out its native XML mapping file using MOXy. It is this support that the Workbench leverages to generate the deployment XML files. As part of this feature the writing of XML mapping files must be enhanced.
- When writing an EclipseLink project into XML the new EclipseLink-ORM.XML schema will be used for all object-relational projects
- When writing an EclipseLink project into XML the current deployment XML will be used for native MOXy and EIS projects
Writing Open Issues:
- Will the writing API be enhanced to support multiple file generation for custom granularity?
- Will the writing API be enhanced to support writing out the common JPA ORM.XML content into standard ORM.XML file(s)?
Workbench
The EclipseLink Workbench will generate this new native EclipseLink-ORM.XML format when exporting deployment XML for object-relational projects.
Open Issues:
- Will the workbench optionally generate JPA's ORM.XML and only generate EclipseLink-ORM.XML to support necessary extensions?
- Will the Workbench support multiple file generation to allow the developer to control the granularity of these files?
Functionality
The new EclipseLink ORM.xml schema will be built from the existing JPA ORM.xml schema. That is, we will add new complex and simple elements to the schema.
The full functionality of EclipseLink and the existing native schema cannot be ported to the EclipseLink ORM.xml schema in one Milestone drop however. Will provide the new features throughout several Milestones. Milestone should include not only XML updates but also their annotation counterparts. Nothing should be added to the schema unless its internal processing is implemented, therefore, ensuring our users have a fully supported schema at the end of every Milestone.
The following Milestones serve as an example of our work going forth. Notice the Milestone content and ordering may be re-worked based on further discussions and priorities. Each Milestone will deliver a design, implementation and testing of the Milestone content.
This section discusses the implementation phases of this project.
- Milestone – a 30 day development cycle
Note:
- At every Milestone, any remaining set of features not available through EclipseLink ORM.xml schema or annotations will remain available through the use of a session customizer.
- NOTE: The Milestones below do not directly relate to an actual EclipseLink Milestone. Hence they will be labelled with a letter until such time that they are assigned to a specific Milestone.
Milestone a
- Convert the existing JPA XML metadata processing from SAX parsing to OX.
Milestone b
- This milestone will provide XML metadata support for existing native EclipseLink annotations - Design Spec
Milestone c
- Complex (PLSQL) type support for stored procedure parameters
- Sequencing on non-id attributes.
- attributes-complete - have a flag to indicate not to auto generate any unspecified attributes, this is important in XML when the class may continue to evolve.
- primary-key element to allow giving columns, (allow one-to-one pks, or including other fields such as the inheritance indicator, field from embeddable, etc.)
- allow target-join-column in a one-to-one (allows complex target foreign keys and one-to-one without mappedBy)
Milestone d
- Transformation mappings
- Aggregate-collection mapping
- Variable 1-1 mapping
- Serialized Converter
- Class-instance converter
Milestone e
- XML-type or data-type
- Query-keys
- Mapping custom-sql/calls
- Custom-sql/calls
- Mapping selection-criteria
Milestone f
- Query sequence
- Unary-table sequence
- Copy-policy
- Instantiation-policy
Milestone g
- Additional join
- Multiple table join
- Multiple table foreign-keys
- Inheritance-joins
Milestone h
- Fetch groups
- Class extractor
- Additional events
- Does exist
- Default timeout
- Interfaces
- History
Milestone i
- ???
Milestone j
- JPA 2.0 support
Also note that most metadata configurations from the JPA ORM.xml schema are optional. These optional components should continue within the EclipseLink ORM.xml schema wherever possible when adding new features. This will help maintain backwards compatibility and also avoid creating a new versioned schema for every new feature added and our users require little to hopefully no changes to their configurations.
Design Constraints
Expanding our feature set with the new ORM.xml schema will not proceed till our OX solution has been implemented. After that time, Milestones are free to be re-ordered or re-organized as necessary.
Maintainability
The maintainability of this project is greatly eased by updating our current JPA metadata processing to use our OX technology.
GUI
JPA comfigurations are supported through the Dali project. This project should be updated to support extended features made available from the new EclipseLink ORM.xml schema and annotations.
Config files
The Dali project should support writing out the EclipseLink ORM.xml file.
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 |
---|---|---|
? | Owner | Description |
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 |
---|---|---|
? | Description | 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.