All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.felix.cm.PersistenceManager Maven / Gradle / Ivy

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apache.felix.cm;


import java.io.IOException;
import java.util.Dictionary;
import java.util.Enumeration;

import org.osgi.annotation.versioning.ConsumerType;


/**
 * The PersistenceManager interface defines the API to be
 * implemented to support persisting configuration data. This interface may
 * be implemented by bundles, which support storing configuration data in
 * different locations.
 * 

* The Apache Felix Configuration Admin Service bundles provides an * implementation of this interface using the platform file system to store * configuration data. *

* Implementations of this interface must support loading and storing * java.util.Dictionary objects as defined in section 104.4.2, * Configuration Properties, of the Configuration Admin Service Specification * Version 1.2. *

* To make implementations of this interface available to the Configuration * Admin Service they must be registered as service for this interface. The * Configuration Admin Service will consider all registered services plus the * default platform file system based implementation to load configuration data. * To store new configuration data, the persistence manager service with the * highest rank value - the service.ranking service property - is * used. If no persistence manager service has been registered, the platform * file system based implementation is used. */ @ConsumerType public interface PersistenceManager { /** * Service registration property to define a unique name for the persistence manager. * @since 1.2 */ String PROPERTY_NAME = "name"; /** * Returns true if a persisted Dictionary exists for * the given pid. * * @param pid The identifier for the dictionary to test. * @return {@code true} if a persisted dictionary exists for the pid. */ boolean exists( String pid ); /** * Returns the Dictionary for the given pid. *

* Implementations are expected to return dictionary instances which may be * modified by the caller without affecting any underlying data or affecting * future calls to this method with the same PID. In other words the * reference equation load(pid) != load(pid) must hold * true. * * @param pid The identifier for the dictionary to load. * * @return The dictionary for the identifier. This must not be * null but may be empty. * * @throws IOException If an error occurs loading the dictionary. An * IOException must also be thrown if no dictionary * exists for the given identifier. */ Dictionary load( String pid ) throws IOException; /** * Returns an enumeration of all Dictionary objects known to * this persistence manager. *

* Implementations of this method are allowed to return lazy enumerations. * That is, it is allowable for the enumeration to not return a dictionary * if loading it results in an error. *

* Implementations are expected to return dictionary instances which may be * modified by the caller without affecting any underlying data or affecting * future calls to this method. *

* The Enumeration returned from this method must be stable * against concurrent calls to either of the {@link #load(String)}, * {@link #store(String, Dictionary)}, and {@link #delete(String)} methods. * * @return A possibly empty Enumeration of all dictionaries. * * @throws IOException If an error occurs getting the dictionaries. */ Enumeration getDictionaries() throws IOException; /** * Stores the Dictionary under the given pid. *

* The dictionary provided to this method must be considered private to the * caller. Any modification by the caller after this method finishes must * not influence any internal storage of the provided data. Implementations * must not modify the dictionary. * * @param pid The identifier of the dictionary. * @param properties The Dictionary to store. * * @throws IOException If an error occurs storing the dictionary. If this * exception is thrown, it is expected, that * {@link #exists(String) exists(pid} returns false. */ void store( String pid, Dictionary properties ) throws IOException; /** * Removes the Dictionary for the given pid. If * such a dictionary does not exist, this method has no effect. * * @param pid The identifier of the dictionary to delete. * * @throws IOException If an error occurs deleting the dictionary. This * exception must not be thrown if no dictionary with the given * identifier exists. */ void delete( String pid ) throws IOException; }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy