public abstract class EntityModel
extends java.lang.Object
EntityModel
defines entity classes, primary keys, secondary keys, and
relationships between entities. For each entity class that is part of the
model, a single PrimaryIndex
object and zero or more SecondaryIndex
objects may be accessed via an EntityStore
.
The built-in entity model, the AnnotationModel
, is based on
annotations that are added to entity classes and their key fields.
Annotations are used in the examples in this package, and it is expected
that annotations will normally be used; most readers should therefore skip
to the AnnotationModel
class. However, a custom entity model class
may define its own metadata. This can be used to define entity classes and
keys using mechanisms other than annotations.
A concrete entity model class should extend this class and implement the
getClassMetadata(java.lang.String)
, getEntityMetadata(java.lang.String)
and getKnownClasses()
methods.
This is an abstract class rather than an interface to allow adding capabilities to the model at a future date without causing incompatibilities. For example, a method may be added in the future for returning new information about the model and subclasses may override this method to return the new information. Any new methods will have default implementations that return default values, and the use of the new information will be optional.
Modifier | Constructor and Description |
---|---|
protected |
EntityModel()
The default constructor for use by subclasses.
|
Modifier and Type | Method and Description |
---|---|
static java.lang.Class |
classForName(java.lang.String className)
Deprecated.
use
resolveClass(java.lang.String) instead. This method does not
use the environment's ClassLoader property. |
java.lang.Object |
convertRawObject(RawObject raw)
Converts a given raw object to a live object according to the current
class definitions.
|
java.util.List<RawType> |
getAllRawTypes()
Returns all versions of all known types.
|
java.util.List<RawType> |
getAllRawTypeVersions(java.lang.String className)
Returns all known versions of type information for a given class name,
or null if no persistent version of the class is known.
|
abstract ClassMetadata |
getClassMetadata(java.lang.String className)
Returns the metadata for a given persistent class name, including proxy
classes and entity classes.
|
abstract EntityMetadata |
getEntityMetadata(java.lang.String className)
Returns the metadata for a given entity class name.
|
abstract java.util.Set<java.lang.String> |
getKnownClasses()
Returns the names of all known persistent classes.
|
java.util.Set<java.lang.String> |
getKnownSpecialClasses()
Returns the names of all known persistent enum and array classes that
may be used to store persistent data.
|
RawType |
getRawType(java.lang.String className)
Returns the type information for the current version of a given class,
or null if the class is not currently persistent.
|
RawType |
getRawTypeVersion(java.lang.String className,
int version)
Returns the type information for a given version of a given class,
or null if the given version of the class is unknown.
|
boolean |
isOpen()
Returns whether the model is associated with an open store.
|
void |
registerClass(java.lang.Class persistentClass)
Registers a persistent class, most importantly, a
PersistentProxy class or entity subclass. |
java.lang.Class |
resolveClass(java.lang.String className)
Should be called by entity model implementations instead of calling
Class.forName whenever loading an application class.
|
protected EntityModel()
public final boolean isOpen()
The registerClass(java.lang.Class)
method may only be called when the model
is not yet open. Certain other methods may only be called when the
model is open:
public final void registerClass(java.lang.Class persistentClass)
PersistentProxy
class or entity subclass. Also registers an enum or
array class.
Any persistent class , enum class or array may be registered in advance of using it, to avoid the overhead of updating the catalog database when an instance of the class is first stored. This method must be called in three cases:
PersistentProxy
classes, andgetSubclassIndex
is not called for the
subclass, andFor example:
EntityModel model = new AnnotationModel(); model.registerClass(MyProxy.class); model.registerClass(MyEntitySubclass.class); model.registerClass(MyEnum.class); model.registerClass(MyArray[].class); StoreConfig config = new StoreConfig(); ... config.setModel(model); EntityStore store = new EntityStore(..., config);
This method must be called before opening a store based on this model.
persistentClass
- the class to register.java.lang.IllegalStateException
- if this method is called for a model that
is associated with an open store.java.lang.IllegalArgumentException
- if the given class is not persistent
or has a different class loader than previously registered classes.public abstract ClassMetadata getClassMetadata(java.lang.String className)
className
- the class name.public abstract EntityMetadata getEntityMetadata(java.lang.String className)
className
- the class name.public abstract java.util.Set<java.lang.String> getKnownClasses()
java.lang.IllegalStateException
- if this method is called for a model that
is not associated with an open store.public java.util.Set<java.lang.String> getKnownSpecialClasses()
getKnownClasses()
, which does not return enum and array classes
because they have no metadata.java.lang.IllegalStateException
- if this method is called for a model that
is not associated with an open store.public final RawType getRawType(java.lang.String className)
className
- the name of the current version of the class.java.lang.IllegalStateException
- if this method is called for a model that
is not associated with an open store.public final RawType getRawTypeVersion(java.lang.String className, int version)
className
- the name of the latest version of the class.version
- the desired version of the class.java.lang.IllegalStateException
- if this method is called for a model that
is not associated with an open store.public final java.util.List<RawType> getAllRawTypeVersions(java.lang.String className)
className
- the name of the latest version of the class.java.lang.IllegalStateException
- if this method is called for a model that
is not associated with an open store.public final java.util.List<RawType> getAllRawTypes()
java.lang.IllegalStateException
- if this method is called for a model that
is not associated with an open store.public final java.lang.Object convertRawObject(RawObject raw)
The given raw object must conform to the current class definitions.
However, the raw type (RawObject.getType()
) is allowed to be from
a different store, as long as the class names and the value types match.
This allows converting raw objects that are read from one store to live
objects in another store, for example, in a conversion program.
raw
- the RawObject.public java.lang.Class resolveClass(java.lang.String className) throws java.lang.ClassNotFoundException
ClassResolver
to implement the class loading policy.className
- the class name.java.lang.ClassNotFoundException
- if the class is not found.public static java.lang.Class classForName(java.lang.String className) throws java.lang.ClassNotFoundException
resolveClass(java.lang.String)
instead. This method does not
use the environment's ClassLoader property.className
- the class name.java.lang.ClassNotFoundException
- if the class is not found.Copyright (c) 2002, 2017 Oracle and/or its affiliates. All rights reserved.