/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at
* trunk/opends/resource/legal-notices/OpenDS.LICENSE
* or https://OpenDS.dev.java.net/OpenDS.LICENSE.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at
* trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
* add the following below this CDDL HEADER, with the fields enclosed
* by brackets "[]" replaced with your own identifying * information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Portions Copyright 2006 Sun Microsystems, Inc.
*/
package org.opends.server.extensions;
import java.util.List;
import java.util.concurrent.locks.Lock;
import org.opends.server.api.Backend;
import org.opends.server.api.EntryCache;
import org.opends.server.config.ConfigEntry;
import org.opends.server.config.ConfigException;
import org.opends.server.core.InitializationException;
import org.opends.server.types.DN;
import org.opends.server.types.Entry;
import org.opends.server.types.LockType;
import static org.opends.server.loggers.Debug.*;
/**
* This class defines the default entry cache that will be used in the server if
* none is configured. It does not actually store any entries, so all calls to
* getEntry will return null, and all calls to
* putEntry will return immediately without doing anything.
*/
public class DefaultEntryCache
extends EntryCache
{
/**
* The fully-qualified name of this class for debugging purposes.
*/
private static final String CLASS_NAME =
"org.opends.server.extensions.DefaultEntryCache";
/**
* Creates a new instance of this default entry cache.
*/
public DefaultEntryCache()
{
super();
assert debugConstructor(CLASS_NAME);
}
/**
* Initializes this entry cache implementation so that it will be available
* for storing and retrieving entries.
*
* @param configEntry The configuration entry containing the settings to use
* for this entry cache.
*
* @throws ConfigException If there is a problem with the provided
* configuration entry that would prevent this
* entry cache from being used.
*
* @throws InitializationException If a problem occurs during the
* initialization process that is not
* related to the configuration.
*/
public void initializeEntryCache(ConfigEntry configEntry)
throws ConfigException, InitializationException
{
assert debugEnter(CLASS_NAME, "initializeEntryCache",
String.valueOf(configEntry));
// No implementation required.
}
/**
* Performs any necessary cleanup work (e.g., flushing all cached entries and
* releasing any other held resources) that should be performed when the
* server is to be shut down or the entry cache destroyed or replaced.
*/
public void finalizeEntryCache()
{
assert debugEnter(CLASS_NAME, "finalizeEntryCache");
// No implementation required.
}
/**
* Indicates whether the entry cache currently contains the entry with the
* specified DN. This method may be called without holding any locks if a
* point-in-time check is all that is required.
*
* @param entryDN The DN for which to make the determination.
*
* @return true if the entry cache currently contains the entry
* with the specified DN, or false if not.
*/
public boolean containsEntry(DN entryDN)
{
assert debugEnter(CLASS_NAME, "containsEntry", String.valueOf(entryDN));
// This implementation does not store any entries.
return false;
}
/**
* Retrieves the entry with the specified DN from the cache. The caller
* should have already acquired a read or write lock for the entry if such
* protection is needed.
*
* @param entryDN The DN of the entry to retrieve.
*
* @return The requested entry if it is present in the cache, or
* null if it is not present.
*/
public Entry getEntry(DN entryDN)
{
assert debugEnter(CLASS_NAME, "getEntry", String.valueOf(entryDN));
// This implementation does not store any entries.
return null;
}
/**
* Retrieves the entry ID for the entry with the specified DN from the cache.
* The caller should have already acquired a read or write lock for the entry
* if such protection is needed.
*
* @param entryDN The DN of the entry for which to retrieve the entry ID.
*
* @return The entry ID for the requested entry, or -1 if it is not present
* in the cache.
*/
public long getEntryID(DN entryDN)
{
assert debugEnter(CLASS_NAME, "getEntryID", String.valueOf(entryDN));
// This implementation does not store any entries.
return -1;
}
/**
* Retrieves the entry with the specified DN from the cache, obtaining a lock
* on the entry before it is returned. If the entry is present in the cache,
* then a lock will be obtained for that entry and appended to the provided
* list before the entry is returned. If the entry is not present, then no
* lock will be obtained.
*
* @param entryDN The DN of the entry to retrieve.
* @param lockType The type of lock to obtain (it may be NONE).
* @param lockList The list to which the obtained lock will be added (note
* that no lock will be added if the lock type was
* NONE).
*
* @return The requested entry if it is present in the cache, or
* null if it is not present.
*/
public Entry getEntry(DN entryDN, LockType lockType, List lockList)
{
assert debugEnter(CLASS_NAME, "getEntry", String.valueOf(entryDN),
String.valueOf(lockType), "java.util.List");
// This implementation does not store entries.
return null;
}
/**
* Retrieves the requested entry if it is present in the cache, obtaining a
* lock on the entry before it is returned. If the entry is present in the
* cache, then a lock will be obtained for that entry and appended to the
* provided list before the entry is returned. If the entry is not present,
* then no lock will be obtained.
*
* @param backend The backend associated with the entry to retrieve.
* @param entryID The entry ID within the provided backend for the
* specified entry.
* @param lockType The type of lock to obtain (it may be NONE).
* @param lockList The list to which the obtained lock will be added (note
* that no lock will be added if the lock type was
* NONE).
*
* @return The requested entry if it is present in the cache, or
* null if it is not present.
*/
public Entry getEntry(Backend backend, long entryID, LockType lockType,
List lockList)
{
assert debugEnter(CLASS_NAME, "getEntry", String.valueOf(backend),
String.valueOf(entryID), String.valueOf(lockType),
"java.util.List");
// This implementation does not store entries.
return null;
}
/**
* Stores the provided entry in the cache. Note that the mechanism that it
* uses to achieve this is implementation-dependent, and it is acceptable for
* the entry to not actually be stored in any cache.
*
* @param entry The entry to store in the cache.
* @param backend The backend with which the entry is associated.
* @param entryID The entry ID within the provided backend that uniquely
* identifies the specified entry.
*/
public void putEntry(Entry entry, Backend backend, long entryID)
{
assert debugEnter(CLASS_NAME, "putEntry", String.valueOf(entry),
String.valueOf(backend), String.valueOf(entryID));
// This implementation does not store entries.
}
/**
* Stores the provided entry in the cache only if it does not conflict with an
* entry that already exists. Note that the mechanism that it uses to achieve
* this is implementation-dependent, and it is acceptable for the entry to not
* actually be stored in any cache. However, this method must not overwrite
* an existing version of the entry.
*
* @param entry The entry to store in the cache.
* @param backend The backend with which the entry is associated.
* @param entryID The entry ID within the provided backend that uniquely
* identifies the specified entry.
*
* @return false if an existing entry or some other problem
* prevented the method from completing successfully, or
* true if there was no conflict and the entry was
* either stored or the cache determined that this entry should never
* be cached for some reason.
*/
public boolean putEntryIfAbsent(Entry entry, Backend backend, long entryID)
{
assert debugEnter(CLASS_NAME, "putEntryIfAbsent", String.valueOf(entry),
String.valueOf(backend), String.valueOf(entryID));
// This implementation does not store entries, so we will never have a
// conflict.
return true;
}
/**
* Removes the specified entry from the cache.
*
* @param entryDN The DN of the entry to remove from the cache.
*/
public void removeEntry(DN entryDN)
{
assert debugEnter(CLASS_NAME, "removeEntry", String.valueOf(entryDN));
// This implementation does not store entries.
}
/**
* Removes all entries from the cache. The cache should still be available
* for future use.
*/
public void clear()
{
assert debugEnter(CLASS_NAME, "clear");
// This implementation does not store entries.
}
/**
* Removes all entries from the cache that are associated with the provided
* backend.
*
* @param backend The backend for which to flush the associated entries.
*/
public void clearBackend(Backend backend)
{
assert debugEnter(CLASS_NAME, "clearBackend", String.valueOf(backend));
// This implementation does not store entries.
}
/**
* Removes all entries from the cache that are below the provided DN.
*
* @param baseDN The base DN below which all entries should be flushed.
*/
public void clearSubtree(DN baseDN)
{
assert debugEnter(CLASS_NAME, "clearSubtree", String.valueOf(baseDN));
// This implementation does not store entries.
}
/**
* Attempts to react to a scenario in which it is determined that the system
* is running low on available memory. In this case, the entry cache should
* attempt to free some memory if possible to try to avoid out of memory
* errors.
*/
public void handleLowMemory()
{
assert debugEnter(CLASS_NAME, "handleLowMemory");
// This implementation does not store entries, so there are no resources
// that it can free.
}
}