|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.datanucleus.metadata.MetaDataManager
public abstract class MetaDataManager
Manager of MetaData information in DataNucleus having scope of an ObjectManagerFactory. Each PMF/EMF will effectively have a single MetaDataManager handling all XML/Annotations MetaData.
A MetaDataManager can be "initialised" to start with particular MetaData. This is typically performed when the operation has a "persistence-unit", which defines the classes/jars/mapping-files to use. Alternatively, it can be initialised using a set of classes and mapping-files (for use by SchemaTool and the Enhancer when specifying the files as input).
Acts as a registry of 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.
Maintains a list of all classes that have been checked for MetaData and don't have any available. This avoids the needs to look up MetaData multiple times finding the same result. Currently this list is for all ClassMetaData objects keyed by the class name.
TODO Update MetaDataManager to be able to share ClassMetaData with other MetaDataManager so we need a central (singleton/static) registry that allows such communication.
| Field Summary | |
|---|---|
protected AnnotationManager |
annotationManager
Manager for annotations. |
protected java.util.Collection |
classesWithoutPersistenceInfo
Cache of class names that are known to not have MetaData/annotations. |
protected java.util.Map |
classMetaDataByClass
Map of ClassMetaData, keyed by the class name. |
protected java.util.Map |
classMetaDataByEntityName
Map of ClassMetaData, keyed by the JPA "entity name". |
protected java.util.Map |
directSubclassesByClass
Map |
protected java.util.Map |
fetchPlanMetaDataByName
Map of FetchPlanMetaData, keyed by the fetch plan name. |
protected java.util.Map |
fileMetaDataByURLString
Map of FileMetaData for the parsed files, keyed by the URL string. |
protected boolean |
initialised
Flag for initialisation state when starting using a "persistence-unit". |
protected java.util.List |
listeners
EventListeners. |
protected static Localiser |
LOCALISER
Localiser for messages. |
protected MetaDataParser |
metaDataParser
Parser for MetaData. |
protected OMFContext |
omfContext
The ObjectManagerFactory Context that this metadata manager is operating in. |
protected java.util.Map |
queryMetaDataByName
Map of QueryMetaData, keyed by the (class name + query name). |
protected java.util.Map |
queryResultMetaDataByName
Map of QueryResultMetaData keyed by the name. |
protected java.util.Map |
sequenceMetaDataByPackageSequence
Map of SequenceMetaData, keyed by the package name and sequence name. |
protected boolean |
supportsORM
Whether the MetaData manager supports ORM concepts and metadata. |
protected java.util.Map |
tableGeneratorMetaDataByPackageSequence
Map of TableGeneratorMetaData, keyed by the package name and generator name. |
protected java.util.ArrayList |
utilisedFileMetaData
Temporary list of the FileMetaData objects utilised in this call for metadata. |
protected boolean |
validateMetaData
Flag whether we should validate the metadata files when parsing. |
| Constructor Summary | |
|---|---|
MetaDataManager(OMFContext ctxt)
Constructor, specifying the OMFContext used. |
|
| Method Summary | |
|---|---|
protected void |
addORMDataToClass(java.lang.Class c,
ClassLoaderResolver clr)
Load up and add any O/R mapping info for the specified class to the stored ClassMetaData (if supported). |
void |
close()
Clear resources |
ApiAdapter |
getApiAdapter()
Accessor for the API adapter being used by this MetaDataManager. |
java.lang.String[] |
getClassesImplementingInterface(java.lang.String interfaceName,
ClassLoaderResolver clr)
Accessor for the list of names of classes that are declared to implement the specified interface (using <implements> in the MetaData). |
java.util.Collection |
getClassesWithMetaData()
Accessor for the names of the classes with MetaData currently registered with this manager. |
ClassMetaData |
getClassMetaDataForImplementationOfPersistentInterface(java.lang.String interfaceName)
Accessor for the metadata for the implementation of the specified "persistent-interface". |
FileMetaData[] |
getFileMetaData()
Accessor for all FileMetaData currently managed here. |
java.lang.String |
getImplementationNameForPersistentInterface(java.lang.String interfaceName)
Accessor for the implementation name for the specified "persistent-interface". |
java.util.List |
getListeners()
Get the event listeners |
MetaDataFactory |
getMetaDataFactory()
Accessor for a factory for MetaData objects. |
AbstractClassMetaData |
getMetaDataForClass(java.lang.Class c,
ClassLoaderResolver clr)
Main accessor for the MetaData for a class. |
AbstractClassMetaData |
getMetaDataForClass(java.lang.String className,
ClassLoaderResolver clr)
Accessor for the MetaData for a class given the name and a loader. |
abstract AbstractClassMetaData |
getMetaDataForClassInternal(java.lang.Class c,
ClassLoaderResolver clr)
Internal convenience method for accessing the MetaData for a class. |
AbstractClassMetaData |
getMetaDataForEntityName(java.lang.String entityName)
Accessor for the MetaData for a class given the "entity-name". |
FetchPlanMetaData |
getMetaDataForFetchPlan(java.lang.String name)
Accessor for the MetaData for a named fetch plan. |
ClassMetaData |
getMetaDataForImplementationOfReference(java.lang.Class referenceClass,
java.lang.Object implValue,
ClassLoaderResolver clr)
Accessor for the MetaData for an implementation of a reference type. |
InterfaceMetaData |
getMetaDataForInterface(java.lang.Class c,
ClassLoaderResolver clr)
Accessor for the MetaData for an interface. |
AbstractMemberMetaData |
getMetaDataForMember(java.lang.Class c,
ClassLoaderResolver clr,
java.lang.String memberName)
Accessor for the MetaData for a field/property of a class. |
AbstractMemberMetaData |
getMetaDataForMember(java.lang.String className,
java.lang.String memberName,
ClassLoaderResolver clr)
Accessor for the MetaData for a field/property of a class. |
PersistenceUnitMetaData |
getMetaDataForPersistenceUnit(java.lang.String unitName)
Method to parse all available "persistence.xml" files and return the metadata for the persistence unit with the specified name. |
QueryMetaData |
getMetaDataForQuery(java.lang.Class cls,
ClassLoaderResolver clr,
java.lang.String queryName)
Accessor for the MetaData for a named query for a class. |
QueryResultMetaData |
getMetaDataForQueryResult(java.lang.String name)
Accessor for the MetaData for a QueryResult. |
SequenceMetaData |
getMetaDataForSequence(ClassLoaderResolver clr,
java.lang.String seqName)
Accessor for the MetaData for a Sequence in a package. |
TableGeneratorMetaData |
getMetaDataForTableGenerator(ClassLoaderResolver clr,
java.lang.String genName)
Accessor for the MetaData for a TableGenerator in a package. |
OMFContext |
getOMFContext()
Accessor for the ObjectManagerFactory Context that this manager is running in. |
java.util.List |
getReferencedClassMetaData(AbstractClassMetaData cmd,
java.lang.String dba_vendor_id,
ClassLoaderResolver clr)
Utility to return all ClassMetaData that is referenced from the supplier class. |
java.lang.String[] |
getSubclassesForClass(java.lang.String className,
boolean includeDescendents)
Accessor for the subclasses of a particular class |
boolean |
hasMetaDataForClass(java.lang.String className)
Convenience method to check if we have metadata present for the specified class. |
FileMetaData[] |
initialise(PersistenceUnitMetaData pumd,
ClassLoaderResolver clr)
Initialisation method to define the "persistence-unit" being handled by this MetaDataManager. |
FileMetaData[] |
initialise(java.lang.String[] metadataFiles,
java.lang.String[] classNames,
ClassLoaderResolver clr)
Initialisation method to define the initial metadata files and class names being handled by this MetaDataManager. |
FileMetaData[] |
initialise(java.lang.String persistenceUnitName,
ClassLoaderResolver clr)
Initialisation method to define the "persistence-unit" being handled by this MetaDataManager. |
protected void |
initialiseAbstractClassMetaData(AbstractClassMetaData acmd)
Convenience method to initialise the MetaData for the specified class/interface. |
protected void |
initialiseClassMetaData(ClassMetaData cmd,
java.lang.Class cls,
ClassLoaderResolver clr)
Utility to initialise the MetaData for a class, using the specified class. |
protected void |
initialiseFileMetaData(FileMetaData filemd,
ClassLoaderResolver clr,
java.lang.ClassLoader primary)
Initialise all classes/interfaces in a Meta-Data file. |
protected void |
initialiseInterfaceMetaData(InterfaceMetaData imd,
ClassLoaderResolver clr,
java.lang.ClassLoader primary)
Utility to initialise the MetaData for a interface, using the specified class. |
boolean |
isClassPersistable(java.lang.String className)
Convenience method to return if the specified class is a known persistable class. |
protected boolean |
isClassWithoutPersistenceInfo(java.lang.String className)
Accessor for whether a class doesn't have MetaData or annotations. |
boolean |
isEnhancing()
Accessor for whether we are managing the enhancement process. |
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 |
loadAnnotationsForClass(java.lang.Class cls,
ClassLoaderResolver clr,
boolean register,
boolean populate)
Method to load the annotations for the specified class and return the FileMetaData containing the class. |
protected void |
logConfiguration()
Method to log the configuration of this manager. |
protected abstract FileMetaData |
parseFile(java.net.URL file_url)
Utility to parse a MetaData file. |
PersistenceFileMetaData[] |
parsePersistenceFiles()
Method to parse the available "persistence.xml" files returning the metadata for all found. |
protected void |
populateAbstractClassMetaData(AbstractClassMetaData acmd,
ClassLoaderResolver clr,
java.lang.ClassLoader loader)
Convenience method to populate the MetaData for the specified class/interface. |
protected void |
populateFileMetaData(FileMetaData filemd,
ClassLoaderResolver clr,
java.lang.ClassLoader primary)
Convenience method to populate all classes/interfaces in a Meta-Data file. |
AbstractClassMetaData |
readMetaDataForClass(java.lang.String className)
Method to access the (already known) metadata for the specified class. |
AbstractMemberMetaData |
readMetaDataForMember(java.lang.String className,
java.lang.String memberName)
Method to access the (already known) metadata for the field/property of the specified class. |
protected void |
registerFetchPlansForFile(FileMetaData filemd)
Convenience method to register all FetchPlans found in the passed file. |
abstract 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. |
protected void |
registerMetaDataForClass(java.lang.String fullClassName,
AbstractClassMetaData cmd)
Internal method called when we want to register the metadata for a class/interface. |
void |
registerPersistentInterface(InterfaceMetaData imd,
java.lang.Class implClass,
ClassLoaderResolver clr)
Method to register a persistent interface and its implementation with the MetaData system. |
protected void |
registerQueriesForFile(FileMetaData filemd)
Convenience method to register all queries found in the passed file. |
protected void |
registerQueryResultMetaDataForFile(FileMetaData filemd)
Convenience method to register all table generators found in the passed file. |
protected void |
registerSequencesForFile(FileMetaData filemd)
Convenience method to register all sequences found in the passed file. |
protected void |
registerTableGeneratorsForFile(FileMetaData filemd)
Convenience method to register all table generators found in the passed file. |
void |
setMetaDataFactory(MetaDataFactory factory)
Method to set the Factory for MetaData objects. |
void |
setValidate(boolean validate)
Mutator for whether to validate the MetaData files for XML compliance. |
boolean |
supportsORM()
Accessor for whether the MetaData manager supports ORM concepts and metadata. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
protected static final Localiser LOCALISER
protected OMFContext omfContext
protected AnnotationManager annotationManager
protected MetaDataParser metaDataParser
protected boolean validateMetaData
protected java.util.Collection classesWithoutPersistenceInfo
protected java.util.Map fileMetaDataByURLString
protected java.util.Map classMetaDataByClass
protected java.util.Map classMetaDataByEntityName
protected java.util.Map directSubclassesByClass
protected java.util.Map queryMetaDataByName
protected java.util.Map fetchPlanMetaDataByName
protected java.util.Map sequenceMetaDataByPackageSequence
protected java.util.Map tableGeneratorMetaDataByPackageSequence
protected java.util.Map queryResultMetaDataByName
protected boolean initialised
protected java.util.List listeners
protected boolean supportsORM
protected java.util.ArrayList utilisedFileMetaData
| Constructor Detail |
|---|
public MetaDataManager(OMFContext ctxt)
ctxt - OMF Context that this metadata manager operates in| Method Detail |
|---|
public boolean supportsORM()
public java.util.List getListeners()
public MetaDataFactory getMetaDataFactory()
public void setMetaDataFactory(MetaDataFactory factory)
factory - The factoryprotected void logConfiguration()
public FileMetaData[] initialise(java.lang.String[] metadataFiles,
java.lang.String[] classNames,
ClassLoaderResolver clr)
metadataFiles - The metadata filesclassNames - The class namesclr - ClassLoader Resolver
NucleusUserException - (with nested exceptions) if an error occurs parsing the files
public FileMetaData[] initialise(java.lang.String persistenceUnitName,
ClassLoaderResolver clr)
persistenceUnitName - name of the "persistence-unit"clr - ClassLoader Resolver
NucleusUserException - if an error occurs parsing the persistence-unit info
public FileMetaData[] initialise(PersistenceUnitMetaData pumd,
ClassLoaderResolver clr)
pumd - The MetaData for this "persistence-unit"clr - ClassLoader Resolver
NucleusUserException - if an error occurs parsing the persistence-unit infopublic void setValidate(boolean validate)
validate - Whether to validatepublic OMFContext getOMFContext()
public ApiAdapter getApiAdapter()
public void close()
public boolean isEnhancing()
public boolean isClassPersistable(java.lang.String className)
className - Name of the class
public FileMetaData[] getFileMetaData()
public java.util.Collection getClassesWithMetaData()
public boolean hasMetaDataForClass(java.lang.String className)
className - The name of the class to check
protected boolean isClassWithoutPersistenceInfo(java.lang.String className)
className - Name of the class
public AbstractClassMetaData getMetaDataForClass(java.lang.String className,
ClassLoaderResolver clr)
className - Name of the class to find MetaData forclr - ClassLoaderResolver resolver for use in loading the class.
public AbstractClassMetaData getMetaDataForClass(java.lang.Class c,
ClassLoaderResolver clr)
c - The class to find MetaData forclr - the ClassLoaderResolver
public AbstractClassMetaData getMetaDataForEntityName(java.lang.String entityName)
entityName - The entity name to find MetaData for
public AbstractClassMetaData readMetaDataForClass(java.lang.String className)
className - Name of the class
public AbstractMemberMetaData readMetaDataForMember(java.lang.String className,
java.lang.String memberName)
className - Name of the classmemberName - Name of the field/property
public abstract AbstractClassMetaData getMetaDataForClassInternal(java.lang.Class c,
ClassLoaderResolver clr)
c - The class to find MetaData for
protected void registerMetaDataForClass(java.lang.String fullClassName,
AbstractClassMetaData cmd)
fullClassName - Name of the classcmd - The metadata
public java.lang.String[] getSubclassesForClass(java.lang.String className,
boolean includeDescendents)
className - Name of the class that we want the known subclasses for.includeDescendents - Whether to include subclasses of subclasses etc
public java.lang.String[] getClassesImplementingInterface(java.lang.String interfaceName,
ClassLoaderResolver clr)
interfaceName - Name of the interfaceclr - The ClassLoaderResolver
protected void addORMDataToClass(java.lang.Class c,
ClassLoaderResolver clr)
c - The classclr - ClassLoader resolver
public ClassMetaData getMetaDataForImplementationOfReference(java.lang.Class referenceClass,
java.lang.Object implValue,
ClassLoaderResolver clr)
referenceClass - The reference class to find MetaData forimplValue - Object of an implementation class, to return if possible (null=ignore)clr - ClassLoader resolver
public AbstractMemberMetaData getMetaDataForMember(java.lang.String className,
java.lang.String memberName,
ClassLoaderResolver clr)
className - The name of the class owning the field/propertymemberName - The name of the field to find MetaData forclr - ClassLoaderResolver resolver for any loading of classes
public AbstractMemberMetaData getMetaDataForMember(java.lang.Class c,
ClassLoaderResolver clr,
java.lang.String memberName)
c - The class owning the field/propertyclr - the ClassLoaderResolvermemberName - The name of the field/property to find MetaData for
public QueryMetaData getMetaDataForQuery(java.lang.Class cls,
ClassLoaderResolver clr,
java.lang.String queryName)
cls - The class which has the query defined for itclr - the ClassLoaderResolverqueryName - Name of the query
public FetchPlanMetaData getMetaDataForFetchPlan(java.lang.String name)
name - Name of the fetch plan
public SequenceMetaData getMetaDataForSequence(ClassLoaderResolver clr,
java.lang.String seqName)
clr - the ClassLoaderResolverseqName - Name of the package (fully qualified if necessary)
public TableGeneratorMetaData getMetaDataForTableGenerator(ClassLoaderResolver clr,
java.lang.String genName)
clr - the ClassLoaderResolvergenName - Name of the package (fully qualified if necessary)
public QueryResultMetaData getMetaDataForQueryResult(java.lang.String name)
name - Name of the query result
public InterfaceMetaData getMetaDataForInterface(java.lang.Class c,
ClassLoaderResolver clr)
c - The interface to find MetaData forclr - the ClassLoaderResolver
public boolean isPersistentInterface(java.lang.String name)
name - Name if the interface
public boolean isPersistentInterfaceImplementation(java.lang.String interfaceName,
java.lang.String implName)
interfaceName - Name of the persistent interfaceimplName - The implementation name
public boolean isPersistentDefinitionImplementation(java.lang.String implName)
implName - The implementation name
public java.lang.String getImplementationNameForPersistentInterface(java.lang.String interfaceName)
interfaceName - The name of the persistent interface
public ClassMetaData getClassMetaDataForImplementationOfPersistentInterface(java.lang.String interfaceName)
interfaceName - The name of the persistent interface
public void registerPersistentInterface(InterfaceMetaData imd,
java.lang.Class implClass,
ClassLoaderResolver clr)
imd - MetaData for the interfaceimplClass - The implementation classclr - ClassLoader Resolver to use
public void registerImplementationOfAbstractClass(ClassMetaData cmd,
java.lang.Class implClass,
ClassLoaderResolver clr)
cmd - MetaData for the abstract classimplClass - The implementation classclr - ClassLoader resolverpublic PersistenceUnitMetaData getMetaDataForPersistenceUnit(java.lang.String unitName)
unitName - Name of the persistence-unit
NucleusUserException - if no "persistence.xml" files are foundpublic PersistenceFileMetaData[] parsePersistenceFiles()
protected abstract FileMetaData parseFile(java.net.URL file_url)
file_url - URL of the file
public abstract void registerFile(java.lang.String fileURLString,
FileMetaData filemd,
ClassLoaderResolver clr)
fileURLString - URL of the metadata filefilemd - The File MetaDataprotected void registerSequencesForFile(FileMetaData filemd)
filemd - MetaData for the fileprotected void registerTableGeneratorsForFile(FileMetaData filemd)
filemd - MetaData for the fileprotected void registerQueryResultMetaDataForFile(FileMetaData filemd)
filemd - MetaData for the fileprotected void registerQueriesForFile(FileMetaData filemd)
filemd - MetaData for the fileprotected void registerFetchPlansForFile(FileMetaData filemd)
filemd - MetaData for the file
protected void populateFileMetaData(FileMetaData filemd,
ClassLoaderResolver clr,
java.lang.ClassLoader primary)
filemd - The MetaData fileclr - Class Loader to use in populationprimary - the primary ClassLoader to use (or null)
protected void initialiseFileMetaData(FileMetaData filemd,
ClassLoaderResolver clr,
java.lang.ClassLoader primary)
filemd - the FileMetaDataclr - ClassLoader resolver to useprimary - the primary ClassLoader to use (or null)
protected void initialiseClassMetaData(ClassMetaData cmd,
java.lang.Class cls,
ClassLoaderResolver clr)
cmd - The classes metadatacls - The class to use as a basis for initialisationclr - ClassLoader resolver to use
NucleusUserException - if the class is not enhanced
protected void initialiseInterfaceMetaData(InterfaceMetaData imd,
ClassLoaderResolver clr,
java.lang.ClassLoader primary)
imd - The interface metadataclr - The loader of the interfaceprimary - the primary ClassLoader to use (or null)
protected FileMetaData loadAnnotationsForClass(java.lang.Class cls,
ClassLoaderResolver clr,
boolean register,
boolean populate)
cls - The classclr - ClassLoader resolverregister - Whether to register the datapopulate - Whether to populate the data
protected void populateAbstractClassMetaData(AbstractClassMetaData acmd,
ClassLoaderResolver clr,
java.lang.ClassLoader loader)
acmd - MetaDataclr - ClassLoader resolverloader - The primary class loaderprotected void initialiseAbstractClassMetaData(AbstractClassMetaData acmd)
acmd - MetaData
public java.util.List getReferencedClassMetaData(AbstractClassMetaData cmd,
java.lang.String dba_vendor_id,
ClassLoaderResolver clr)
cmd - The origin class's MetaData.dba_vendor_id - The Vendor id of the database adapter in use.
(Used in handling "views" support)clr - ClassLoaderResolver resolver for loading any classes.
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||