Architecture overview
MintJams CMS is a JCR-based operations platform built on OSGi (Apache Felix). It splits into the server (OSGi bundles) and the browser-based virtual desktop (the Webtop client).
Runtime stack
- Apache Felix / OSGi — the modular server runtime
- JCR repository (JSR 283) — the content store; isolated per workspace, embedded H2 by default, an external datasource in a cluster
- SAML 2.0 SP / IdP — single sign-on. The
systemworkspace is the global identity store (/home/users|groups|roles). It boots with zero configuration fromCMS_PUBLIC_BASE_URL - Camunda BPM 7 — the BPMN 2.0 process engine (per workspace)
- Apache Camel 4 — the EIP integration engine (per workspace)
- Apache Groovy / GSP — server-side scripting (Groovy Server Pages)
- Apache Tika / Lucene — document analysis and full-text search (with Japanese morphological analysis)
- GraphQL API — the entry point for all data access and subscriptions
- Webtop client — the browser virtual desktop and standard apps
Server vs. client
| Part | Location | Tech |
|---|---|---|
| Server (bundles) | bundles/ |
Java / OSGi |
| Client (Webtop) | webtop/ |
TypeScript / Rollup |
The server runs on Apache Felix; the Webtop is served as JCR content. The Webtop receives server-published events over GraphQL subscriptions.
Bundle catalog (excerpt)
| Bundle | Role |
|---|---|
org.mintjams.jcr |
JCR (JSR-283) repository implementation |
org.mintjams.rt.jcr |
JCR runtime (workspaces, sessions, index integration) |
org.mintjams.cms |
CMS security, SAML SP/IdP implementations |
org.mintjams.rt.cms |
runtime CMS (workspace management, GraphQL, provisioning, Camel/Camunda, EventAdmin bridges, Groovy) |
org.mintjams.idp / org.mintjams.saml2 |
SAML 2.0 IdP / SP |
org.mintjams.searchindex / org.mintjams.rt.searchindex |
full-text search (Lucene) |
org.apache.camel / org.camunda.bpm |
EIP / BPM engines |
org.apache.groovy / org.apache.tika |
scripting / document analysis |
Concepts a developer should know
- Workspaces — the unit of deployment and isolation. Each has its own DB, index, schemas and engines, and shares
systemidentity - Sessions & the JCR API — read/write and query content via
javax.jcr.Session. EventAdmin events are posted only on transaction commit - Scripts / GSP — run in a per-workspace Groovy engine; a session can be adapted to
javax.jcr.Sessionfor direct JCR access - deploy() —
Session.deploy()runs once at workspace startup, idempotently applying content frometc/jcr/deploy/and provisioning frometc/jcr/provisioning/*.yml
Related
- Custom apps: "Building apps"
- Data model: "JCR data model & schema"
- Extensions & integration: "OSGi extensions & BPM/EIP"