I know that ended sagas are deleted from the table, but I realized that saga tables are empty in the middle of the saga operation during debugging. What is the reason or problem about this situation?
Here is my saga and it’s store configuration
@Saga(sagaStore = "mySagaStore")
@Revision("1.0")
final class DailyAllocationSaga {
companion object {
const val DAILY_ALLOCATION_ASSOCIATION_PROPERTY = "advertisementId"
}
@Autowired
@Transient
@Qualifier("simpleCommandGateway")
private lateinit var commandGateway: CommandGateway
lateinit var allocationId: AllocationId
private set
lateinit var sellerId: SellerId
private set
lateinit var advertisementId: AdvertisementId
private set
lateinit var dailyAmount: Amount
private set
lateinit var totalSpentAmount: Amount
private set
var isPaused: Boolean = false
//TODO: timeout should be added
//TODO: caching can be added
@StartSaga
@SagaEventHandler(associationProperty = DAILY_ALLOCATION_ASSOCIATION_PROPERTY)
fun on(event: DailyAllocationCompleted) {
this.allocationId = event.allocationId
this.sellerId = event.sellerId
this.advertisementId = event.advertisementId
this.dailyAmount = event.dailyAmount
this.totalSpentAmount = event.totalSpentAmount
this.isPaused = event.isPaused
SagaLifecycle.associateWith("advertisementId", this.advertisementId)
commandGateway.send<Any>(
RefundAmount(
event.sellerId,
event.allocationId,
event.advertisementId,
event.refundAmount,
event.rewardAllocations
)
)
}
@SagaEventHandler(associationProperty = DAILY_ALLOCATION_ASSOCIATION_PROPERTY)
fun on(event: MoneyRefunded) {
if (isPaused) {
//TODO: kafkaya event birakmaca
SagaLifecycle.end()
}
commandGateway.send<Any>(
WithdrawAmount(
event.sellerId,
UUID.randomUUID().toString(),
AllocationType.DAILY_ALLOCATED_BUDGET_ALLOCATION,
event.advertisementId,
dailyAmount,
startDate = DateUtils.now(),
isDailyAllocation = true
)
)
}
@EndSaga
@SagaEventHandler(associationProperty = DAILY_ALLOCATION_ASSOCIATION_PROPERTY)
fun on(event: DailyMoneyWithdrawn) {
commandGateway.send<Any>(
CreateAllocation(
event.allocationId,
AllocationType.DAILY_ALLOCATED_BUDGET_ALLOCATION,
event.sellerId,
event.advertisementId,
event.amount,
event.withdrawnRewards,
spentAmountInPreviousAllocations = this.totalSpentAmount
)
)
//TODO: kafkaya event birakmaca
SagaLifecycle.end()
}
@EndSaga
@SagaEventHandler(associationProperty = DAILY_ALLOCATION_ASSOCIATION_PROPERTY)
fun on(event: MoneyWithdrawRejected) {
//TODO: publish event to kafka
SagaLifecycle.end()
}
.....
.....// from the configuration file
@Bean
fun mySagaStore(): SagaStore<*> {
return JpaSagaStore.builder()
.entityManagerProvider(entityManagerProvider)
.build()
}
}