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"} Co dalej?
Pełny przewodnik omawia typy pól, tekst sformatowany, załączniki, zapytania, Virtual Views, changefeed, publikowanie na serwerze, synchronizację, dodawanie użytkowników i wywoływanie klienta z Javy.