public class JDOMetaDataManager
extends org.datanucleus.metadata.MetaDataManagerImpl
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 NucleusContext 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.
Modifier and Type | Field and Description |
---|---|
protected boolean |
allowXmlLocationsFromJDO1_0 |
protected Map<String,org.datanucleus.metadata.AbstractClassMetaData> |
classMetaDataByInterface
Map of ClassMetaData, keyed by the interface class name (for "persistent-interface"s).
|
protected org.datanucleus.metadata.xml.MetaDataParser |
metaDataParser
Parser for XML MetaData.
|
protected Map<String,org.datanucleus.metadata.AbstractClassMetaData> |
ormClassMetaDataByClass
Map of ClassMetaData from ORM files, keyed by the class name.
|
protected org.datanucleus.api.jdo.metadata.JDOMetaDataManager.MetaDataRegisterClassListener |
registerListener
Listener for persistent class initialisations (since JDO uses a discovery process).
|
allowAnnotations, allowMetaDataLoad, allowORM, allowXML, annotationManager, classesWithoutPersistenceInfo, classMetaDataByAppIdClassName, classMetaDataByClass, classMetaDataByDiscriminatorName, classMetaDataByEntityName, concreteSubclassNamesByClassName, defaultNullable, directSubclassesByClass, discriminatorLookupByRootClassName, fetchPlanMetaDataByName, fileMetaDataByURLString, listeners, nucleusContext, queryMetaDataByName, queryResultMetaDataByName, sequenceMetaDataByPackageSequence, storedProcQueryMetaDataByName, supportXMLNamespaces, tableGeneratorMetaDataByPackageSequence, updateLock, usableClassMetaDataByClass, userMetaDataNumber, utilisedFileMetaData, validateXML
Constructor and Description |
---|
JDOMetaDataManager(org.datanucleus.NucleusContext ctxt)
Constructor.
|
Modifier and Type | Method and Description |
---|---|
void |
addORMDataToClass(Class c,
org.datanucleus.ClassLoaderResolver clr)
Load up and add the O/R mapping info for the specified class to the stored JDO ClassMetaData.
|
void |
close()
Clear resources
|
org.datanucleus.metadata.ClassMetaData |
getClassMetaDataForImplementationOfPersistentInterface(String interfaceName)
Accessor for the metadata for the implementation of the specified "persistent-interface".
|
String |
getImplementationNameForPersistentInterface(String interfaceName)
Accessor for the implementation name for the specified "persistent-interface".
|
org.datanucleus.metadata.InterfaceMetaData |
getMetaDataForInterface(Class c,
org.datanucleus.ClassLoaderResolver clr)
Main accessor for the MetaData for a "persistent-interface".
|
org.datanucleus.metadata.QueryMetaData |
getMetaDataForQuery(Class cls,
org.datanucleus.ClassLoaderResolver clr,
String queryName)
Accessor for the MetaData for a named query for a class.
|
org.datanucleus.metadata.SequenceMetaData |
getMetaDataForSequence(org.datanucleus.ClassLoaderResolver clr,
String packageSequenceName)
Accessor for the MetaData for a Sequence in a package.
|
List<String> |
getValidMetaDataLocationsForClass(String fileExtension,
String fileModifier,
String className)
Method to return the valid metadata locations to contain a particular class.
|
List<String> |
getValidMetaDataLocationsForPackage(String fileExtension,
String fileModifier,
String packageName)
Method to return the valid metadata locations to contain a particular package.
|
boolean |
isPersistentDefinitionImplementation(String implName)
Convenience method to return if the passed class name is an implementation of a "persistent definition".
|
boolean |
isPersistentInterface(String name)
Convenience method to return if the passed class name is a "persistent-interface".
|
boolean |
isPersistentInterfaceImplementation(String interfaceName,
String implName)
Convenience method to return if the passed class name is an implementation of the passed "persistent-interface".
|
protected org.datanucleus.metadata.AbstractClassMetaData |
loadMetaDataForClass(Class c,
org.datanucleus.ClassLoaderResolver clr)
Load the metadata for the specified class (if available).
|
protected org.datanucleus.metadata.FileMetaData |
loadXMLMetaDataForClass(Class pc_class,
org.datanucleus.ClassLoaderResolver clr,
String mappingModifier,
String metadataFileExtension,
org.datanucleus.metadata.MetadataFileType metadataType,
boolean populate)
Method to find the Meta-Data file for a specified class.
|
protected org.datanucleus.metadata.FileMetaData |
parseFile(URL fileURL)
Utility to parse a file, using the "jdo" MetaData handler.
|
void |
registerFile(String fileURLString,
org.datanucleus.metadata.FileMetaData filemd,
org.datanucleus.ClassLoaderResolver clr)
Method to take the FileMetaData and register the relevant parts of it with the assorted caches provided.
|
void |
registerImplementationOfAbstractClass(org.datanucleus.metadata.ClassMetaData cmd,
Class implClass,
org.datanucleus.ClassLoaderResolver clr)
Method to register the metadata for an implementation of a persistent abstract class.
|
void |
registerPersistentInterface(org.datanucleus.metadata.InterfaceMetaData imd,
Class implClass,
org.datanucleus.ClassLoaderResolver clr)
Method to register a persistent interface and its implementation with the MetaData system.
|
void |
unloadMetaDataForClass(String className)
Convenience method to allow the unloading of metadata, for example where the user wants to reload a class definition
and that class maybe has different metadata with the new definition.
|
abstractClassMetaDataInitialised, addAnnotationsDataToClass, deregisterListener, getAnnotationManager, getApiAdapter, getClassesImplementingInterface, getClassesWithMetaData, getClassMetaDataWithApplicationId, getClassNameForDiscriminatorValueWithRoot, getClassNameFromDiscriminatorValue, getConcreteSubclassesForClass, getDiscriminatorValueForClass, getEnhancedMethodNamePrefix, getFileMetaData, getMetaDataForClass, getMetaDataForClass, getMetaDataForClassInternal, getMetaDataForDiscriminator, getMetaDataForEntityName, getMetaDataForFetchPlan, getMetaDataForImplementationOfReference, getMetaDataForQueryResult, getMetaDataForStoredProcQuery, getMetaDataForTableGenerator, getNamedQueryNames, getNucleusContext, getReferencedClasses, getReferencedClassMetaData, getScanner, getSubclassesForClass, hasMetaDataForClass, initialiseAbstractClassMetaData, initialiseClassMetaData, initialiseFileMetaData, initialiseFileMetaDataForUse, initialiseInterfaceMetaData, isClassPersistable, isClassWithoutPersistenceInfo, isDefaultNullable, isEnhancerField, isEnhancing, isFieldTypePersistable, loadAnnotationsForClass, loadClasses, loadFiles, loadJar, loadMetadataFiles, loadPersistenceUnit, loadUserMetaData, populateAbstractClassMetaData, populateFileMetaData, postProcessClassMetaData, processListenerLoadingCall, readMetaDataForClass, readMetaDataForMember, registerDiscriminatorValueForClass, registerFetchPlansForFile, registerListener, registerMetaDataForClass, registerNamedQuery, registerQueriesForFile, registerQueryResultMetaDataForFile, registerSequencesForFile, registerStoredProcQueriesForFile, registerTableGeneratorsForFile, setAllowAnnotations, setAllowMetaDataLoad, setAllowXML, setDefaultNullable, setValidate, setXmlNamespaceAware, supportsORM
protected boolean allowXmlLocationsFromJDO1_0
protected org.datanucleus.metadata.xml.MetaDataParser metaDataParser
protected Map<String,org.datanucleus.metadata.AbstractClassMetaData> ormClassMetaDataByClass
protected Map<String,org.datanucleus.metadata.AbstractClassMetaData> classMetaDataByInterface
protected org.datanucleus.api.jdo.metadata.JDOMetaDataManager.MetaDataRegisterClassListener registerListener
public JDOMetaDataManager(org.datanucleus.NucleusContext ctxt)
ctxt
- NucleusContext that this metadata manager operates inpublic void close()
close
in interface org.datanucleus.metadata.MetaDataManager
close
in class org.datanucleus.metadata.MetaDataManagerImpl
public void unloadMetaDataForClass(String className)
unloadMetaDataForClass
in interface org.datanucleus.metadata.MetaDataManager
unloadMetaDataForClass
in class org.datanucleus.metadata.MetaDataManagerImpl
className
- Name of the classprotected org.datanucleus.metadata.FileMetaData parseFile(URL fileURL)
parseFile
in class org.datanucleus.metadata.MetaDataManagerImpl
fileURL
- URL of the filepublic void registerFile(String fileURLString, org.datanucleus.metadata.FileMetaData filemd, org.datanucleus.ClassLoaderResolver clr)
registerFile
in interface org.datanucleus.metadata.MetaDataManager
registerFile
in class org.datanucleus.metadata.MetaDataManagerImpl
fileURLString
- URL of the metadata filefilemd
- The File MetaDataprotected org.datanucleus.metadata.AbstractClassMetaData loadMetaDataForClass(Class c, org.datanucleus.ClassLoaderResolver clr)
loadMetaDataForClass
in class org.datanucleus.metadata.MetaDataManagerImpl
c
- The classclr
- ClassLoader resolverpublic org.datanucleus.metadata.QueryMetaData getMetaDataForQuery(Class cls, org.datanucleus.ClassLoaderResolver clr, String queryName)
getMetaDataForQuery
in interface org.datanucleus.metadata.MetaDataManager
getMetaDataForQuery
in class org.datanucleus.metadata.MetaDataManagerImpl
cls
- The class which has the query defined for itclr
- the ClassLoaderResolverqueryName
- Name of the querypublic org.datanucleus.metadata.SequenceMetaData getMetaDataForSequence(org.datanucleus.ClassLoaderResolver clr, String packageSequenceName)
getMetaDataForSequence
in interface org.datanucleus.metadata.MetaDataManager
getMetaDataForSequence
in class org.datanucleus.metadata.MetaDataManagerImpl
clr
- the ClassLoaderResolverpackageSequenceName
- Fully qualified name of the sequence (inc package name)public void addORMDataToClass(Class c, org.datanucleus.ClassLoaderResolver clr)
addORMDataToClass
in interface org.datanucleus.metadata.MetaDataManager
addORMDataToClass
in class org.datanucleus.metadata.MetaDataManagerImpl
c
- The classclr
- the ClassLoaderResolverprotected org.datanucleus.metadata.FileMetaData loadXMLMetaDataForClass(Class pc_class, org.datanucleus.ClassLoaderResolver clr, String mappingModifier, String metadataFileExtension, org.datanucleus.metadata.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 classespublic List<String> getValidMetaDataLocationsForPackage(String fileExtension, String fileModifier, 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 forpublic List<String> getValidMetaDataLocationsForClass(String fileExtension, String fileModifier, 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 forpublic org.datanucleus.metadata.InterfaceMetaData getMetaDataForInterface(Class c, org.datanucleus.ClassLoaderResolver clr)
getMetaDataForInterface
in interface org.datanucleus.metadata.MetaDataManager
getMetaDataForInterface
in class org.datanucleus.metadata.MetaDataManagerImpl
c
- The interface to find MetaData forclr
- the ClassLoaderResolverpublic boolean isPersistentInterface(String name)
isPersistentInterface
in interface org.datanucleus.metadata.MetaDataManager
isPersistentInterface
in class org.datanucleus.metadata.MetaDataManagerImpl
name
- Name if the interfacepublic boolean isPersistentInterfaceImplementation(String interfaceName, String implName)
isPersistentInterfaceImplementation
in interface org.datanucleus.metadata.MetaDataManager
isPersistentInterfaceImplementation
in class org.datanucleus.metadata.MetaDataManagerImpl
interfaceName
- Name of the persistent interfaceimplName
- The implementation namepublic boolean isPersistentDefinitionImplementation(String implName)
isPersistentDefinitionImplementation
in interface org.datanucleus.metadata.MetaDataManager
isPersistentDefinitionImplementation
in class org.datanucleus.metadata.MetaDataManagerImpl
implName
- The implementation namepublic String getImplementationNameForPersistentInterface(String interfaceName)
getImplementationNameForPersistentInterface
in interface org.datanucleus.metadata.MetaDataManager
getImplementationNameForPersistentInterface
in class org.datanucleus.metadata.MetaDataManagerImpl
interfaceName
- The name of the persistent interfacepublic org.datanucleus.metadata.ClassMetaData getClassMetaDataForImplementationOfPersistentInterface(String interfaceName)
getClassMetaDataForImplementationOfPersistentInterface
in interface org.datanucleus.metadata.MetaDataManager
getClassMetaDataForImplementationOfPersistentInterface
in class org.datanucleus.metadata.MetaDataManagerImpl
interfaceName
- The name of the persistent interfacepublic void registerPersistentInterface(org.datanucleus.metadata.InterfaceMetaData imd, Class implClass, org.datanucleus.ClassLoaderResolver clr)
registerPersistentInterface
in interface org.datanucleus.metadata.MetaDataManager
registerPersistentInterface
in class org.datanucleus.metadata.MetaDataManagerImpl
imd
- MetaData for the interfaceimplClass
- The implementation classclr
- ClassLoader Resolver to usepublic void registerImplementationOfAbstractClass(org.datanucleus.metadata.ClassMetaData cmd, Class implClass, org.datanucleus.ClassLoaderResolver clr)
registerImplementationOfAbstractClass
in interface org.datanucleus.metadata.MetaDataManager
registerImplementationOfAbstractClass
in class org.datanucleus.metadata.MetaDataManagerImpl
cmd
- MetaData for the abstract classimplClass
- The implementation classclr
- ClassLoader resolverCopyright © 2020. All rights reserved.