Skip to main content

Apache Jena Fuseki TDB2 as Default Triple Store

  • Document Type: ADR
  • Status: Accepted
  • Date: 2026-02-12

Context

ABI's knowledge graph requires reliable SPARQL update support with ACID transaction guarantees. The existing adapters (filesystem, Oxigraph, AWS Neptune) each had gaps:

  • The filesystem adapter has no transactional semantics.
  • Oxigraph is lightweight but lacks full named graph operation support and is not production-proven at scale.
  • AWS Neptune is cloud-only and requires VPC setup, making local development impractical.

A shared, generic adapter test suite was also missing, making it hard to validate behavioral parity across implementations.

Decision

Add Apache Jena Fuseki with TDB2 as a first-class secondary adapter for TripleStoreService and make it the default in local development and production deployment templates.

Key design choices:

  • Named graph operations (create, clear, remove, insert, query) are defined at the port interface level so all adapters must implement them.
  • A reusable generic adapter test class validates consistent behavior across all triple store implementations.
  • Integration tests for Jena and Oxigraph are wired into CI on pull requests.
  • Local deploy templates default to Fuseki (docker compose up -d fuseki).

Consequences

Positive

  • ACID-compliant SPARQL transactions via TDB2.
  • Full named graph support with a consistent interface across adapters.
  • Shared test class ensures new adapters can be validated without writing tests from scratch.

Tradeoffs

  • Fuseki requires a running Docker container; purely offline development needs the filesystem adapter fallback.
  • TDB2 on-disk format is not portable across Jena versions without a migration step.
  • Adds a JVM dependency to the infrastructure stack.