Class MetaDataRepository

java.lang.Object
org.apache.openjpa.meta.MetaDataRepository
All Implemented Interfaces:
Serializable, PCRegistry.RegisterClassListener, Configurable, Closeable, MetaDataModes
Direct Known Subclasses:
MappingRepository

public class MetaDataRepository extends Object implements PCRegistry.RegisterClassListener, Configurable, Closeable, MetaDataModes, Serializable
Repository of and factory for persistent metadata.
Since:
0.3.0
Author:
Abe White, Steve Kim (query metadata)
See Also:
  • Field Details

    • VALIDATE_NONE

      public static final int VALIDATE_NONE
      Constant to not validate any metadata.
      See Also:
    • VALIDATE_META

      public static final int VALIDATE_META
      Bit flag to validate metadata.
      See Also:
    • VALIDATE_MAPPING

      public static final int VALIDATE_MAPPING
      Bit flag to validate mappings.
      See Also:
    • VALIDATE_UNENHANCED

      public static final int VALIDATE_UNENHANCED
      Bit flag to validate unenhanced metadata only.
      See Also:
    • VALIDATE_RUNTIME

      public static final int VALIDATE_RUNTIME
      Bit flag for runtime validation. Requires that all classes are enhanced, and performs extra field resolution steps.
      See Also:
    • EMPTY_CLASSES

      protected static final Class<?>[] EMPTY_CLASSES
    • EMPTY_NON_PERSISTENT

      protected static final NonPersistentMetaData[] EMPTY_NON_PERSISTENT
    • EMPTY_METAS

      protected final ClassMetaData[] EMPTY_METAS
    • EMPTY_FIELDS

      protected final FieldMetaData[] EMPTY_FIELDS
    • EMPTY_ORDERS

      protected final Order[] EMPTY_ORDERS
    • EMPTY_XMLMETAS

      protected final XMLMetaData[] EMPTY_XMLMETAS
    • _preload

      protected boolean _preload
    • _preloadComplete

      protected boolean _preloadComplete
    • _locking

      protected boolean _locking
  • Constructor Details

    • MetaDataRepository

      public MetaDataRepository()
      Default constructor. Configure via Configurable.
  • Method Details

    • getConfiguration

      public OpenJPAConfiguration getConfiguration()
      Return the configuration for the repository.
    • getLog

      public Log getLog()
      Return the metadata log.
    • getMetaDataFactory

      public MetaDataFactory getMetaDataFactory()
      The I/O used to load metadata.
    • setMetaDataFactory

      public void setMetaDataFactory(MetaDataFactory factory)
      The I/O used to load metadata.
    • getValidate

      public int getValidate()
      The metadata validation level. Defaults to VALIDATE_META | VALIDATE_UNENHANCED.
    • setValidate

      public void setValidate(int validate)
      The metadata validation level. Defaults to VALIDATE_META | VALIDATE_UNENHANCED.
    • setValidate

      public void setValidate(int validate, boolean on)
      The metadata validation level. Defaults to VALIDATE_META | VALIDATE_MAPPING | VALIDATE_UNENHANCED.
    • getResolve

      public int getResolve()
      The metadata resolution mode. Defaults to MODE_META | MODE_MAPPING.
    • setResolve

      public void setResolve(int mode)
      The metadata resolution mode. Defaults to MODE_META | MODE_MAPPING.
    • setResolve

      public void setResolve(int mode, boolean on)
      The metadata resolution mode. Defaults to MODE_META | MODE_MAPPING.
    • getSourceMode

      public int getSourceMode()
      The source mode determining what metadata to load. Defaults to MODE_META | MODE_MAPPING | MODE_QUERY.
    • setSourceMode

      public void setSourceMode(int mode)
      The source mode determining what metadata to load. Defaults to MODE_META | MODE_MAPPING | MODE_QUERY.
    • setSourceMode

      public void setSourceMode(int mode, boolean on)
      The source mode determining what metadata to load. Defaults to MODE_META | MODE_MAPPING | MODE_QUERY.
    • getPreload

      public boolean getPreload()
      Sets whether this repository will load all known persistent classes at initialization. Defaults to false.
    • setPreload

      public void setPreload(boolean l)
      Sets whether this repository will load all known persistent classes at initialization. Defaults to false.
    • preload

      public void preload()
      If the openjpa.MetaDataRepository plugin value Preload=true is set, this method will load all MetaData for all persistent classes and will remove locking from this class.
    • getMetaData

      public ClassMetaData getMetaData(Class<?> cls, ClassLoader envLoader, boolean mustExist)
      Return the metadata for the given class.
      Parameters:
      cls - the class to retrieve metadata for
      envLoader - the environmental class loader, if any
      mustExist - if true, throws a MetaDataException if no metadata is found
    • getMetaData

      public ClassMetaData getMetaData(String alias, ClassLoader envLoader, boolean mustExist)
      Return the metadata for the given alias name.
      Parameters:
      alias - the alias to class to retrieve metadata for
      envLoader - the environmental class loader, if any
      mustExist - if true, throws a MetaDataException if no metadata is found
      See Also:
    • getClosestAliasName

      public String getClosestAliasName(String alias)
      Returns:
      the nearest match to the specified alias name
      Since:
      1.1.0
    • getAliasNames

      public Collection<String> getAliasNames()
      Returns:
      the registered alias names
      Since:
      1.1.0
    • prepareMapping

      protected void prepareMapping(ClassMetaData meta)
      Prepare metadata for mapping resolution. This method might map parts of the metadata that don't rely on other classes being mapped, but that other classes might rely on during their own mapping (for example, primary key fields). By default, this method only calls ClassMetaData.defineSuperclassFields(boolean).
    • getMetaDatas

      public ClassMetaData[] getMetaDatas()
      Return all the metadata instances currently in the repository.
    • getCachedMetaData

      public ClassMetaData getCachedMetaData(Class<?> cls)
      Return the cached metadata for the given class, without any resolution. Return null if none.
    • addMetaData

      public ClassMetaData addMetaData(Class<?> cls)
      Create a new metadata, populate it with default information, add it to the repository, and return it. Use the default access type.
    • addMetaData

      public ClassMetaData addMetaData(Class<?> cls, int access)
      Create a new metadata, populate it with default information, add it to the repository, and return it.
      Parameters:
      access - the access type to use in populating metadata
    • addMetaData

      public ClassMetaData addMetaData(Class<?> cls, int access, boolean ignoreTransient)
      Create a new metadata, populate it with default information, add it to the repository, and return it.
      Parameters:
      access - the access type to use in populating metadata
    • newClassMetaData

      protected ClassMetaData newClassMetaData(Class<?> type)
      Create a new class metadata instance.
    • newClassMetaDataArray

      protected ClassMetaData[] newClassMetaDataArray(int length)
      Create a new array of the proper class metadata subclass.
    • newFieldMetaData

      protected FieldMetaData newFieldMetaData(String name, Class<?> type, ClassMetaData owner)
      Create a new field metadata instance.
    • newFieldMetaDataArray

      protected FieldMetaData[] newFieldMetaDataArray(int length)
      Create a new array of the proper field metadata subclass.
    • newXMLClassMetaDataArray

      protected XMLMetaData[] newXMLClassMetaDataArray(int length)
      Create a new array of the proper xml class metadata subclass.
    • newEmbeddedClassMetaData

      protected ClassMetaData newEmbeddedClassMetaData(ValueMetaData owner)
      Create a new embedded class metadata instance.
    • newValueMetaData

      protected ValueMetaData newValueMetaData(FieldMetaData owner)
      Create a new value metadata instance.
    • newOrder

      protected Order newOrder(FieldMetaData owner, String name, boolean asc)
    • getOrderByField

      public FieldMetaData getOrderByField(ClassMetaData meta, String orderBy)
    • newValueOrder

      protected Order newValueOrder(FieldMetaData owner, boolean asc)
      Order by the field value.
    • newRelatedFieldOrder

      protected Order newRelatedFieldOrder(FieldMetaData owner, FieldMetaData rel, boolean asc)
      Order by a field of the related type.
    • newOrderArray

      protected Order[] newOrderArray(int size)
      Create an array of orders of the given size.
    • removeMetaData

      public boolean removeMetaData(ClassMetaData meta)
      Remove a metadata instance from the repository.
      Returns:
      true if removed, false if not in this repository
    • removeMetaData

      public boolean removeMetaData(Class<?> cls)
      Remove a metadata instance from the repository.
      Returns:
      true if removed, false if not in this repository
    • getMetaData

      public ClassMetaData getMetaData(Object oid, ClassLoader envLoader, boolean mustExist)
      Return the least-derived class metadata for the given application identity object.
      Parameters:
      oid - the oid to get the metadata for
      envLoader - the environmental class loader, if any
      mustExist - if true, throws a MetaDataException if no metadata is found
    • getImplementorMetaDatas

      public ClassMetaData[] getImplementorMetaDatas(Class<?> cls, ClassLoader envLoader, boolean mustExist)
      Return all least-derived metadatas with some mapped assignable type that implement the given class.
      Parameters:
      cls - the class or interface to retrieve implementors for
      envLoader - the environmental class loader, if any
      mustExist - if true, throws a MetaDataException if no metadata is found
    • getPersistenceAware

      public NonPersistentMetaData getPersistenceAware(Class<?> cls)
      Gets the metadata corresponding to the given persistence-aware class. Returns null, if the given class is not registered as persistence-aware.
    • skipMetadata

      public boolean skipMetadata(Class<?> cls)
    • getPersistenceAwares

      public NonPersistentMetaData[] getPersistenceAwares()
      Gets all the metadatas for persistence-aware classes
      Returns:
      empty array if no class has been registered as pers-aware
    • addPersistenceAware

      public NonPersistentMetaData addPersistenceAware(Class<?> cls)
      Add the given class as persistence-aware.
      Parameters:
      cls - non-null and must not alreaddy be added as persitence-capable
    • removePersistenceAware

      public boolean removePersistenceAware(Class<?> cls)
      Remove a persitence-aware class from the repository
      Returns:
      true if removed
    • getNonMappedInterface

      public NonPersistentMetaData getNonMappedInterface(Class<?> iface)
      Gets the metadata corresponding to the given non-mapped interface. Returns null, if the given interface is not registered as persistence-aware.
    • getNonMappedInterfaces

      public NonPersistentMetaData[] getNonMappedInterfaces()
      Gets the corresponding metadatas for all registered, non-mapped interfaces
      Returns:
      empty array if no non-mapped interface has been registered.
    • addNonMappedInterface

      public NonPersistentMetaData addNonMappedInterface(Class<?> iface)
      Add the given non-mapped interface to the repository.
      Parameters:
      iface - the non-mapped interface
    • removeNonMappedInterface

      public boolean removeNonMappedInterface(Class<?> iface)
      Remove a non-mapped interface from the repository
      Returns:
      true if removed
    • clear

      public void clear()
      Clear the cache of parsed metadata. This method also clears the internal MetaDataFactory's cache.
    • getPersistentTypeNames

      public Set<String> getPersistentTypeNames(boolean devpath, ClassLoader envLoader)
      Return the set of configured persistent classes, or null if the user did not configure any.
      Parameters:
      devpath - if true, search for metadata files in directories in the classpath if no classes are configured explicitly
      envLoader - the class loader to use, or null for default
    • loadPersistentTypes

      public Collection<Class<?>> loadPersistentTypes(boolean devpath, ClassLoader envLoader)
      Load the persistent classes named in configuration. This ensures that all subclasses and application identity classes of each type are known in advance, without having to rely on the application loading the classes before performing operations that might involve them.
      Parameters:
      devpath - if true, search for metadata files in directories in the classpath if the no classes are configured explicitly
      envLoader - the class loader to use, or null for default
      Returns:
      the loaded classes, or empty collection if none
    • loadPersistentTypes

      public Collection<Class<?>> loadPersistentTypes(boolean devpath, ClassLoader envLoader, boolean mustExist)
      Load the persistent classes named in configuration. This ensures that all subclasses and application identity classes of each type are known in advance, without having to rely on the application loading the classes before performing operations that might involve them.
      Parameters:
      devpath - if true, search for metadata files in directories in the classpath if the no classes are configured explicitly
      envLoader - the class loader to use, or null for default
      mustExist - if true then empty list of classes or any unloadable but specified class will raise an exception.
      Returns:
      the loaded classes, or empty collection if none
    • register

      public void register(Class<?> cls)
      Specified by:
      register in interface PCRegistry.RegisterClassListener
    • registerAlias

      public void registerAlias(String alias, Class<?> cls)
    • setMetaModel

      public void setMetaModel(Class<?> m2)
      Puts the meta class corresponding to the given entity class.
    • setMetaModel

      public void setMetaModel(ClassMetaData meta, Class<?> m2)
      Puts the meta class corresponding to the given persistent class.
    • getMetaModel

      public Class<?> getMetaModel(ClassMetaData meta, boolean load)
      Gets the meta class corresponding to the given persistent class.
    • getMetaModel

      public Class<?> getMetaModel(Class<?> entity, boolean load)
      Gets the meta class corresponding to the given class. If load is false, returns the meta class if has been set for the given persistent class earlier. If the load is true then also attempts to apply the current naming policy to derive meta class name and attempts to load the meta class.
    • setConfiguration

      public void setConfiguration(Configuration conf)
      Description copied from interface: Configurable
      Invoked prior to setting bean properties.
      Specified by:
      setConfiguration in interface Configurable
    • startConfiguration

      public void startConfiguration()
      Description copied from interface: Configurable
      Invoked before bean property configuration is begun on this object.
      Specified by:
      startConfiguration in interface Configurable
    • endConfiguration

      public void endConfiguration()
      Description copied from interface: Configurable
      Invoked upon completion of bean property configuration for this object.
      Specified by:
      endConfiguration in interface Configurable
    • getQueryMetaData

      public QueryMetaData getQueryMetaData(Class<?> cls, String name, ClassLoader envLoader, boolean mustExist)
      Return query metadata for the given class, name, and classloader.
    • getQueryMetaDatas

      public QueryMetaData[] getQueryMetaDatas()
      Return the cached query metadata.
    • getCachedQueryMetaData

      public QueryMetaData getCachedQueryMetaData(Class<?> cls, String name)
    • getCachedQueryMetaData

      public QueryMetaData getCachedQueryMetaData(String name)
      Return the cached query metadata for the given name.
    • addQueryMetaData

      public QueryMetaData addQueryMetaData(Class<?> cls, String name)
      Add a new query metadata to the repository and return it.
    • addQueryMetaData

      public QueryMetaData addQueryMetaData(QueryMetaData meta)
    • newQueryMetaData

      public QueryMetaData newQueryMetaData(Class<?> cls, String name)
      Create a new query metadata instance.
    • removeQueryMetaData

      public boolean removeQueryMetaData(QueryMetaData meta)
      Remove the given query metadata from the repository.
    • removeQueryMetaData

      public boolean removeQueryMetaData(Class<?> cls, String name)
      Remove query metadata for the given class name if in the repository.
    • searchQueryMetaDataByName

      public QueryMetaData searchQueryMetaDataByName(String name)
      Searches all cached query metadata by name.
    • getQueryKey

      protected static Object getQueryKey(Class<?> cls, String name)
      Return a unique key for a given class / name. The class argument can be null.
    • getSequenceMetaData

      public SequenceMetaData getSequenceMetaData(String name, ClassLoader envLoader, boolean mustExist)
      Return sequence metadata for the given name and classloader.
    • getSequenceMetaDatas

      public SequenceMetaData[] getSequenceMetaDatas()
      Return the cached sequence metadata.
    • getCachedSequenceMetaData

      public SequenceMetaData getCachedSequenceMetaData(String name)
      Return the cached a sequence metadata for the given name.
    • addSequenceMetaData

      public SequenceMetaData addSequenceMetaData(String name)
      Add a new sequence metadata to the repository and return it.
    • newSequenceMetaData

      protected SequenceMetaData newSequenceMetaData(String name)
      Create a new sequence metadata instance.
    • removeSequenceMetaData

      public boolean removeSequenceMetaData(SequenceMetaData meta)
      Remove the given sequence metadata from the repository.
    • removeSequenceMetaData

      public boolean removeSequenceMetaData(String name)
      Remove sequence metadata for the name if in the repository.
    • is_systemListenersActivated

      public boolean is_systemListenersActivated()
      Whether any system (default) listeners have been registered. Used as a quick test to determine whether the callback/listener mechanism has been enabled.
      Returns:
      boolean
    • addSystemListener

      public void addSystemListener(Object listener)
      Add the given system lifecycle listener.
    • removeSystemListener

      public boolean removeSystemListener(Object listener)
      Remove the given system lifecycle listener.
    • getSystemListeners

      public LifecycleEventManager.ListenerList getSystemListeners()
      Return the system lifecycle listeners
    • close

      public void close()
      Free the resources used by this repository. Closes all user sequences.
      Specified by:
      close in interface Closeable
    • getXMLMetaData

      public XMLMetaData getXMLMetaData(Class<?> cls)
      Return XML metadata for a given field metadata
      Returns:
      XML metadata
    • addXMLClassMetaData

      public XMLClassMetaData addXMLClassMetaData(Class<?> type)
      Create a new metadata, populate it with default information, add it to the repository, and return it.
      Parameters:
      type - the access type to use in populating metadata
    • getCachedXMLMetaData

      public XMLMetaData getCachedXMLMetaData(Class<?> cls)
      Return the cached XMLClassMetaData for the given class Return null if none.
    • newXMLClassMetaData

      protected XMLClassMetaData newXMLClassMetaData(Class<?> type)
      Create a new xml class metadata
      Returns:
      a XMLClassMetaData
    • newXMLFieldMetaData

      public XMLFieldMetaData newXMLFieldMetaData(Class<?> type, String name)
      Create a new xml field meta, add it to the fieldMap in the given xml class metadata
      Returns:
      a XMLFieldMetaData
    • needsPreload

      public static boolean needsPreload(OpenJPAConfiguration conf)
    • getCachedMetaData

      public ClassMetaData getCachedMetaData(String typeName)
      This method returns the ClassMetaData whose described type name matches the typeName parameter. It ONLY operates against MetaData that is currently known by this repository. Note: This method call WILL NOT resolve any metadata.