@Override public SagaInstance find(String sagaType, String sagaId) { logger.info("finding {} {}", sagaType, sagaId); Set<DestinationAndResource> destinationsAndResources = new HashSet<>(jdbcTemplate.query( selectFromSagaInstanceParticipantsSql, (rs, rownum) -> new DestinationAndResource(rs.getString("destination"), rs.getString("resource")), sagaType, sagaId)); return DataAccessUtils.requiredSingleResult(jdbcTemplate.query( selectFromSagaInstanceSql, (rs, rownum) -> new SagaInstance(sagaType, sagaId, rs.getString("state_name"), rs.getString("last_request_id"), new SerializedSagaData(rs.getString("saga_data_type"), rs.getString("saga_data_json")), destinationsAndResources), sagaType, sagaId)); // TODO insert - sagaInstance.getDestinationsAndResources(); }
@Override public SagaInstance find(String sagaType, String sagaId) { logger.info("finding {} {}", sagaType, sagaId); Set<DestinationAndResource> destinationsAndResources = new HashSet<>(jdbcTemplate.query( selectFromSagaInstanceParticipantsSql, (rs, rownum) -> new DestinationAndResource(rs.getString("destination"), rs.getString("resource")), sagaType, sagaId)); return DataAccessUtils.requiredSingleResult(jdbcTemplate.query( selectFromSagaInstanceSql, (rs, rownum) -> new SagaInstance(sagaType, sagaId, rs.getString("state_name"), rs.getString("last_request_id"), new SerializedSagaData(rs.getString("saga_data_type"), rs.getString("saga_data_json")), destinationsAndResources), sagaType, sagaId)); // TODO insert - sagaInstance.getDestinationsAndResources(); }
@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; }
private SagaInstance makeExpectedSagaInstanceAfterSecondStep() { return new SagaInstance(sagaType, sagaId, "state-B", requestId2.asString(), SagaDataSerde.serializeSagaData(sagaDataUpdatedByReplyHandler), Collections.emptySet()); }
private SagaInstance makeExpectedSagaInstanceAfterFirstStep() { return new SagaInstance(sagaType, sagaId, "state-A", requestId1.asString(), SagaDataSerde.serializeSagaData(sagaDataUpdatedByStartingHandler), Collections.emptySet()); }
@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; }