public void Dispose()
 {
     _isCompleted = true;
     _cancellationTokenSource.Cancel();
     _eventStream.Dispose();
     _cancellationTokenSource.Dispose();
 }
Esempio n. 2
0
 protected override void Dispose(bool disposing)
 {
     if (disposing)
     {
         eventStream.Dispose();
     }
     base.Dispose(disposing);
 }
Esempio n. 3
0
        protected virtual void Dispose(bool disposing)
        {
            if (_isCompleted)
            {
                if (disposing)
                {
                    _cancellationTokenSource.Cancel();
                    _serviceScope.Dispose();
                    _eventStream.Dispose();
                    _cancellationTokenSource.Dispose();
                }

                _isCompleted = true;
            }
        }
Esempio n. 4
0
        /// <summary>
        /// The commit aggregate.
        /// </summary>
        /// <param name="aggregate">
        /// The aggregate.
        /// </param>
        /// <param name="commitId">
        /// The commit id.
        /// </param>
        /// <exception cref="InvalidOperationException">
        /// </exception>
        /// <exception cref="ConcurrencyException">
        /// </exception>
        private void CommitAggregate(Aggregate aggregate, Guid commitId)
        {
            // Aggregate identifier has bucket id concatenated with stream id
            var parts = aggregate.Identifier.Split('#');

            if (parts.Length > 2)
            {
                throw new InvalidOperationException();
            }

            IEventStream stream = null;

            try
            {
                // Open or create the stream for this aggregate
                if (parts.Length == 2)
                {
                    stream = _storeEvents.OpenStream(parts[0], parts[1], 0, int.MaxValue);
                }
                else
                {
                    stream = _storeEvents.OpenStream(parts[0], 0);
                }

                // Concurrency check
                if (stream.StreamRevision != aggregate.ExpectedVersion)
                {
                    throw new ConcurrencyException();
                }

                // Write each event to the underlying stream
                foreach (var eventObject in aggregate.Root.GetChanges())
                {
                    // Create new message
                    var message = new EventMessage {
                        Body = eventObject
                    };

                    /*// If the aggregate is derived from ITenantAggregate
                     * //   then store TenantId in the message headers
                     * //   as this will be used later to determine the servicebus
                     * //   partition to use for enterprise-level routing
                     * var tenantAggregate = aggregate.Root as ITenantAggregate;
                     * if (tenantAggregate != null)
                     * {
                     *  message.Headers.Add("TenantId", tenantAggregate.TenantId);
                     * }*/

                    // Add message to the event store
                    stream.Add(message);
                }

                // Commit the stream
                stream.CommitChanges(commitId);
            }
            finally
            {
                if (stream != null)
                {
                    stream.Dispose();
                    stream = null;
                }
            }
        }
 public void ShutDown()
 {
     _stream.Dispose();
     _store.Dispose();
 }