@Override public void update(SagaInstance sagaInstance) { logger.info("Updating {} {}", sagaInstance.getSagaType(), sagaInstance.getId()); int count = jdbcTemplate.update(updateSagaInstanceSql, sagaInstance.getStateName(), sagaInstance.getLastRequestId(), sagaInstance.getSerializedSagaData().getSagaDataType(), sagaInstance.getSerializedSagaData().getSagaDataJSON(), sagaInstance.getSagaType(), sagaInstance.getId()); Assert.isTrue(count == 1, "Should be 1 : " + count); saveDestinationsAndResources(sagaInstance); }
@Override public void update(SagaInstance sagaInstance) { logger.info("Updating {} {}", sagaInstance.getSagaType(), sagaInstance.getId()); int count = jdbcTemplate.update(updateSagaInstanceSql, sagaInstance.getStateName(), sagaInstance.getLastRequestId(), sagaInstance.getSerializedSagaData().getSagaDataType(), sagaInstance.getSerializedSagaData().getSagaDataJSON(), sagaInstance.getSagaType(), sagaInstance.getId()); Assert.isTrue(count == 1, "Should be 1 : " + count); saveDestinationsAndResources(sagaInstance); }
private void saveDestinationsAndResources(SagaInstance sagaInstance) { for (DestinationAndResource dr : sagaInstance.getDestinationsAndResources()) { try { jdbcTemplate.update(insertIntoSagaInstanceParticipantsSql, sagaInstance.getSagaType(), sagaInstance.getId(), dr.getDestination(), dr.getResource() ); } catch (DuplicateKeyException e) { // do nothing } } }
private void saveDestinationsAndResources(SagaInstance sagaInstance) { for (DestinationAndResource dr : sagaInstance.getDestinationsAndResources()) { try { jdbcTemplate.update(insertIntoSagaInstanceParticipantsSql, sagaInstance.getSagaType(), sagaInstance.getId(), dr.getDestination(), dr.getResource() ); } catch (DuplicateKeyException e) { // do nothing } } }
@Override public SagaInstance create(Data sagaData, Optional<String> resource) { SagaInstance sagaInstance = new SagaInstance(getSagaType(), null, "????", null, SagaDataSerde.serializeSagaData(sagaData), new HashSet<>()); sagaInstanceRepository.save(sagaInstance); String sagaId = sagaInstance.getId(); resource.ifPresent( r -> Assert.isTrue(sagaLockManager.claimLock(getSagaType(), sagaId, r), "Cannot claim lock for resource")); SagaActions<Data> actions = getStateDefinition().start(sagaData); processActions(sagaId, sagaInstance, sagaData, actions); return sagaInstance; }
@Override public void save(SagaInstance sagaInstance) { sagaInstance.setId(idGenerator.genId().asString()); logger.info("Saving {} {}", sagaInstance.getSagaType(), sagaInstance.getId()); jdbcTemplate.update(insertIntoSagaInstanceSql, sagaInstance.getSagaType(), sagaInstance.getId(), sagaInstance.getStateName(), sagaInstance.getLastRequestId(), sagaInstance.getSerializedSagaData().getSagaDataType(), sagaInstance.getSerializedSagaData().getSagaDataJSON()); saveDestinationsAndResources(sagaInstance); }
@Override public void save(SagaInstance sagaInstance) { sagaInstance.setId(idGenerator.genId().asString()); logger.info("Saving {} {}", sagaInstance.getSagaType(), sagaInstance.getId()); jdbcTemplate.update(insertIntoSagaInstanceSql, sagaInstance.getSagaType(), sagaInstance.getId(), sagaInstance.getStateName(), sagaInstance.getLastRequestId(), sagaInstance.getSerializedSagaData().getSagaDataType(), sagaInstance.getSerializedSagaData().getSagaDataJSON()); saveDestinationsAndResources(sagaInstance); }
@Override public SagaInstance create(Data sagaData, Optional<String> resource) { SagaInstance sagaInstance = new SagaInstance(getSagaType(), null, "????", null, SagaDataSerde.serializeSagaData(sagaData), new HashSet<>()); sagaInstanceRepository.save(sagaInstance); String sagaId = sagaInstance.getId(); resource.ifPresent( r -> Assert.isTrue(sagaLockManager.claimLock(getSagaType(), sagaId, r), "Cannot claim lock for resource")); SagaActions<Data> actions = getStateDefinition().getStartingHandler().get().apply(sagaData); List<CommandWithDestination> commands = actions.getCommands(); sagaData = actions.getUpdatedSagaData().orElse(sagaData); sagaInstance.setLastRequestId(sendCommands(sagaId, commands)); sagaInstance.setSerializedSagaData(SagaDataSerde.serializeSagaData(sagaData)); publishEvents(sagaId, actions.getEventsToPublish(), actions.getUpdatedState()); Optional<String> possibleNewState = actions.getUpdatedState(); maybeUpdateState(sagaInstance, possibleNewState); maybePerformEndStateActions(sagaId, sagaInstance, possibleNewState); sagaInstanceRepository.update(sagaInstance); updateEnlistedAggregates(sagaId, actions.getEnlistedAggregates()); updateEventInstanceSubscriptions(sagaData, sagaId, sagaInstance.getStateName()); return sagaInstance; }
private void assertSagaInstanceEquals(SagaInstance expectedSagaInstance, SagaInstance sagaInstance) { assertEquals(expectedSagaInstance.getSagaType(), sagaInstance.getSagaType()); assertEquals(expectedSagaInstance.getId(), sagaInstance.getId()); assertEquals(expectedSagaInstance.getStateName(), sagaInstance.getStateName()); assertEquals(expectedSagaInstance.getLastRequestId(), sagaInstance.getLastRequestId()); assertEquals(expectedSagaInstance.getSerializedSagaData().getSagaDataType(), sagaInstance.getSerializedSagaData().getSagaDataType()); assertEquals(expectedSagaInstance.getSerializedSagaData().getSagaDataJSON(), sagaInstance .getSerializedSagaData().getSagaDataJSON()); }