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: */package org.apache.geronimo.kernel.config;
017:
018: import org.apache.geronimo.gbean.GAttributeInfo;
019: import org.apache.geronimo.gbean.GBeanData;
020: import org.apache.geronimo.gbean.GReferenceInfo;
021: import org.apache.geronimo.gbean.AbstractName;
022: import org.apache.geronimo.gbean.ReferencePatterns;
023: import org.apache.geronimo.kernel.repository.Artifact;
024:
025: import java.io.IOException;
026: import java.util.Collection;
027:
028: /**
029: * Able to retrieve the values of certain "manageable" attributes from a
030: * repository that is more accessible to an end user (compared to the
031: * serialized data in the ConfigStore).
032: *
033: * @version $Rev: 609072 $ $Date: 2008-01-04 16:47:14 -0800 (Fri, 04 Jan 2008) $
034: */
035: public interface ManageableAttributeStore {
036:
037: public static final String ATTRIBUTE_STORE = "AttributeStore";
038:
039: /**
040: * Given a configuration name and a set of GBeanDatas, apply all the saved
041: * overrides to that set of GBeans before the caller attempts to load
042: * them.
043: *
044: * @param configurationName The configuration in question
045: * @param datas The initial GBeanData's for all the GBeans in
046: * the configuration
047: * @param classLoader
048: * @return The modified GBeanData's
049: * @throws InvalidConfigException If something bad happens
050: */
051: public Collection applyOverrides(Artifact configurationName,
052: Collection<GBeanData> datas, ClassLoader classLoader)
053: throws InvalidConfigException;
054:
055: /**
056: * Sets the stored value for a particular attribute. The attribute is
057: * identified by the configuration name, GBean ObjectName, and attribute
058: * information. Note: it is not possible to store a meaningful value of
059: * "null"; that would be treated the same as if no value was stored.
060: *
061: * Generally, whenever the value for a manageable attribute is changed,
062: * this method should be called so that value isn't reversed the next time
063: * the GBean is started.
064: *
065: * @param configurationName The name of the configuration holding the GBean
066: * in question
067: * @param gbean The ObjectName of the GBean in question
068: * @param attribute The attribute in question
069: * @param value The value to save, or null if no value should be saved
070: * @param classLoader The configuration's classLoader
071: */
072: public void setValue(Artifact configurationName,
073: AbstractName gbean, GAttributeInfo attribute, Object value,
074: ClassLoader classLoader);
075:
076: /**
077: * Sets the pattern for a GBean reference. The reference is
078: * identified by the configuration name, GBean ObjectName, and reference
079: * information.
080: *
081: * To "null-out" the reference use setReferencePatterns(configurationName, gbean, reference, Collections.EMPTY_SET).
082: *
083: * @param configurationName the name of the configuration holding the GBean in question
084: * @param gbean the ObjectName of the GBean
085: * @param reference the attribute information
086: * @param patterns
087: */
088: public void setReferencePatterns(Artifact configurationName,
089: AbstractName gbean, GReferenceInfo reference,
090: ReferencePatterns patterns);
091:
092: /**
093: * Sets whether a particular GBean should be loaded for this configuration.
094: * The GBean must already exist in the configuration, this just toggles the
095: * flag for whether to stop it from loading when the configuration is
096: * loaded.
097: *
098: * @param configurationName The configuration that the GBean belongs to
099: * @param gbean The GBean in question
100: * @param load True if the GBean should load with the configuration
101: */
102: public void setShouldLoad(Artifact configurationName,
103: AbstractName gbean, boolean load);
104:
105: /**
106: * Adds a GBean to the configuration.
107: * @param configurationName the configuration that the GBean belongs to
108: * @param gbeanData the GBean to add
109: * @param classLoader The configuration classLoader
110: */
111: public void addGBean(Artifact configurationName,
112: GBeanData gbeanData, ClassLoader classLoader);
113:
114: /**
115: * Saves the current values to persistent storage. This should be called
116: * when the server is shut down or more often, to make sure that any
117: * changes will be reflected the next time the server starts and the
118: * store is consulted.
119: */
120: public void save() throws IOException;
121: }
|