|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.datanucleus.metadata.MetaDataManager
org.datanucleus.jdo.metadata.JDOMetaDataManager
public class JDOMetaDataManager
Manager of JDO MetaData information in DataNucleus.
Acts as a registry of JDO metadata so that metadata files don't need to be parsed multiple times. MetaData is stored as a FileMetaData, which contains PackageMetaData, which contains ClassMetaData, and so on. This maps exactly to the users model of their metadata. The users access point is getMetaDataForClass() which will check the known classes without metadata, then check the existing registered metdata, then check the valid locations for metdata files. This way, the metadata is managed from this single point.
When the MetaData is requested for a class, if it isn't already found, the valid file locations are checked for that class and the file containing it will be read. The MetaData for all classes, queries, sequences etc in that file are loaded at that point. In addition, all classes will be "populated" (meaning that their superclasses are assigned, and unspecified fields are added, and any related objects are linked). The MetaData of these classes are only initialised when they are absolutely needed - to avoid generating circular references in the initialisation process.
Each OMFContext typically will have its own MetaDataManager so allowing Meta-Data to be for different datastores. In addition, each PMF can allow MetaData files to use a particular suffix, hence we allow the JDO/ORM file suffices to be specifiable at construction.
| Field Summary | |
|---|---|
static int |
ALL_JDO_LOCATIONS
MetaData files will be searched in all possible locations defined in JDO1.0, JDO1.0.1, JDO2.0 or later |
protected java.util.Map<java.lang.String,AbstractClassMetaData> |
classMetaDataByInterface
Map of ClassMetaData, keyed by the interface class name (for "persistent-interface"s). |
static int |
JDO_1_0_0_LOCATIONS
MetaData files will be searched in all locations defined in JDO 1.0 |
static int |
JDO_1_0_1_LOCATIONS
MetaData files will be searched in all locations defined in JDO 1.0.1 |
protected int |
locationDefinition
Definition of which locations we accept for MetaData files. |
protected java.util.Map<java.lang.String,AbstractClassMetaData> |
ormClassMetaDataByClass
Map of ClassMetaData from ORM files, keyed by the class name. |
protected org.datanucleus.jdo.metadata.JDOMetaDataManager.MetaDataRegisterClassListener |
registerListener
Listener for persistent class initialisations (since JDO uses a discovery process). |
| Constructor Summary | |
|---|---|
JDOMetaDataManager(OMFContext ctxt)
Constructor. |
|
| Method Summary | |
|---|---|
void |
addORMDataToClass(java.lang.Class c,
ClassLoaderResolver clr)
Load up and add the O/R mapping info for the specified class to the stored JDO ClassMetaData. |
void |
close()
Clear resources |
ClassMetaData |
getClassMetaDataForImplementationOfPersistentInterface(java.lang.String interfaceName)
Accessor for the metadata for the implementation of the specified "persistent-interface". |
java.lang.String |
getImplementationNameForPersistentInterface(java.lang.String interfaceName)
Accessor for the implementation name for the specified "persistent-interface". |
AbstractClassMetaData |
getMetaDataForClassInternal(java.lang.Class c,
ClassLoaderResolver clr)
Internal method for accessing the MetaData for a class. |
InterfaceMetaData |
getMetaDataForInterface(java.lang.Class c,
ClassLoaderResolver clr)
Main accessor for the MetaData for a "persistent-interface". |
QueryMetaData |
getMetaDataForQuery(java.lang.Class cls,
ClassLoaderResolver clr,
java.lang.String queryName)
Accessor for the MetaData for a named query for a class. |
SequenceMetaData |
getMetaDataForSequence(ClassLoaderResolver clr,
java.lang.String packageSequenceName)
Accessor for the MetaData for a Sequence in a package. |
java.util.List |
getValidMetaDataLocationsForClass(java.lang.String fileExtension,
java.lang.String fileModifier,
java.lang.String className)
Method to return the valid metadata locations to contain a particular class. |
java.util.List |
getValidMetaDataLocationsForPackage(java.lang.String fileExtension,
java.lang.String fileModifier,
java.lang.String packageName)
Method to return the valid metadata locations to contain a particular package. |
boolean |
isPersistentDefinitionImplementation(java.lang.String implName)
Convenience method to return if the passed class name is an implementation of a "persistent definition". |
boolean |
isPersistentInterface(java.lang.String name)
Convenience method to return if the passed class name is a "persistent-interface". |
boolean |
isPersistentInterfaceImplementation(java.lang.String interfaceName,
java.lang.String implName)
Convenience method to return if the passed class name is an implementation of the passed "persistent-interface". |
protected FileMetaData |
loadMetaDataForClass(java.lang.Class pc_class,
ClassLoaderResolver clr,
java.lang.String mappingModifier,
java.lang.String metadataFileExtension,
MetadataFileType metadataType,
boolean populate)
Method to find the Meta-Data file for a specified class. |
protected FileMetaData |
parseFile(java.net.URL fileURL)
Utility to parse a file, using the "jdo" MetaData handler. |
void |
registerFile(java.lang.String fileURLString,
FileMetaData filemd,
ClassLoaderResolver clr)
Method to take the FileMetaData and register the relevant parts of it with the assorted caches provided. |
void |
registerImplementationOfAbstractClass(ClassMetaData cmd,
java.lang.Class implClass,
ClassLoaderResolver clr)
Method to register the metadata for an implementation of a persistent abstract class. |
void |
registerPersistentInterface(InterfaceMetaData imd,
java.lang.Class implClass,
ClassLoaderResolver clr)
Method to register a persistent interface and its implementation with the MetaData system. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
public static final int ALL_JDO_LOCATIONS
public static final int JDO_1_0_0_LOCATIONS
public static final int JDO_1_0_1_LOCATIONS
protected int locationDefinition
protected java.util.Map<java.lang.String,AbstractClassMetaData> ormClassMetaDataByClass
protected java.util.Map<java.lang.String,AbstractClassMetaData> classMetaDataByInterface
protected org.datanucleus.jdo.metadata.JDOMetaDataManager.MetaDataRegisterClassListener registerListener
| Constructor Detail |
|---|
public JDOMetaDataManager(OMFContext ctxt)
ctxt - ObjectManagerFactory Context that this metadata manager operates in| Method Detail |
|---|
public void close()
close in class MetaDataManagerprotected FileMetaData parseFile(java.net.URL fileURL)
parseFile in class MetaDataManagerfileURL - URL of the file
public void registerFile(java.lang.String fileURLString,
FileMetaData filemd,
ClassLoaderResolver clr)
registerFile in class MetaDataManagerfileURLString - URL of the metadata filefilemd - The File MetaData
public AbstractClassMetaData getMetaDataForClassInternal(java.lang.Class c,
ClassLoaderResolver clr)
getMetaDataForClassInternal in class MetaDataManagerc - The class to find MetaData for
public QueryMetaData getMetaDataForQuery(java.lang.Class cls,
ClassLoaderResolver clr,
java.lang.String queryName)
getMetaDataForQuery in class MetaDataManagercls - The class which has the query defined for itclr - the ClassLoaderResolverqueryName - Name of the query
public SequenceMetaData getMetaDataForSequence(ClassLoaderResolver clr,
java.lang.String packageSequenceName)
getMetaDataForSequence in class MetaDataManagerclr - the ClassLoaderResolverpackageSequenceName - Fully qualified name of the sequence (inc package name)
public void addORMDataToClass(java.lang.Class c,
ClassLoaderResolver clr)
addORMDataToClass in class MetaDataManagerc - The classclr - the ClassLoaderResolver
protected FileMetaData loadMetaDataForClass(java.lang.Class pc_class,
ClassLoaderResolver clr,
java.lang.String mappingModifier,
java.lang.String metadataFileExtension,
MetadataFileType metadataType,
boolean populate)
Allows 2 variations on the naming above. The first is a modifier which caters for a JDO 2.0 requirement whereby the user can specify a modifier such as "mysql", which would mean that this should search for filenames "package-mysql.jdo". The second variation is the suffix of the file. This is "jdo" by default, but JDO 2.0 has situations where "orm", or "jdoquery" are required as a suffix.
pc_class - The class/interface to retrieve the metadata file forclr - the ClassLoaderResolvermappingModifier - Any modifier for the filename for mappingmetadataFileExtension - File extension of metadata files (e.g "jdo")metadataType - Type of metadata file to loadpopulate - Whether to populate any loaded MetaData classes
public java.util.List getValidMetaDataLocationsForPackage(java.lang.String fileExtension,
java.lang.String fileModifier,
java.lang.String packageName)
fileExtension - File extension (e.g "jdo")fileModifier - Any modifier (for use when using ORM files package-mysql.orm, this is the "mysql" part)packageName - The package name to look for
public java.util.List getValidMetaDataLocationsForClass(java.lang.String fileExtension,
java.lang.String fileModifier,
java.lang.String className)
fileExtension - File extension (e.g "jdo")fileModifier - Any modifier (for use when using ORM files package-mysql.orm, this is the "mysql" part)className - The class name to look for
public InterfaceMetaData getMetaDataForInterface(java.lang.Class c,
ClassLoaderResolver clr)
getMetaDataForInterface in class MetaDataManagerc - The interface to find MetaData forclr - the ClassLoaderResolver
public boolean isPersistentInterface(java.lang.String name)
isPersistentInterface in class MetaDataManagername - Name if the interface
public boolean isPersistentInterfaceImplementation(java.lang.String interfaceName,
java.lang.String implName)
isPersistentInterfaceImplementation in class MetaDataManagerinterfaceName - Name of the persistent interfaceimplName - The implementation name
public boolean isPersistentDefinitionImplementation(java.lang.String implName)
isPersistentDefinitionImplementation in class MetaDataManagerimplName - The implementation name
public java.lang.String getImplementationNameForPersistentInterface(java.lang.String interfaceName)
getImplementationNameForPersistentInterface in class MetaDataManagerinterfaceName - The name of the persistent interface
public ClassMetaData getClassMetaDataForImplementationOfPersistentInterface(java.lang.String interfaceName)
getClassMetaDataForImplementationOfPersistentInterface in class MetaDataManagerinterfaceName - The name of the persistent interface
public void registerPersistentInterface(InterfaceMetaData imd,
java.lang.Class implClass,
ClassLoaderResolver clr)
registerPersistentInterface in class MetaDataManagerimd - MetaData for the interfaceimplClass - The implementation classclr - ClassLoader Resolver to use
public void registerImplementationOfAbstractClass(ClassMetaData cmd,
java.lang.Class implClass,
ClassLoaderResolver clr)
registerImplementationOfAbstractClass in class MetaDataManagercmd - MetaData for the abstract classimplClass - The implementation classclr - ClassLoader resolver
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||