Пример #1
0
 internal void ActivateSilentListeners()
 {
     lock (_listeners.SyncRoot)
     {
         try
         {
             IDictionaryEnumerator listnersDic = _silentListeners.GetEnumerator();
             while (listnersDic.MoveNext())
             {
                 DependencyListener listener = (DependencyListener)listnersDic.Value;
                 listener.Initialize();
                 lock (_listeners.SyncRoot)
                 {
                     _listeners[listener.CacheKey] = new ArrayList().Add(listener);
                 }
             }
             _silentListeners.Clear();
         }
         catch (Exception)
         {
             if (_context.NCacheLog.IsErrorEnabled)
             {
                 _context.NCacheLog.Error("YukonDependencyManager", "silent Listeners Activated. Listeners: " + _listeners.Count + " SilentListeners: " + _silentListeners.Count);
             }
         }
     }
     if (_context.NCacheLog.IsErrorEnabled)
     {
         _context.NCacheLog.Error("YukonDependencyManager", "silent Listeners Activated. Listeners: " + _listeners.Count + " SilentListeners: " + _silentListeners.Count);
     }
 }
Пример #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="key"></param>
        public void Remove(string key)
        {
            ArrayList          _dblistner = (ArrayList)_listeners[key];
            DependencyListener depLisner;

            lock (_listeners.SyncRoot)
            {
                if (_dblistner != null)
                {
                    for (int i = 0; i < _dblistner.Count; i++)
                    {
                        depLisner = _dblistner[i] as DependencyListener;

                        if (depLisner != null)
                        {
                            depLisner.Stop();
                        }
                    }
                }
                _listeners.Remove(key);
                depLisner = null;
            }
            lock (_silentListeners.SyncRoot)
            {
                DependencyListener listener = (DependencyListener)_silentListeners[key];
                if (listener != null)
                {
                    _silentListeners.Remove(key);
                    listener = null;
                }
            }
        }
Пример #3
0
 public void OnDependencyChanged(DependencyListener sender, string cacheKey, bool changed, bool restart, bool error, bool invalid)
 {
     lock (AsyncOnDependencyChange.Queue)
     {
         AsyncOnDependencyChange.Queue.Enqueue(new DependencyListnerInformation(cacheKey, changed, restart, error, invalid, sender));
         Monitor.Pulse(AsyncOnDependencyChange.Queue);
     }
 }
Пример #4
0
 public DependencyListnerInformation(string cacheKey, bool change, bool restart, bool error, bool invalid, DependencyListener listner)
 {
     _cacheKey = cacheKey;
     _change   = change;
     _restart  = restart;
     _invalid  = invalid;
     _error    = error;
     _listner  = listner;
 }
Пример #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="key"></param>
        public void RemoveWithoutStop(string key)
        {
            lock (_listeners.SyncRoot)
            {
                ArrayList _dblistner = (ArrayList)_listeners[key];


                if (_dblistner != null)
                {
                    _listeners.Remove(key);
                    _dblistner = null;
                }
            }
            lock (_silentListeners.SyncRoot)
            {
                DependencyListener listener = (DependencyListener)_silentListeners[key];
                if (listener != null)
                {
                    _silentListeners.Remove(key);
                    listener = null;
                }
            }
        }
Пример #6
0
        /// <summary>
        /// Create and initialize dependency listener and Add it to the listener list and
        /// </summary>
        /// <param name="key">key used to reference object</param>
        /// <param name="connString">connection string used to connect to database</param>
        /// <param name="queryString">query string for which dataset is created to be monitored</param>
        /// <param name="doInitialize"></param>
        /// <param name="hintType"></param>
        /// <returns></returns>
        public bool Add(string key, string connString, string queryString, bool doInitialize, ExpirationHintType hintType)
        {
            DependencyListener listener = null;


            if (hintType == ExpirationHintType.OracleCacheDependency)
            {
#if NET40
                string fullAssemblyName             = "Alachisoft.NCache.RuntimeDependencies, Version=" + Assembly.GetExecutingAssembly().GetName().Version;
                System.Reflection.Assembly assembly = System.Reflection.Assembly.Load(fullAssemblyName);
                Type     factoryType = assembly.GetType("Alachisoft.NCache.RuntimeDependencies.DependencyListenerFactory");
                Object[] oDLArgs     = new Object[7];
                oDLArgs[0] = key;
                oDLArgs[1] = connString;
                oDLArgs[2] = queryString;
                oDLArgs[3] = this;
                oDLArgs[4] = this;
                oDLArgs[5] = _context.NCacheLog;
                oDLArgs[6] = hintType;
                Object     dLFactory             = Activator.CreateInstance(factoryType);
                MethodInfo dLFactoryCreateMethod = factoryType.GetMethod("Create");

                listener = (DependencyListener)(dLFactoryCreateMethod.Invoke(dLFactory, oDLArgs));
#else
                return(true);
#endif
            }
            else if (hintType == ExpirationHintType.SqlYukonCacheDependency)
            {
                if (hintType == ExpirationHintType.SqlYukonCacheDependency)
                {
                    listener = new YukonDependencyListener(key, connString, queryString, _context, hintType);
                }
                else if (hintType == ExpirationHintType.NosDBCacheDependency)
                {
                    listener = new NosDBDependencyListener(key, connString, queryString, _context, hintType);
                }
            }
            if (doInitialize)
            {
                listener.Initialize();
                lock (_listeners.SyncRoot)
                {
                    if (!_listeners.Contains(listener.CacheKey))
                    {
                        ArrayList _dblistner = new ArrayList();
                        _dblistner.Add(listener);
                        _listeners[listener.CacheKey] = _dblistner;
                    }
                    else
                    {
                        ArrayList _dblistner = (ArrayList)_listeners[listener.CacheKey];
                        _dblistner.Add(listener);
                        _listeners[listener.CacheKey] = _dblistner;
                    }
                }
            }
            else
            {
                lock (_silentListeners.SyncRoot)
                {
                    _silentListeners[listener.CacheKey] = listener;
                }
            }
            return(true);
        }
Пример #7
0
            private void Run()
            {
                while (!this._isThreadStopped)
                {
                    lock (this.Queue)
                    {
                        if (this.Queue.Count == 0)
                        {
                            Monitor.Wait(this.Queue, 3000);
                        }
                        if (this._isThreadStopped)
                        {
                            break;
                        }

                        if (this.Queue.Count == 0)
                        {
                            if (!_trimToSize)
                            {
                                continue;
                            }
                            this.Queue.TrimToSize();
                            this._trimToSize = false;
                            continue;
                        }

                        if (this.Queue.Count > 100)
                        {
                            this._trimToSize = true;
                        }
                    }

                    DependencyListnerInformation instance = null;
                    lock (this.Queue)
                    {
                        instance = this.Queue.Dequeue() as DependencyListnerInformation;

                        if (instance == null)
                        {
                            continue;
                        }
                    }

                    try
                    {
                        DependencyListener depListner = instance.Listner;
                        if (instance.isChanged || instance.isRestart || instance.isError)
                        {
                            if (_notificationManager._context.CacheImpl != null)
                            {
                                CacheEntry entry = _notificationManager._context.CacheImpl.Get(instance.CacheKey, new OperationContext(OperationContextFieldName.OperationType, OperationContextOperationType.CacheOperation));

                                if (entry != null && entry.ExpirationHint != null && entry.ExpirationHint.NeedsReSync && _notificationManager._context.DsMgr != null)
                                {
                                    _notificationManager._context.DsMgr.ResyncCacheItemAsync(instance.CacheKey, entry.ExpirationHint, null, entry.GroupInfo, entry.QueryInfo, entry.ResyncProviderName);
                                }
                                else
                                {
                                    _notificationManager._context.NCacheLog.Info("DependencyListener.OnDependencyChanged", String.Format("Removing {0} ", instance.CacheKey));
                                    CacheEntry ent = _notificationManager._context.CacheImpl.Remove(instance.CacheKey, ItemRemoveReason.DependencyChanged, true, null, 0, LockAccessType.IGNORE_LOCK, new OperationContext(OperationContextFieldName.OperationType, OperationContextOperationType.CacheOperation));

                                    if (ent != null)
                                    {
                                        _notificationManager._context.CacheImpl.RemoveCascadingDependencies(instance.CacheKey, ent, new OperationContext(OperationContextFieldName.OperationType, OperationContextOperationType.CacheOperation));
                                    }
                                }

                                lock (_notificationManager._context.ExpiryMgr.NotifBasedDepManager.NotifBasedDependencyListeners.SyncRoot)
                                {
                                    _notificationManager._context.ExpiryMgr.NotifBasedDepManager.Remove(instance.CacheKey);
                                }
                            }
                        }
                        else if (instance.isInvalid) //This status is only sent by SQL Dependency
                        {
                            if (_notificationManager._context.CacheImpl != null)
                            {
                                CacheEntry entry = _notificationManager._context.CacheImpl.Get(instance.CacheKey, new OperationContext(OperationContextFieldName.OperationType, OperationContextOperationType.CacheOperation));

                                _notificationManager._context.NCacheLog.Error("DependencyListener.OnDependencyChanged", String.Format("Removing {0} because SQLDependency cannot be registered SqlNotificationEventArgs.Info is returned with Invalid status", instance.CacheKey));
                                CacheEntry ent = _notificationManager._context.CacheImpl.Remove(instance.CacheKey, ItemRemoveReason.DependencyInvalid, true, null, 0, LockAccessType.IGNORE_LOCK, new OperationContext(OperationContextFieldName.OperationType, OperationContextOperationType.CacheOperation));

                                if (ent != null)
                                {
                                    _notificationManager._context.CacheImpl.RemoveCascadingDependencies(instance.CacheKey, ent, new OperationContext(OperationContextFieldName.OperationType, OperationContextOperationType.CacheOperation));
                                }

                                if (ent != null && ((CacheEntry)ent).Value is CallbackEntry)
                                {
                                    CallbackEntry cbEtnry = ((CacheEntry)ent).Value as CallbackEntry;
                                    if (cbEtnry != null && cbEtnry.ItemRemoveCallbackListener != null && cbEtnry.ItemRemoveCallbackListener.Count > 0)
                                    {
                                        _notificationManager._context.CacheInternal.NotifyCustomRemoveCallback(instance.CacheKey, cbEtnry, ItemRemoveReason.DependencyInvalid, true, null, null);
                                    }
                                }

                                lock (_notificationManager._context.ExpiryMgr.NotifBasedDepManager.NotifBasedDependencyListeners.SyncRoot)
                                {
                                    _notificationManager._context.ExpiryMgr.NotifBasedDepManager.Remove(instance.CacheKey);
                                }
                            }
                        }
                    }
                    catch (Exception exception)
                    {
                        _notificationManager._context.NCacheLog.Error("DependencyListener.OnDependencyChanged", exception.ToString());
                    }
                }
            }