micronaut-data: JdbcRespository methods Deadlock - Circular dependencies with Hazelcast getMap() in a repository setup.
MN 1.3.3 MN Data 1.0.1 Kotlin 1.3.50
Consider:
@JdbcRepository(dialect = Dialect.H2)
interface MapStoreRepository : CrudRepository<MapObjectEntity, UUID> {
fun listKey(): List<UUID>
fun deleteByKeyIn(key: List<UUID>)
}
@Singleton
class H2MapStore(
private val persistenceRepository: MapStoreRepository
) : MapStore<UUID, HazelcastCrudableObject<UUID>> {
init {
println(persistenceRepository.count())
}
...
override fun loadAllKeys(): MutableIterable<UUID> {
println(persistenceRepository.count())
val keys = persistenceRepository.listKey().toMutableList()
}
...
}
If .count() is called in init{}
then everything works when loadAllKeys() is called. If the init{} is not there, then when loadAllKeys() is called, it hangs on println(persistenceRepository.count())
, where .count() never sees to returned / blocked thread?
About this issue
- Original URL
- State: closed
- Created 4 years ago
- Comments: 17 (5 by maintainers)
Might help using
lazy
(https://kotlinlang.org/docs/reference/delegated-properties.html) onThis appears to be being called in the constructor which is initializing parts of hazelcast that then have a circular dependency because it comes back into your
H2MapStore
: