Create() public static method

public static Create ( long actual, long expected, IIdentity id, IList serverEvents ) : OptimisticConcurrencyException,
actual long
expected long
id IIdentity
serverEvents IList
return OptimisticConcurrencyException,
Beispiel #1
0
        protected void ThrowOnWrongEvent(IInOutStateEvent stateEvent)
        {
            var id = new System.Text.StringBuilder();

            id.Append("[").Append("InOut|");

            var stateEntityId = this.DocumentNumber;                    // Aggregate Id
            var eventEntityId = stateEvent.StateEventId.DocumentNumber; // EntityBase.Aggregate.GetStateEventIdPropertyIdName();

            if (stateEntityId != eventEntityId)
            {
                throw DomainError.Named("mutateWrongEntity", "Entity Id {0} in state but entity id {1} in event", stateEntityId, eventEntityId);
            }
            id.Append(stateEntityId).Append(",");

            id.Append("]");

            var stateVersion = this.Version;
            var eventVersion = stateEvent.StateEventId.Version;

            if (stateVersion != eventVersion)
            {
                throw OptimisticConcurrencyException.Create(stateVersion, eventVersion, id.ToString());
            }
        }
        protected void ThrowOnWrongEvent(IInventoryItemRequirementEvent e)
        {
            var id = new System.Text.StringBuilder();

            id.Append("[").Append("InventoryItemRequirement|");

            var stateEntityId = this.InventoryItemRequirementId; // Aggregate Id
            var eventEntityId = e.InventoryItemRequirementEventId.InventoryItemRequirementId;

            if (stateEntityId != eventEntityId)
            {
                throw DomainError.Named("mutateWrongEntity", "Entity Id {0} in state but entity id {1} in event", stateEntityId, eventEntityId);
            }
            id.Append(stateEntityId).Append(",");

            id.Append("]");

            var stateVersion = this.Version;
            var eventVersion = e.InventoryItemRequirementEventId.Version;

            if (stateVersion != eventVersion)
            {
                throw OptimisticConcurrencyException.Create(stateVersion, eventVersion, id.ToString());
            }
        }
        protected void ThrowOnWrongEvent(IOrderItemShipGroupAssociationMvoEvent e)
        {
            var id = new System.Text.StringBuilder();

            id.Append("[").Append("OrderItemShipGroupAssociationMvo|");

            var stateEntityId = this.OrderItemShipGroupAssociationId; // Aggregate Id
            var eventEntityId = e.OrderItemShipGroupAssociationMvoEventId.OrderItemShipGroupAssociationId;

            if (stateEntityId != eventEntityId)
            {
                throw DomainError.Named("mutateWrongEntity", "Entity Id {0} in state but entity id {1} in event", stateEntityId, eventEntityId);
            }
            id.Append(stateEntityId).Append(",");

            id.Append("]");

            var stateVersion = this.OrderVersion;
            var eventVersion = e.OrderItemShipGroupAssociationMvoEventId.OrderVersion;

            if (stateVersion != eventVersion)
            {
                throw OptimisticConcurrencyException.Create(stateVersion, eventVersion, id.ToString());
            }
        }
Beispiel #4
0
        protected void ThrowOnWrongEvent(IAttributeSetInstanceExtensionFieldMvoStateEvent stateEvent)
        {
            var id = new System.Text.StringBuilder();

            id.Append("[").Append("AttributeSetInstanceExtensionFieldMvo|");

            var stateEntityId = this.AttributeSetInstanceExtensionFieldId;                    // Aggregate Id
            var eventEntityId = stateEvent.StateEventId.AttributeSetInstanceExtensionFieldId; // EntityBase.Aggregate.GetStateEventIdPropertyIdName();

            if (stateEntityId != eventEntityId)
            {
                throw DomainError.Named("mutateWrongEntity", "Entity Id {0} in state but entity id {1} in event", stateEntityId, eventEntityId);
            }
            id.Append(stateEntityId).Append(",");

            id.Append("]");

            var stateVersion = this.AttrSetInstEFGroupVersion;
            var eventVersion = stateEvent.StateEventId.AttrSetInstEFGroupVersion;

            if (stateVersion != eventVersion)
            {
                throw OptimisticConcurrencyException.Create(stateVersion, eventVersion, id.ToString());
            }
        }
Beispiel #5
0
        public virtual void AppendToStream(IIdentity id, long originalVersion, ICollection <IEvent> events)
        {
            if (events.Count == 0)
            {
                return;
            }

            var name = this.IdentityToString(id);
            var data = this.SerializeEvent(events.ToArray());

            try
            {
                this.AppendOnlyStore.Append(name, data, originalVersion);
            }
            catch (AppendOnlyStoreConcurrencyException e)
            {
                // load server events
                var server = this.LoadEventStream(id, 0, int.MaxValue);
                // throw a real problem
                throw OptimisticConcurrencyException.Create(server.Version, e.ExpectedStreamVersion, id, server.Events, events.ToList());
            }

            // technically there should be a parallel process that queries new changes
            // from the event store and sends them via messages (avoiding 2PC problem).
            // however, for demo purposes, we'll just send them to the console from here
            Console.ForegroundColor = ConsoleColor.DarkGreen;
            foreach (var @event in events)
            {
                Logger.DebugFormat("{0} r{1} Event: {2}", id, originalVersion, @event);
            }
        }
Beispiel #6
0
        public void AppendEventsToStream(string name, long streamVersion, ICollection <Event> events)
        {
            if (events.Count == 0)
            {
                return;
            }
            // functional events don't have an identity

            try
            {
                _msgStore.AppendToStore(name, streamVersion, events.Cast <object>().ToArray());
            }
            catch (AppendOnlyStoreConcurrencyException e)
            {
                // load server events
                var server = LoadEventStream(name);
                // throw a real problem
                throw OptimisticConcurrencyException.Create(server.StreamVersion, e.ExpectedStreamVersion, name, server.Events);
            }
            // sync handling. Normally we would push this to async
            foreach (var @event in events)
            {
                _msgHandler.Handle(@event);
            }
        }
Beispiel #7
0
        public async Task AppendToStream(IIdentity id, long expectedVersion, ICollection <IEvent> events)
        {
            if (events.Count == 0)
            {
                return;
            }

            var name = id.ToString();
            var data = this.serializer.SerializeEvent(events.ToArray());

            try
            {
                await this.appender.Append(name, data, expectedVersion);
            }
            catch (AppendOnlyStoreConcurrencyException e)
            {
                // load server events
                var server = await this.LoadEventStream(id, 0, int.MaxValue);

                // throw a real problem
                throw OptimisticConcurrencyException.Create(server.Version, e.ExpectedStreamVersion, id, server.Events);
            }

            foreach (var @event in events)
            {
                Logger.DebugFormat("{0} r{1} Event: {2}", id, expectedVersion, @event);
            }
        }
Beispiel #8
0
        protected void ThrowOnWrongEvent(IUserClaimStateEvent stateEvent)
        {
            var id = new System.Text.StringBuilder();

            id.Append("[").Append("UserClaim|");

            var stateEntityIdUserId = (this as IGlobalIdentity <UserClaimId>).GlobalId.UserId;
            var eventEntityIdUserId = stateEvent.StateEventId.UserId;

            if (stateEntityIdUserId != eventEntityIdUserId)
            {
                throw DomainError.Named("mutateWrongEntity", "Entity Id UserId {0} in state but entity id UserId {1} in event", stateEntityIdUserId, eventEntityIdUserId);
            }
            id.Append(stateEntityIdUserId).Append(",");

            var stateEntityIdClaimId = (this as IGlobalIdentity <UserClaimId>).GlobalId.ClaimId;
            var eventEntityIdClaimId = stateEvent.StateEventId.ClaimId;

            if (stateEntityIdClaimId != eventEntityIdClaimId)
            {
                throw DomainError.Named("mutateWrongEntity", "Entity Id ClaimId {0} in state but entity id ClaimId {1} in event", stateEntityIdClaimId, eventEntityIdClaimId);
            }
            id.Append(stateEntityIdClaimId).Append(",");

            id.Append("]");

            if (ForReapplying)
            {
                return;
            }
            var stateVersion = this.Version;
            var eventVersion = stateEvent.Version;

            if (UserClaimState.VersionZero == eventVersion)
            {
                eventVersion = stateEvent.Version = stateVersion;
            }
            if (stateVersion != eventVersion)
            {
                throw OptimisticConcurrencyException.Create(stateVersion, eventVersion, id.ToString());
            }
        }
Beispiel #9
0
        protected void ThrowOnWrongEvent(IAttributeSetInstanceExtensionFieldStateEvent stateEvent)
        {
            var id = new System.Text.StringBuilder();

            id.Append("[").Append("AttributeSetInstanceExtensionField|");

            var stateEntityIdGroupId = (this as IGlobalIdentity <AttributeSetInstanceExtensionFieldId>).GlobalId.GroupId;
            var eventEntityIdGroupId = stateEvent.StateEventId.GroupId;

            if (stateEntityIdGroupId != eventEntityIdGroupId)
            {
                throw DomainError.Named("mutateWrongEntity", "Entity Id GroupId {0} in state but entity id GroupId {1} in event", stateEntityIdGroupId, eventEntityIdGroupId);
            }
            id.Append(stateEntityIdGroupId).Append(",");

            var stateEntityIdIndex = (this as IGlobalIdentity <AttributeSetInstanceExtensionFieldId>).GlobalId.Index;
            var eventEntityIdIndex = stateEvent.StateEventId.Index;

            if (stateEntityIdIndex != eventEntityIdIndex)
            {
                throw DomainError.Named("mutateWrongEntity", "Entity Id Index {0} in state but entity id Index {1} in event", stateEntityIdIndex, eventEntityIdIndex);
            }
            id.Append(stateEntityIdIndex).Append(",");

            id.Append("]");

            if (ForReapplying)
            {
                return;
            }
            var stateVersion = this.Version;
            var eventVersion = stateEvent.Version;

            if (AttributeSetInstanceExtensionFieldState.VersionZero == eventVersion)
            {
                eventVersion = stateEvent.Version = stateVersion;
            }
            if (stateVersion != eventVersion)
            {
                throw OptimisticConcurrencyException.Create(stateVersion, eventVersion, id.ToString());
            }
        }
Beispiel #10
0
        protected void ThrowOnWrongEvent(IInOutLineStateEvent stateEvent)
        {
            var id = new System.Text.StringBuilder();

            id.Append("[").Append("InOutLine|");

            var stateEntityIdInOutDocumentNumber = (this as IGlobalIdentity <InOutLineId>).GlobalId.InOutDocumentNumber;
            var eventEntityIdInOutDocumentNumber = stateEvent.StateEventId.InOutDocumentNumber;

            if (stateEntityIdInOutDocumentNumber != eventEntityIdInOutDocumentNumber)
            {
                throw DomainError.Named("mutateWrongEntity", "Entity Id InOutDocumentNumber {0} in state but entity id InOutDocumentNumber {1} in event", stateEntityIdInOutDocumentNumber, eventEntityIdInOutDocumentNumber);
            }
            id.Append(stateEntityIdInOutDocumentNumber).Append(",");

            var stateEntityIdLineNumber = (this as IGlobalIdentity <InOutLineId>).GlobalId.LineNumber;
            var eventEntityIdLineNumber = stateEvent.StateEventId.LineNumber;

            if (stateEntityIdLineNumber != eventEntityIdLineNumber)
            {
                throw DomainError.Named("mutateWrongEntity", "Entity Id LineNumber {0} in state but entity id LineNumber {1} in event", stateEntityIdLineNumber, eventEntityIdLineNumber);
            }
            id.Append(stateEntityIdLineNumber).Append(",");

            id.Append("]");

            if (ForReapplying)
            {
                return;
            }
            var stateVersion = this.Version;
            var eventVersion = stateEvent.Version;

            if (InOutLineState.VersionZero == eventVersion)
            {
                eventVersion = stateEvent.Version = stateVersion;
            }
            if (stateVersion != eventVersion)
            {
                throw OptimisticConcurrencyException.Create(stateVersion, eventVersion, id.ToString());
            }
        }
Beispiel #11
0
        public void AppendEventsToStream(IIdentity id, long streamVersion, ICollection <IEvent> events)
        {
            if (events.Count == 0)
            {
                return;
            }
            // functional events don't have an identity
            var name = IdentityToKey(id);

            try
            {
                _store.AppendToStore(name, MessageAttribute.Empty, streamVersion, events.Cast <object>().ToArray());
            }
            catch (AppendOnlyStoreConcurrencyException e)
            {
                // load server events
                var server = LoadEventStream(id);
                // throw a real problem
                throw OptimisticConcurrencyException.Create(server.StreamVersion, e.ExpectedStreamVersion, id, server.Events);
            }
        }