Documentation of 'org.apache.derby.impl.sql.depend.BasicDependencyManager' Java class
BasicDependencyManager
org.apache.derby.impl.sql.depend

Class BasicDependencyManager

  • All Implemented Interfaces:
    DependencyManager


    public class BasicDependencyManager
    extends java.lang.Object
    implements DependencyManager
    The dependency manager tracks needs that dependents have of providers.

    A dependency can be either persistent or non-persistent. Persistent dependencies are stored in the data dictionary, and non-persistent dependencies are stored within the dependency manager itself (in memory).

    Synchronization: The need for synchronization is different depending on whether the dependency is an in-memory dependency or a stored dependency. When accessing and modifying in-memory dependencies, Java synchronization must be used (specifically, we synchronize on this). When accessing and modifying stored dependencies, which are stored in the data dictionary, we expect that the locking protocols will provide the synchronization needed. Note that stored dependencies should not be accessed while holding the monitor of this, as this may result in deadlocks. So far the need for synchronization across both in-memory and stored dependencies hasn't occurred.

    • Constructor Detail

      • BasicDependencyManager

        public BasicDependencyManager(DataDictionary dd)
    • Method Detail

      • addDependency

        public void addDependency(Dependent d,
                                  Provider p,
                                  ContextManager cm)
                           throws StandardException
        adds a dependency from the dependent on the provider. This will be considered to be the default type of dependency, when dependency types show up.

        Implementations of addDependency should be fast -- performing alot of extra actions to add a dependency would be a detriment.

        Specified by:
        addDependency in interface DependencyManager
        Parameters:
        d - the dependent
        p - the provider
        cm - Current ContextManager
        Throws:
        StandardException - thrown if something goes wrong
      • invalidateFor

        public void invalidateFor(Provider p,
                                  int action,
                                  LanguageConnectionContext lcc)
                           throws StandardException
        mark all dependencies on the named provider as invalid. When invalidation types show up, this will use the default invalidation type. The dependencies will still exist once they are marked invalid; clearDependencies should be used to remove dependencies that a dependent has or provider gives.

        Implementations of this can take a little time, but are not really expected to recompile things against any changes made to the provider that caused the invalidation. The dependency system makes no guarantees about the state of the provider -- implementations can call this before or after actually changing the provider to its new state.

        Implementations should throw StandardException if the invalidation should be disallowed.

        Specified by:
        invalidateFor in interface DependencyManager
        Parameters:
        p - the provider
        action - The action causing the invalidate
        lcc - The LanguageConnectionContext
        Throws:
        StandardException - thrown if unable to make it invalid
      • clearDependencies

        public void clearDependencies(LanguageConnectionContext lcc,
                                      Dependent d)
                               throws StandardException
        Erases all of the dependencies the dependent has, be they valid or invalid, of any dependency type. This action is usually performed as the first step in revalidating a dependent; it first erases all the old dependencies, then revalidates itself generating a list of new dependencies, and then marks itself valid if all its new dependencies are valid.

        There might be a future want to clear all dependencies for a particular provider, e.g. when destroying the provider. However, at present, they are assumed to stick around and it is the responsibility of the dependent to erase them when revalidating against the new version of the provider.

        clearDependencies will delete dependencies if they are stored; the delete is finalized at the next commit.

        Specified by:
        clearDependencies in interface DependencyManager
        Parameters:
        d - the dependent
        lcc - Compiler state
        Throws:
        StandardException - Thrown on failure
      • clearDependencies

        public void clearDependencies(LanguageConnectionContext lcc,
                                      Dependent d,
                                      TransactionController tc)
                               throws StandardException
        Description copied from interface: DependencyManager
        Erases all of the dependencies the dependent has, be they valid or invalid, of any dependency type. This action is usually performed as the first step in revalidating a dependent; it first erases all the old dependencies, then revalidates itself generating a list of new dependencies, and then marks itself valid if all its new dependencies are valid.

        There might be a future want to clear all dependencies for a particular provider, e.g. when destroying the provider. However, at present, they are assumed to stick around and it is the responsibility of the dependent to erase them when revalidating against the new version of the provider.

        clearDependencies will delete dependencies if they are stored; the delete is finalized at the next commit.

        Specified by:
        clearDependencies in interface DependencyManager
        Parameters:
        lcc - Compiler state
        d - the dependent
        tc - transaction controller
        Throws:
        StandardException - Thrown on failure
      • clearInMemoryDependency

        public void clearInMemoryDependency(Dependency dy)
        Clear the specified in memory dependency. This is useful for clean-up when an exception occurs. (We clear all in-memory dependencies added in the current StatementContext.)
        Specified by:
        clearInMemoryDependency in interface DependencyManager
      • getActionString

        public java.lang.String getActionString(int action)
        Returns a string representation of the SQL action, hence no need to internationalize, which is causing the invokation of the Dependency Manager.
        Specified by:
        getActionString in interface DependencyManager
        Parameters:
        action - The action
        Returns:
        String The String representation
      • countDependencies

        public int countDependencies()
                              throws StandardException
        Count the number of active dependencies, both stored and in memory, in the system.
        Specified by:
        countDependencies in interface DependencyManager
        Returns:
        int The number of active dependencies in the system.
        Throws:
        StandardException - thrown if something goes wrong

DataMelt 3.0 © DataMelt by jWork.ORG

Ads help maintain this website.