public static Create ( long actual, long expected, IIdentity id, IList |
||
actual | long | |
expected | long | |
id | IIdentity | |
serverEvents | IList |
|
return | OptimisticConcurrencyException, |
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()); } }
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()); } }
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); } }
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); } }
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); } }
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()); } }
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()); } }
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()); } }
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); } }