← Wszystkie platformy

Szybki start: Kotlin i Java

Pod koniec tej strony będziesz mieć program w Kotlinie, który tworzy szyfrowany end-to-end magazyn dokumentów, zapisuje zadanie i odczytuje je z powrotem. Ten sam klient działa z Javy, Springa, Ktora i każdego innego backendu JVM.

Jak to działa

Klient JVM steruje prawdziwym silnikiem MindooDB, który działa w małym sidecarze Node.js na tej samej maszynie. Komunikują się przez uwierzytelniony WebSocket na interfejsie loopback, a każda sesja użytkownika dostaje własny proces, więc odszyfrowane klucze nigdy się nie mieszają. Szyfrowanie, podpisy, synchronizacja i kontrola dostępu to ten sam kod, który działa w Node.js, przeglądarkach i React Native.

1) Pobierz klienta i sidecar

Potrzebujesz JDK 21+ i Node.js 22.13+. Sklonuj oba projekty obok siebie i zbuduj sidecar:

git clone https://github.com/klehmann/mindoodb-jvm-bridge.git
git clone https://github.com/klehmann/mindoodb-kmp-client.git

cd mindoodb-jvm-bridge && npm install && npm run build && cd ..

Następnie dodaj klienta do swojego buildu Gradle, na przykład jako dołączony build w settings.gradle.kts:

// settings.gradle.kts
includeBuild("../mindoodb-kmp-client")

// build.gradle.kts
dependencies {
    implementation("com.mindoo.db:mindoodb-kmp-client:0.0.1")
}

2) Utwórz Main.kt

Sidecar.start uruchamia silnik. createTenant generuje wszystkie klucze kryptograficzne i rejestruje pierwszego użytkownika w jednym kroku. Potem otwieramy sesję, tworzymy dokument i odczytujemy go z powrotem — każda zmiana jest podpisywana i szyfrowana przed zapisaniem.

import com.mindoo.db.bridge.*
import java.nio.file.Paths
import kotlinx.coroutines.runBlocking

fun main() = runBlocking {
    // Starts the Node.js sidecar that runs the MindooDB engine
    val sidecar = Sidecar.start(
        Paths.get("../mindoodb-jvm-bridge/dist/index.js"),
        Paths.get("./mindoodb-data"),
    )

    // One call creates admin + user keys, KeyBag, and directory
    MindooDBBridge.createTenant(
        sidecar.endpoint,
        tenantId = "my-first-tenant",
        adminName = "cn=admin/o=demo", adminPassword = "admin-password",
        userId = "cn=alice/o=demo", password = "user-password",
        databases = listOf("todos"),
    )
    val session = MindooDBBridge.openSession(
        sidecar.endpoint, "my-first-tenant", "cn=alice/o=demo",
        "user-password", listOf("todos"),
    )

    // Create a todo document and read it back
    val todos = session.database("todos")
    val todo = todos.documents.create(mapOf("title" to "Buy milk", "done" to false))
    println("Loaded todo: " + todos.documents.get(todo.id).data)

    session.close()
    sidecar.stop()
}

3) Uruchom

./gradlew run

Oczekiwany wynik:

Loaded todo: {"_attachments":[],"done":false,"title":"Buy milk"}
Masz teraz lokalny, szyfrowany end-to-end magazyn dokumentów na JVM. Każda zmiana jest podpisywana kryptograficznie i szyfrowana przed zapisaniem.