Quarkus
R2D1 1.8.0에 포함
선택적인 R2D1 확장은 동일한 컬렉션 API를 Quarkus CDI 설정에 연결합니다. 검증 기준은 Quarkus 3.39.5와 Java 21+이며, 관리형 JDBC 가상 스레드는 Java 25+가 필요합니다.
의존성별 필요 여부
모든 Quarkus 연동에 필수: dev.nexcraft:r2d1-quarkus:1.8.0. 이 artifact가 core dev.nexcraft:r2d1을 전이 의존성으로 포함하므로 core를 따로 선언하지 않습니다. Quarkus가 확장 descriptor를 통해 r2d1-quarkus-deployment를 자동으로 해결합니다.
implementation("dev.nexcraft:r2d1-quarkus:1.8.0")Quarkus 애플리케이션은 framework 버전을 맞추기 위해 Quarkus platform/BOM을 사용합니다. Gradle plugin이나 애플리케이션이 이미 platform을 가져오면 BOM을 중복 추가하지 마세요.
backend 선택: 기본 R2 + D1 조합은 r2d1에 포함된 adapter를 사용합니다. Filesystem 또는 JDBC adapter는 해당 backend를 선택할 때만 필요합니다.
Filesystem + JDBC + H2 선택 의존성
아래 filesystem + JDBC + H2 구성에만 필수: R2D1 adapter 두 개, H2 JDBC 드라이버, Quarkus 관리 datasource용 Agroal입니다. 다른 DB나 애플리케이션 소유 datasource에는 해당 드라이버와 연결 풀을 사용합니다. Quarkus 확장 버전은 Quarkus platform이 관리합니다.
implementation("dev.nexcraft:r2d1-filesystem:1.8.0")
implementation("dev.nexcraft:r2d1-jdbc:1.8.0")
implementation("io.quarkus:quarkus-jdbc-h2")
implementation("io.quarkus:quarkus-agroal")활성화와 설정
통합은 기본적으로 비활성화됩니다. 애플리케이션 CDI DocumentCodec을 제공해야 하며 기본 JSON codec은 없습니다. 생성자로 R2D1을 주입해 공통 컬렉션 API를 사용하세요. 아래 예제에는 documents라는 애플리케이션 소유 Executor와 선택한 Quarkus datasource도 필요합니다.
quarkus.r2d1.enabled=true
quarkus.r2d1.document.type=filesystem
quarkus.r2d1.index.type=jdbc
quarkus.r2d1.filesystem.root-directory=./documents
quarkus.r2d1.filesystem.executor=documents
quarkus.r2d1.jdbc.datasource=selected
quarkus.datasource.selected.db-kind=h2
quarkus.datasource.selected.jdbc.url=jdbc:h2:mem:documents;DB_CLOSE_DELAY=-1
quarkus.datasource.selected.devservices.enabled=false
quarkus.r2d1.jdbc.max-concurrency=4
quarkus.r2d1.jdbc.max-pending=64애플리케이션 빈과 리소스 소유권
애플리케이션 facade, factory, 저장소 빈으로 기본 producer를 대체할 수 있습니다. 사용자 정의 IndexStore에는 해당 저장소의 CollectionInitializer가 필요합니다. 정확한 CDI 이름 또는 Quarkus datasource 이름으로 리소스를 선택합니다. 애플리케이션이 제공한 client, executor, datasource는 빌려 사용하며, 확장이 생성한 리소스는 종료나 시작 실패 시 정리합니다.
JDBC는 기본적으로 제한된 플랫폼 스레드 실행을 사용합니다. Java 25+에서 quarkus.r2d1.jdbc.execution-mode=virtual-thread를 명시해 가상 스레드를 선택하세요. 이름 지정 executor와 명시적 실행 모드는 함께 설정할 수 없습니다. 컬렉션 schema 초기화는 지연 실행됩니다.
네이티브 이미지 검증
Filesystem/H2 CRUD와 인덱스 쿼리는 JVM, 패키징된 JVM, GraalVM CE 25.0.2 / macOS arm64 네이티브 프로세스에서 통과했습니다. 문서 타입의 reflection 등록을 명시하세요. Smoke 애플리케이션에는 네이티브 checksum 타입 해결을 위한 AWS CRT 0.48.4가 포함됩니다. Linux CI 실행, 실제 Cloudflare 호출, R2/D1 네이티브 전송, 로컬 어댑터 소스 hot reload는 아직 검증되지 않았습니다.
