콘텐츠로 이동
Bluetape4k 문서1.11

JCache와 HazelcastInstance 소유권

최신 안정판 Bluetape4k 1.11.0 릴리스 기준

SPI 자동 탐색이 아니라 명시적 provider다

섹션 제목: “SPI 자동 탐색이 아니라 명시적 provider다”

이 모듈의 META-INF/services/javax.cache.spi.CachingProvider 파일에는 provider class가 없습니다. HazelcastJCaching.cacheManagerOfHazelcastCachingProvider를 직접 만들고 propertiesByInstanceItself(hazelcastInstance)로 이미 연결된 instance를 manager에 넘깁니다.

val manager = HazelcastJCaching.cacheManagerOf(hazelcast)
val users = HazelcastJCaching.getOrCreate<String, User>(
hazelcastInstance = hazelcast,
name = "users-v1",
configuration = MutableConfiguration<String, User>().apply {
setTypes(String::class.java, User::class.java)
},
)

따라서 classpath의 기본 JCache provider가 Hazelcast라고 가정하지 않습니다. 여러 JCache provider를 함께 쓰는 애플리케이션에서도 이 factory 경로는 전달한 Hazelcast instance를 명시적으로 선택합니다.

cache identity는 cluster와 이름으로 결정된다

섹션 제목: “cache identity는 cluster와 이름으로 결정된다”

getOrCreate는 manager에서 같은 이름의 cache를 먼저 조회하고 없으면 설정으로 생성합니다. 같은 cluster에서 이름을 재사용하면 다른 애플리케이션이나 기능도 같은 분산 데이터를 볼 수 있습니다. 이름에 도메인과 schema 세대를 담는 편이 안전합니다.

val cacheName = "billing-users-v2"

MutableConfiguration.setTypes는 JCache typed lookup 계약을 분명하게 하지만 Hazelcast wire serialization 자체를 정의하지는 않습니다. value serializer와 schema 호환성은 cluster 설정에서 관리합니다.

HazelcastJCaching은 외부 HazelcastInstance를 받아 사용합니다. module source에는 shutdown() 호출이 없습니다. cache나 manager를 정리하는 것과 cluster client/member를 종료하는 것은 별개의 일입니다.

try {
users.put("42", user)
} finally {
users.close()
// application lifecycle owner closes hazelcast later
}

Near Cache의 close도 listener와 L1만 정리하며 IMap을 destroy하지 않습니다. 배포 종료, cache proxy 종료, 분산 데이터 폐기를 하나의 동작으로 묶지 않습니다.