Beispiel #1
0
        private void LoadAlternateAes()
        {
            if (!_aeTitlesLoaded)
            {
                lock (_syncLock)
                {
                    if (!_aeTitlesLoaded)
                    {
                        using (var context = new ServerExecutionContext())
                        {
                            var broker   = context.ReadContext.GetBroker <IServerPartitionAlternateAeTitleEntityBroker>();
                            var criteria = new ServerPartitionAlternateAeTitleSelectCriteria();
                            criteria.ServerPartitionKey.EqualTo(this.Key);
                            _alternateAeTitles = broker.Find(criteria);
                        }

                        _aeTitlesLoaded = true;
                    }
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Internal method for loading partition information fromt he database.
        /// </summary>
        private void LoadPartitions()
        {
            bool changed = false;

            lock (_partitionsLock)
            {
                try
                {
                    var templist   = new Dictionary <string, ServerPartition>();
                    var tempAeList = new Dictionary <string, ServerPartitionAlternateAeTitle>();

                    IPersistentStore store = PersistentStoreRegistry.GetDefaultStore();
                    using (IReadContext ctx = store.OpenReadContext())
                    {
                        var broker   = ctx.GetBroker <IServerPartitionEntityBroker>();
                        var criteria = new ServerPartitionSelectCriteria();
                        IList <ServerPartition> list = broker.Find(criteria);
                        foreach (ServerPartition partition in list)
                        {
                            if (IsChanged(partition))
                            {
                                changed = true;
                            }

                            templist.Add(partition.AeTitle, partition);
                        }

                        var aeBroker   = ctx.GetBroker <IServerPartitionAlternateAeTitleEntityBroker>();
                        var aeCriteria = new ServerPartitionAlternateAeTitleSelectCriteria();
                        IList <ServerPartitionAlternateAeTitle> aeList = aeBroker.Find(aeCriteria);
                        foreach (ServerPartitionAlternateAeTitle partitionAe in aeList)
                        {
                            if (IsChanged(partitionAe))
                            {
                                changed = true;
                            }

                            tempAeList.Add(partitionAe.AeTitle, partitionAe);
                        }
                    }

                    if (_partitions.Count != templist.Count)
                    {
                        changed = true;
                    }
                    if (_alternateAeTitles.Count != tempAeList.Count)
                    {
                        changed = true;
                    }

                    _partitions        = templist;
                    _alternateAeTitles = tempAeList;

                    if (changed && _changedListener != null)
                    {
                        EventsHelper.Fire(_changedListener, this, new ServerPartitionChangedEventArgs(this));
                    }
                }
                catch (Exception ex)
                {
                    Platform.Log(LogLevel.Error, ex,
                                 "Unexpected exception when loading partitions, possible database error.  Operation will be retried later");
                }
            }// lock
        }