![JAR search and dependency download from the Maven repository](/logo.png)
no.ks.kes.lib.Projections.kt Maven / Gradle / Ivy
package no.ks.kes.lib
import mu.KotlinLogging
import kotlin.system.exitProcess
private val log = KotlinLogging.logger {}
object Projections {
fun initialize(
eventSubscriberFactory: EventSubscriberFactory,
projections: Set,
projectionRepository: ProjectionRepository,
hwmId: String,
onError: (Exception) -> Unit = defaultOnCloseHandler
): S {
val validatedProjectionConfigurations = projections.map { projection -> projection.getConfiguration { eventSubscriberFactory.getSerializationId(it) } }
return eventSubscriberFactory.createSubscriber(
hwmId = hwmId,
onEvent = { wrapper ->
projectionRepository.transactionally {
validatedProjectionConfigurations.forEach {
it.accept(wrapper)
}
projectionRepository.hwmTracker.update(hwmId, wrapper.eventNumber)
}
},
fromEvent = projectionRepository.hwmTracker.getOrInit(hwmId),
onError = { onError.invoke(it) },
onLive = { projections.forEach { it.onLive() } }
)
}
}
val defaultOnCloseHandler = { exception: Exception ->
log.error(exception) { "Event subscription was closed. Shutting down." }
exitProcess(1)
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy