Application Callbacks
Application Callbacks
For region-level events, an application can use AttributesFactory.SetCache* methods to implement and register the ICacheLoader, ICacheWriter, and ICacheListener interfaces to perform custom actions.
You can use Region.Put for simple caching situations. For more complex needs, you should implement the ICacheLoader interface and allow the cache to manage the creation and loading of objects. When a Region.Get is called for a region entry with a value of null, the ICacheLoader::Load method of the cache loader (if any) for the region is invoked. A static CacheLoader::NetSearch method is provided which can be used by ICacheLoader implementations to locate the requested key in the distributed system. The ICacheListener interface can be used to listen to various region events after events such as create, update, or invalidate of region entries have occurred. The ICacheWriter interface is invoked before the events have occurred.
Using ICacheLoader to Load New Integers in the Region
class SimpleCacheLoader<TKey, TVal> : ICacheLoader<TKey, TVal> { #region ICacheLoader Members public TVal Load(IRegion<TKey, TVal> region, TKey key, object helper) { Console.WriteLine("SimpleCacheLoader: Received Load event for region: {0} and key: {1}", region.Name, key); return default(TVal); } public void Close(IRegion<TKey, TVal> region) { Console.WriteLine("SimpleCacheLoader: Received Close event of region: {0}", region.Name); } #endregion }
Using ICacheWriter to Track Creates and Updates for a Region
class SimpleCacheWriter<TKey, TVal> : ICacheWriter<TKey, TVal> { #region ICacheWriter<TKey, TVal> Members public bool BeforeUpdate(EntryEvent<TKey, TVal> ev) { Console.WriteLine("SimpleCacheWriter: Received BeforeUpdate event for: {0}", ev.Key); return true; } // ... handle other entry events as needed public bool BeforeRegionClear(RegionEvent<TKey, TVal> ev) { Console.WriteLine("SimpleCacheWriter: Received BeforeRegionClear event of region: {0}", ev.Region.Name); return true; } // ... handle other region events as needed #endregion }
A Sample ICacheListener Implementation
class SimpleCacheListener<TKey, TVal> : ICacheListener<TKey, TVal> { #region ICacheListener<TKey, TVal> Members public void AfterCreate(EntryEvent<TKey, TVal> ev) { Console.WriteLine("SimpleCacheListener: Received AfterCreate event for: {0}", ev.Key); } // ... handle other entry events as needed public void AfterRegionDestroy(RegionEvent<TKey, TVal> ev) { Console.WriteLine("SimpleCacheListener: Received AfterRegionDestroy event of region: {0}", ev.Region.Name); } // ... handle other region events as needed #endregion }