001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 package org.apache.geronimo.kernel;
019
020 import org.apache.geronimo.gbean.AbstractName;
021
022 import java.util.Set;
023
024 /**
025 * DependencyManager is the record keeper of the dependencies in Geronimo. The DependencyManager
026 * does not enforce any dependencies, it is simply a place where components can register their intent
027 * to be dependent on another component.
028 * <p/>
029 * The DependencyManager uses the nomenclature of parent-child where a child is dependent on a parent.
030 * The names parent and child have no other meaning are just a convience to make the code readable.
031 *
032 * @version $Rev: 476049 $ $Date: 2006-11-16 23:35:17 -0500 (Thu, 16 Nov 2006) $
033 */
034 public interface DependencyManager {
035 /**
036 * Closes the dependency manager releasing all resources
037 */
038 public void close();
039
040 /**
041 * Declares a dependency from a child to a parent.
042 *
043 * @param child the dependent component
044 * @param parent the component the child is depending on
045 */
046 public void addDependency(AbstractName child, AbstractName parent);
047
048 /**
049 * Removes a dependency from a child to a parent
050 *
051 * @param child the dependnet component
052 * @param parent the component that the child wil no longer depend on
053 */
054 public void removeDependency(AbstractName child, AbstractName parent);
055
056 /**
057 * Removes all dependencies for a child
058 *
059 * @param child the component that will no longer depend on anything
060 */
061 public void removeAllDependencies(AbstractName child);
062
063 /**
064 * Adds dependencies from the child to every parent in the parents set
065 *
066 * @param child the dependent component
067 * @param parents the set of components the child is depending on
068 */
069 public void addDependencies(AbstractName child, Set parents);
070
071 /**
072 * Gets the set of parents that the child is depending on
073 *
074 * @param child the dependent component
075 * @return a collection containing all of the components the child depends on; will never be null
076 */
077 public Set getParents(AbstractName child);
078
079 /**
080 * Gets all of the MBeans that have a dependency on the specified startParent.
081 *
082 * @param parent the component the returned childen set depend on
083 * @return a collection containing all of the components that depend on the parent; will never be null
084 */
085 public Set getChildren(AbstractName parent);
086
087 }