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/Development/Dynamic/Design PublicAPI"

Line 93: Line 93:
 
{| width="100%" border="1" cellpadding="3"
 
{| width="100%" border="1" cellpadding="3"
 
|- class="TableHeadingColor" bgcolor="#CCCCFF"
 
|- class="TableHeadingColor" bgcolor="#CCCCFF"
! colspan="2" align="left" | <font size="+2"> '''Constructor Summary'''</font>
+
! colspan="2" align="left" | <font size="+1"> '''Constructor Summary'''</font>
 
|- class="TableRowColor" bgcolor="white"
 
|- class="TableRowColor" bgcolor="white"
| <code>'''EntityTypeBuilder(java.lang.Class<?> dynamicClass, org.eclipse.persistence.dynamic.EntityType parentType, java.lang.String...tableNames)</code><br />Create an EntityType for a new dynamic type.
+
| <code>'''EntityTypeBuilder(java.lang.Class<?> dynamicClass, org.eclipse.persistence.dynamic.EntityType parentType, java.lang.String...tableNames)'''</code><br />Create an EntityType for a new dynamic type.
 
|- class="TableRowColor" bgcolor="white"
 
|- class="TableRowColor" bgcolor="white"
| <code>'''EntityTypeBuilder(org.eclipse.persistence.internal.dynamic.DynamicClassLoader dcl, org.eclipse.persistence.descriptors.ClassDescriptor descriptor, org.eclipse.persistence.dynamic.EntityType parentType)</code><br />Create an EntityTypeBuilder for an existing descriptor.
+
| <code>'''EntityTypeBuilder(org.eclipse.persistence.internal.dynamic.DynamicClassLoader dcl, org.eclipse.persistence.descriptors.ClassDescriptor descriptor, org.eclipse.persistence.dynamic.EntityType parentType)'''</code><br />Create an EntityTypeBuilder for an existing descriptor.
 
|}
 
|}
 
{| width="100%" border="1" cellpadding="3"
 
{| width="100%" border="1" cellpadding="3"
 
|- class="TableHeadingColor" bgcolor="#CCCCFF"
 
|- class="TableHeadingColor" bgcolor="#CCCCFF"
! colspan="2" align="left" | <font size="+2"> '''Method Summary'''</font>
+
! colspan="2" align="left" | <font size="+1"> '''Method Summary'''</font>
 
|- class="TableRowColor" bgcolor="white"
 
|- class="TableRowColor" bgcolor="white"
 
| width="1%" align="right" valign="top" | <font size="-1"> <code> org.eclipse.persistence.mappings.AggregateObjectMapping</code></font>
 
| width="1%" align="right" valign="top" | <font size="-1"> <code> org.eclipse.persistence.mappings.AggregateObjectMapping</code></font>
| <code>'''[../../../../org/eclipse/persistence/dynamic/EntityTypeBuilder.html#addAggregateObjectMapping(java.lang.String, org.eclipse.persistence.dynamic.EntityType, boolean) addAggregateObjectMapping]'''(java.lang.String name, org.eclipse.persistence.dynamic.EntityType refType, boolean allowsNull)</code><br />TODO
+
| <code>'''addAggregateObjectMapping'''(java.lang.String name, org.eclipse.persistence.dynamic.EntityType refType, boolean allowsNull)</code><br />TODO
 
|- class="TableRowColor" bgcolor="white"
 
|- class="TableRowColor" bgcolor="white"
 
| width="1%" align="right" valign="top" | <font size="-1"> <code> org.eclipse.persistence.mappings.DirectCollectionMapping</code></font>
 
| width="1%" align="right" valign="top" | <font size="-1"> <code> org.eclipse.persistence.mappings.DirectCollectionMapping</code></font>
| <code>'''[../../../../org/eclipse/persistence/dynamic/EntityTypeBuilder.html#addDirectCollectionMapping(java.lang.String, java.lang.String, java.lang.String, java.lang.Class, java.lang.String...) addDirectCollectionMapping]'''(java.lang.String name, java.lang.String targetTable, java.lang.String valueColumn, java.lang.Class<?> valueType, java.lang.String...fkFieldNames)</code><br />TODO
+
| <code>'''addDirectCollectionMapping'''(java.lang.String name, java.lang.String targetTable, java.lang.String valueColumn, java.lang.Class<?> valueType, java.lang.String...fkFieldNames)</code><br />TODO
 
|- class="TableRowColor" bgcolor="white"
 
|- class="TableRowColor" bgcolor="white"
 
| width="1%" align="right" valign="top" | <font size="-1"> <code> org.eclipse.persistence.mappings.DirectToFieldMapping</code></font>
 
| width="1%" align="right" valign="top" | <font size="-1"> <code> org.eclipse.persistence.mappings.DirectToFieldMapping</code></font>
| <code>'''[../../../../org/eclipse/persistence/dynamic/EntityTypeBuilder.html#addDirectMapping(java.lang.String, java.lang.Class, java.lang.String) addDirectMapping]'''(java.lang.String name, java.lang.Class<?> javaType, java.lang.String fieldName)</code><br />Allows <code>DirectToFieldMapping</code> (@Basic) mapping to be added to a dynamic type through API.
+
| <code>'''addDirectMapping'''(java.lang.String name, java.lang.Class<?> javaType, java.lang.String fieldName)</code><br />Allows <code>DirectToFieldMapping</code> (@Basic) mapping to be added to a dynamic type through API.
 
|- class="TableRowColor" bgcolor="white"
 
|- class="TableRowColor" bgcolor="white"
 
| width="1%" align="right" valign="top" | <font size="-1"> <code> void</code></font>
 
| width="1%" align="right" valign="top" | <font size="-1"> <code> void</code></font>
| <code>'''[../../../../org/eclipse/persistence/dynamic/EntityTypeBuilder.html#addManyToManyMapping(java.lang.String, org.eclipse.persistence.dynamic.EntityType, java.lang.String) addManyToManyMapping]'''(java.lang.String name, org.eclipse.persistence.dynamic.EntityType refType, java.lang.String relationshipTableName)</code><br />TODO
+
| <code>'''addManyToManyMapping'''(java.lang.String name, org.eclipse.persistence.dynamic.EntityType refType, java.lang.String relationshipTableName)</code><br />TODO
 
|- class="TableRowColor" bgcolor="white"
 
|- class="TableRowColor" bgcolor="white"
 
| width="1%" align="right" valign="top" | <font size="-1"> <code> org.eclipse.persistence.mappings.OneToManyMapping</code></font>
 
| width="1%" align="right" valign="top" | <font size="-1"> <code> org.eclipse.persistence.mappings.OneToManyMapping</code></font>
| <code>'''[../../../../org/eclipse/persistence/dynamic/EntityTypeBuilder.html#addOneToManyMapping(java.lang.String, org.eclipse.persistence.dynamic.EntityType, java.lang.String...) addOneToManyMapping]'''(java.lang.String name, org.eclipse.persistence.dynamic.EntityType refType, java.lang.String...fkFieldNames)</code><br />TODO
+
| <code>'''addOneToManyMapping'''(java.lang.String name, org.eclipse.persistence.dynamic.EntityType refType, java.lang.String...fkFieldNames)</code><br />TODO
 
|- class="TableRowColor" bgcolor="white"
 
|- class="TableRowColor" bgcolor="white"
 
| width="1%" align="right" valign="top" | <font size="-1"> <code>org.eclipse.persistence.mappings.OneToOneMapping</code></font>
 
| width="1%" align="right" valign="top" | <font size="-1"> <code>org.eclipse.persistence.mappings.OneToOneMapping</code></font>
| <code>'''[../../../../org/eclipse/persistence/dynamic/EntityTypeBuilder.html#addOneToOneMapping(java.lang.String, org.eclipse.persistence.dynamic.EntityType, java.lang.String...) addOneToOneMapping]'''(java.lang.String name, org.eclipse.persistence.dynamic.EntityType refType, java.lang.String...fkFieldNames)</code><br />Allows <code>OneToOneMapping</code> (@OneToOne and @ManyToOne) mappings to be added to a dynamic type through API.
+
| <code>'''addOneToOneMapping'''(java.lang.String name, org.eclipse.persistence.dynamic.EntityType refType, java.lang.String...fkFieldNames)</code><br />Allows <code>OneToOneMapping</code> (@OneToOne and @ManyToOne) mappings to be added to a dynamic type through API.
 
|- class="TableRowColor" bgcolor="white"
 
|- class="TableRowColor" bgcolor="white"
 
| width="1%" align="right" valign="top" | <font size="-1"> <code> void</code></font>
 
| width="1%" align="right" valign="top" | <font size="-1"> <code> void</code></font>
| <code>'''[../../../../org/eclipse/persistence/dynamic/EntityTypeBuilder.html#addToSession(org.eclipse.persistence.sessions.DatabaseSession, boolean, boolean) addToSession]'''(org.eclipse.persistence.sessions.DatabaseSession session, boolean createMissingTables, boolean generateFKConstraints)</code><br />
+
| <code>'''addToSession'''(org.eclipse.persistence.sessions.DatabaseSession session, boolean createMissingTables, boolean generateFKConstraints)</code><br />
 
|- class="TableRowColor" bgcolor="white"
 
|- class="TableRowColor" bgcolor="white"
 
| width="1%" align="right" valign="top" | <font size="-1"> <code>static void</code></font>
 
| width="1%" align="right" valign="top" | <font size="-1"> <code>static void</code></font>
| <code>'''[../../../../org/eclipse/persistence/dynamic/EntityTypeBuilder.html#addToSession(org.eclipse.persistence.sessions.DatabaseSession, boolean, boolean, org.eclipse.persistence.dynamic.EntityType...) addToSession]'''(org.eclipse.persistence.sessions.DatabaseSession session, boolean createMissingTables, boolean generateFKConstraints, org.eclipse.persistence.dynamic.EntityType...types)</code><br />Add one or more EntityType instances to a session and optionally generate needed tables with or without FK constraints.
+
| <code>'''addToSession'''(org.eclipse.persistence.sessions.DatabaseSession session, boolean createMissingTables, boolean generateFKConstraints, org.eclipse.persistence.dynamic.EntityType...types)</code><br />Add one or more EntityType instances to a session and optionally generate needed tables with or without FK constraints.
 
|- class="TableRowColor" bgcolor="white"
 
|- class="TableRowColor" bgcolor="white"
 
| width="1%" align="right" valign="top" | <font size="-1"> <code> void</code></font>
 
| width="1%" align="right" valign="top" | <font size="-1"> <code> void</code></font>
| <code>'''[../../../../org/eclipse/persistence/dynamic/EntityTypeBuilder.html#configureSequencing(org.eclipse.persistence.sequencing.Sequence, java.lang.String, java.lang.String) configureSequencing]'''(org.eclipse.persistence.sequencing.Sequence sequence, java.lang.String numberName, java.lang.String numberFieldName)</code><br />
+
| <code>'''configureSequencing'''(org.eclipse.persistence.sequencing.Sequence sequence, java.lang.String numberName, java.lang.String numberFieldName)</code><br />
 
|- class="TableRowColor" bgcolor="white"
 
|- class="TableRowColor" bgcolor="white"
 
| width="1%" align="right" valign="top" | <font size="-1"> <code> void</code></font>
 
| width="1%" align="right" valign="top" | <font size="-1"> <code> void</code></font>
| <code>'''[../../../../org/eclipse/persistence/dynamic/EntityTypeBuilder.html#configureSequencing(java.lang.String, java.lang.String) configureSequencing]'''(java.lang.String numberName, java.lang.String numberFieldName)</code><br />
+
| <code>'''configureSequencing'''(java.lang.String numberName, java.lang.String numberFieldName)</code><br />
 
|- class="TableRowColor" bgcolor="white"
 
|- class="TableRowColor" bgcolor="white"
 
| width="1%" align="right" valign="top" | <font size="-1"> <code> org.eclipse.persistence.dynamic.EntityType</code></font>
 
| width="1%" align="right" valign="top" | <font size="-1"> <code> org.eclipse.persistence.dynamic.EntityType</code></font>
| <code>'''[../../../../org/eclipse/persistence/dynamic/EntityTypeBuilder.html#getType() getType]'''()</code><br />
+
| <code>'''getType'''()</code><br />
 
|- class="TableRowColor" bgcolor="white"
 
|- class="TableRowColor" bgcolor="white"
 
| width="1%" align="right" valign="top" | <font size="-1"> <code>static org.eclipse.persistence.sessions.Project</code></font>
 
| width="1%" align="right" valign="top" | <font size="-1"> <code>static org.eclipse.persistence.sessions.Project</code></font>
| <code>'''[../../../../org/eclipse/persistence/dynamic/EntityTypeBuilder.html#loadDynamicProject(java.io.InputStream, org.eclipse.persistence.sessions.DatabaseLogin, org.eclipse.persistence.internal.dynamic.DynamicClassLoader) loadDynamicProject]'''(java.io.InputStream resourceStream, org.eclipse.persistence.sessions.DatabaseLogin login, org.eclipse.persistence.internal.dynamic.DynamicClassLoader dynamicClassLoader)</code><br />Load a dynamic project from deployment XML creating dynamic types for all descriptors where the provided class name does not exist.
+
| <code>'''loadDynamicProject'''(java.io.InputStream resourceStream, org.eclipse.persistence.sessions.DatabaseLogin login, org.eclipse.persistence.internal.dynamic.DynamicClassLoader dynamicClassLoader)</code><br />Load a dynamic project from deployment XML creating dynamic types for all descriptors where the provided class name does not exist.
 
|- class="TableRowColor" bgcolor="white"
 
|- class="TableRowColor" bgcolor="white"
 
| width="1%" align="right" valign="top" | <font size="-1"> <code>static org.eclipse.persistence.sessions.Project</code></font>
 
| width="1%" align="right" valign="top" | <font size="-1"> <code>static org.eclipse.persistence.sessions.Project</code></font>
| <code>'''[../../../../org/eclipse/persistence/dynamic/EntityTypeBuilder.html#loadDynamicProject(java.lang.String, org.eclipse.persistence.sessions.DatabaseLogin, org.eclipse.persistence.internal.dynamic.DynamicClassLoader) loadDynamicProject]'''(java.lang.String resourcePath, org.eclipse.persistence.sessions.DatabaseLogin login, org.eclipse.persistence.internal.dynamic.DynamicClassLoader dynamicClassLoader)</code><br />Load a dynamic project from deployment XML creating dynamic types for all descriptors where the provided class name does not exist.
+
| <code>'''loadDynamicProject'''(java.lang.String resourcePath, org.eclipse.persistence.sessions.DatabaseLogin login, org.eclipse.persistence.internal.dynamic.DynamicClassLoader dynamicClassLoader)</code><br />Load a dynamic project from deployment XML creating dynamic types for all descriptors where the provided class name does not exist.
 
|- class="TableRowColor" bgcolor="white"
 
|- class="TableRowColor" bgcolor="white"
 
| width="1%" align="right" valign="top" | <font size="-1"> <code> void</code></font>
 
| width="1%" align="right" valign="top" | <font size="-1"> <code> void</code></font>
| <code>'''[../../../../org/eclipse/persistence/dynamic/EntityTypeBuilder.html#setPrimaryKeyFields(java.lang.String...) setPrimaryKeyFields]'''(java.lang.String... pkFieldNames)</code><br />Set the PK field names on the underlying descriptor ensuring no duplicate names are added.
+
| <code>'''setPrimaryKeyFields'''(java.lang.String... pkFieldNames)</code><br />Set the PK field names on the underlying descriptor ensuring no duplicate names are added.
|}
+
 
+
{| width="100%" border="1" cellpadding="3"
+
|- class="TableSubHeadingColor" bgcolor="#EEEEFF"
+
! align="left" | '''Methods inherited from class java.lang.Object'''
+
|- class="TableRowColor" bgcolor="white"
+
| <code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code>
+
 
|}
 
|}
  

Revision as of 11:05, 24 September 2009

Public API

This page captures the design of the public API - introduced in the new package org.eclipse.persistence.dynamic -
that allows developers to define and use dynamic entities.

Dynpersist.png

public interface DynamicEntity
  • Primary interface of a dynamic persistent entity. This is the API an application uses to interact with an entity.

DynamicEntity is the public interface for dealing with dynamic persistent objects.
The purpose of dynamic persistent objects is to enable (simple) data access when only mapping information is available
and no concrete Java model is present (specifically, no .class files .)

Applications using DynamicEntity's can access the persistent state using property names which correspond to
the mapped attributes in the underlying EclipseLink descriptors. For properties mapped to containers (Collection,Map, etc.),
the property is retrieved then the resulting container can be manipulated.

To discover meta-data about a DynamicEntity's properties, see the DynamicHelper class

Since:
EclipseLink 1.2/2.0
Method Summary
<T> T

get(String propertyPath)
Return the persistence value for the given property as the specified type.
boolean isSet(String propertyPath)
Discover if a property has a persistent value
DynamicEntity set(String propertyPath, Object value)
Set the persistence value for the given property to the specified value


public interface EntityType
  • Provides access to the type information (meta-model) as well as functioning as a factory for new instances

An EntityType provides a metadata facade into the EclipseLink object-relational metadata (descriptors & mappings)
with specific knowledge of the entity types being dynamic.

Since:
EclipseLink 1.2/2.0
Method Summary
boolean containsProperty(String propertyName)
String getClassName()
o.e.p.descriptors.ClassDescriptor getDescriptor()
Class<?> getJavaClass()
String getName()
Return the entity type's name.
int getNumberOfProperties()
The current number of properties.
EntityType getParentType()
java.util.List<String> getPropertiesNames()
The current names of properties.
int getPropertyIndex(String propertyName)
Class<?> getPropertyType(int propertyIndex)
Class<?> getPropertyType(String propertyName)
DynamicEntity newInstance()



public class EntityTypeBuilder
  • Factory for creating dynamic types and bootstrapping using XML

The EntityTypeBuilder is a factory class for creating and extending dynamic entity types. After being constructed in either usage the application can then use the provided API to customize mapping information of the type.

Since:
EclipseLink 1.2
Constructor Summary
EntityTypeBuilder(java.lang.Class<?> dynamicClass, org.eclipse.persistence.dynamic.EntityType parentType, java.lang.String...tableNames)
Create an EntityType for a new dynamic type.
EntityTypeBuilder(org.eclipse.persistence.internal.dynamic.DynamicClassLoader dcl, org.eclipse.persistence.descriptors.ClassDescriptor descriptor, org.eclipse.persistence.dynamic.EntityType parentType)
Create an EntityTypeBuilder for an existing descriptor.
Method Summary
org.eclipse.persistence.mappings.AggregateObjectMapping addAggregateObjectMapping(java.lang.String name, org.eclipse.persistence.dynamic.EntityType refType, boolean allowsNull)
TODO
org.eclipse.persistence.mappings.DirectCollectionMapping addDirectCollectionMapping(java.lang.String name, java.lang.String targetTable, java.lang.String valueColumn, java.lang.Class<?> valueType, java.lang.String...fkFieldNames)
TODO
org.eclipse.persistence.mappings.DirectToFieldMapping addDirectMapping(java.lang.String name, java.lang.Class<?> javaType, java.lang.String fieldName)
Allows DirectToFieldMapping (@Basic) mapping to be added to a dynamic type through API.
void addManyToManyMapping(java.lang.String name, org.eclipse.persistence.dynamic.EntityType refType, java.lang.String relationshipTableName)
TODO
org.eclipse.persistence.mappings.OneToManyMapping addOneToManyMapping(java.lang.String name, org.eclipse.persistence.dynamic.EntityType refType, java.lang.String...fkFieldNames)
TODO
org.eclipse.persistence.mappings.OneToOneMapping addOneToOneMapping(java.lang.String name, org.eclipse.persistence.dynamic.EntityType refType, java.lang.String...fkFieldNames)
Allows OneToOneMapping (@OneToOne and @ManyToOne) mappings to be added to a dynamic type through API.
void addToSession(org.eclipse.persistence.sessions.DatabaseSession session, boolean createMissingTables, boolean generateFKConstraints)
static void addToSession(org.eclipse.persistence.sessions.DatabaseSession session, boolean createMissingTables, boolean generateFKConstraints, org.eclipse.persistence.dynamic.EntityType...types)
Add one or more EntityType instances to a session and optionally generate needed tables with or without FK constraints.
void configureSequencing(org.eclipse.persistence.sequencing.Sequence sequence, java.lang.String numberName, java.lang.String numberFieldName)
void configureSequencing(java.lang.String numberName, java.lang.String numberFieldName)
org.eclipse.persistence.dynamic.EntityType getType()
static org.eclipse.persistence.sessions.Project loadDynamicProject(java.io.InputStream resourceStream, org.eclipse.persistence.sessions.DatabaseLogin login, org.eclipse.persistence.internal.dynamic.DynamicClassLoader dynamicClassLoader)
Load a dynamic project from deployment XML creating dynamic types for all descriptors where the provided class name does not exist.
static org.eclipse.persistence.sessions.Project loadDynamicProject(java.lang.String resourcePath, org.eclipse.persistence.sessions.DatabaseLogin login, org.eclipse.persistence.internal.dynamic.DynamicClassLoader dynamicClassLoader)
Load a dynamic project from deployment XML creating dynamic types for all descriptors where the provided class name does not exist.
void setPrimaryKeyFields(java.lang.String... pkFieldNames)
Set the PK field names on the underlying descriptor ensuring no duplicate names are added.

Internal Design

New package org.eclipse.persistence.internal.dynamic

Back to the top