Oracle Fusion Middleware C++ API Reference for Oracle Coherence
12c (12.1.2)

E26041-01

coherence/net/cache/NearCache.hpp

00001 /*
00002 * NearCache.hpp
00003 *
00004 * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
00005 *
00006 * Oracle is a registered trademarks of Oracle Corporation and/or its
00007 * affiliates.
00008 *
00009 * This software is the confidential and proprietary information of Oracle
00010 * Corporation. You shall not disclose such confidential and proprietary
00011 * information and shall use it only in accordance with the terms of the
00012 * license agreement you entered into with Oracle.
00013 *
00014 * This notice may not be removed or altered.
00015 */
00016 #ifndef COH_NEAR_CACHE_HPP
00017 #define COH_NEAR_CACHE_HPP
00018 
00019 #include "coherence/lang.ns"
00020 
00021 #include "coherence/net/CacheService.hpp"
00022 #include "coherence/net/MemberListener.hpp"
00023 #include "coherence/net/NamedCache.hpp"
00024 
00025 #include "coherence/net/cache/CacheMap.hpp"
00026 #include "coherence/net/cache/CachingMap.hpp"
00027 
00028 #include "coherence/util/Comparator.hpp"
00029 #include "coherence/util/ValueExtractor.hpp"
00030 
00031 COH_OPEN_NAMESPACE3(coherence,net,cache)
00032 
00033 using coherence::net::CacheService;
00034 using coherence::net::MemberListener;
00035 using coherence::net::NamedCache;
00036 using coherence::util::Comparator;
00037 using coherence::util::ValueExtractor;
00038 
00039 
00040 /**
00041 * A "near cache" is a CachingMap whose front map is a size-limited and/or
00042 * auto-expiring local cache, and whose back map is a distributed cache.
00043 *
00044 * (A CachingMap is a map that has a "front" map and a "back" map; the front
00045 * map is assumed to be low latency but incomplete, and the back map is
00046 * assumed to be complete but high latency.)
00047 *
00048 * @author tb  2008.07.02
00049 */
00050 class COH_EXPORT NearCache
00051     : public class_spec<NearCache,
00052         extends<CachingMap>,
00053         implements<NamedCache> >
00054     {
00055     friend class factory<NearCache>;
00056 
00057     // ----- constructors ---------------------------------------------------
00058 
00059     protected:
00060         /**
00061         * Construct a NearCache, using a <i>mapBack</i> NamedCache as the
00062         * complete (back) storage and <i>mapFront</i> Map as a near (front)
00063         * storage using the listen_auto invalidation strategy.
00064         *
00065         * @param hMapFront    map to put in front of the back cache
00066         * @param hMapBack     NamedCache to put behind the front cache
00067         * @param strategy     specifies the strategy used for the front map
00068         *                     invalidation
00069         * @param hMapControl  map to keep track of front map updates
00070         */
00071         NearCache(CacheMap::Handle hMapFront, CacheMap::Handle hMapBack,
00072                 CachingMap::InvalidationStrategy strategy = listen_auto,
00073                 ConcurrentMap::Handle hMapControl = NULL);
00074 
00075 
00076     // ----- accessors ------------------------------------------------------
00077 
00078     public:
00079         /**
00080         * Obtain the NamedCache object that sits behind this NearCache.
00081         *
00082         * @return the NamedCache object, which is the back map of this
00083         *         NearCache
00084         *
00085         * @throws IllegalStateException if this NamedCache has been released
00086         */
00087         virtual NamedCache::Handle getBackCache();
00088 
00089         /**
00090         * Obtain the NamedCache object that sits behind this NearCache.
00091         *
00092         * @return the NamedCache object, which is the back map of this
00093         *         NearCache
00094         *
00095         * @throws IllegalStateException if this NamedCache has been released
00096         */
00097         virtual NamedCache::View getBackCache() const;
00098 
00099 
00100     // ----- CachingMap interface -------------------------------------------
00101 
00102     public:
00103         /**
00104         * {@inheritDoc}
00105         */
00106         using CachingMap::put;
00107 
00108         /**
00109         * {@inheritDoc}
00110         */
00111         using CachingMap::keySet;
00112 
00113         /**
00114         * {@inheritDoc}
00115         */
00116         using CachingMap::entrySet;
00117 
00118 
00119     // ----- NamedCache interface -------------------------------------------
00120 
00121     public:
00122         /**
00123         * {@inheritDoc}
00124         */
00125         virtual String::View getCacheName() const;
00126 
00127         /**
00128         * {@inheritDoc}
00129         */
00130         virtual NamedCache::CacheServiceHandle getCacheService();
00131 
00132         /**
00133         * {@inheritDoc}
00134         */
00135         virtual NamedCache::CacheServiceView getCacheService() const;
00136 
00137         /**
00138         * {@inheritDoc}
00139         */
00140         virtual bool isActive() const;
00141 
00142         /**
00143         * {@inheritDoc}
00144         */
00145         virtual void release();
00146 
00147         /**
00148         * {@inheritDoc}
00149         */
00150         virtual void destroy();
00151 
00152 
00153     // ----- ObservableMap interface ----------------------------------------
00154 
00155     public:
00156         /**
00157         * {@inheritDoc}
00158         */
00159         virtual void addKeyListener(MapListener::Handle hListener,
00160                 Object::View vKey, bool fLite);
00161 
00162         /**
00163         * {@inheritDoc}
00164         */
00165         virtual void removeKeyListener(MapListener::Handle hListener,
00166                 Object::View vKey);
00167 
00168         /**
00169         * {@inheritDoc}
00170         */
00171         virtual void addFilterListener(MapListener::Handle hListener,
00172                 Filter::View vFilter = NULL, bool fLite = false);
00173 
00174         /**
00175         * {@inheritDoc}
00176         */
00177         virtual void removeFilterListener(MapListener::Handle hListener,
00178                 Filter::View vFilter = NULL);
00179 
00180 
00181     // ----- CacheMap interface ---------------------------------------------
00182 
00183     public:
00184         /**
00185         * {@inheritDoc}
00186         */
00187         virtual Map::View getAll(Collection::View vColKeys) const;
00188 
00189         /**
00190         * {@inheritDoc}
00191         */
00192         virtual Object::Holder put(Object::View vKey,
00193                 Object::Holder ohValue, int64_t cMillis);
00194 
00195 
00196     // ----- ConcurrentMap interface ----------------------------------------
00197 
00198     public:
00199         /**
00200         * {@inheritDoc}
00201         */
00202         virtual bool lock(Object::View vKey, int64_t cWait) const;
00203 
00204         /**
00205         * {@inheritDoc}
00206         */
00207         virtual bool lock(Object::View vKey) const;
00208 
00209         /**
00210         * {@inheritDoc}
00211         */
00212         virtual bool unlock(Object::View vKey) const;
00213 
00214 
00215     // ----- QueryMap interface ---------------------------------------------
00216 
00217     public:
00218         /**
00219         * {@inheritDoc}
00220         */
00221         virtual Set::View keySet(Filter::View vFilter) const;
00222 
00223         /**
00224         * {@inheritDoc}
00225         */
00226         virtual Set::View entrySet(Filter::View vFilter) const;
00227 
00228         /**
00229         * {@inheritDoc}
00230         */
00231         virtual Set::View entrySet(Filter::View vFilter,
00232                 Comparator::View vComparator) const;
00233 
00234         /**
00235         * {@inheritDoc}
00236         */
00237         virtual void addIndex(ValueExtractor::View vExtractor, bool fOrdered,
00238                 Comparator::View vComparator);
00239 
00240         /**
00241         * {@inheritDoc}
00242         */
00243         virtual void removeIndex(ValueExtractor::View vExtractor);
00244 
00245 
00246     // ----- InvocableMap interface -----------------------------------------
00247 
00248     public:
00249         /**
00250         * {@inheritDoc}
00251         */
00252         virtual Object::Holder invoke(Object::View vKey,
00253                 EntryProcessor::Handle hAgent);
00254 
00255         /**
00256         * {@inheritDoc}
00257         */
00258         virtual Map::View invokeAll(Collection::View vCollKeys,
00259                 EntryProcessor::Handle hAgent);
00260 
00261         /**
00262         * {@inheritDoc}
00263         */
00264         virtual Map::View invokeAll(Filter::View vFilter,
00265                 EntryProcessor::Handle hAgent);
00266 
00267         /**
00268         * {@inheritDoc}
00269         */
00270         virtual Object::Holder aggregate(Collection::View vCollKeys,
00271                 EntryAggregator::Handle hAgent) const;
00272 
00273         /**
00274         * {@inheritDoc}
00275         */
00276         virtual Object::Holder aggregate(Filter::View vFilter,
00277                 EntryAggregator::Handle hAgent) const;
00278 
00279 
00280     // ----- Object interface -----------------------------------------------
00281 
00282     protected:
00283         /**
00284         * {@inheritDoc}
00285         */
00286         virtual void onInit();
00287 
00288 
00289     // ----- internal helpers -----------------------------------------------
00290 
00291     protected:
00292         /**
00293         * Instantiate and register a MemberListener with the back cache's
00294         * service.
00295         *
00296         * The primary goal of that listener is invalidation of the front map
00297         * in case of the service [automatic] restart.
00298         *
00299         * @return the instantiated and registered MemberListener object
00300         */
00301         virtual MemberListener::Handle registerBackServiceListener();
00302 
00303         /**
00304         * Unregister back caches's service member listener.
00305         */
00306         virtual void unregisterBackServiceListener();
00307 
00308 
00309     // ----- data fields ----------------------------------------------------
00310 
00311     protected:
00312         /**
00313         * Cache name
00314         */
00315         FinalView<String> f_vsName;
00316 
00317         /**
00318         * The back cache service.
00319         */
00320         FinalHandle<CacheService> f_hService;
00321 
00322         /**
00323         * The back cache service MemberListener.
00324         */
00325         FinalHandle<MemberListener> f_hListenerBackService;
00326     };
00327 
00328 COH_CLOSE_NAMESPACE3
00329 
00330 #endif // COH_NEAR_CACHE_HPP
Copyright © 2000, 2013, Oracle and/or its affiliates. All rights reserved.