Skip to main content

Java Runtime Overview

TeaQL Java is now a modular Java runtime, not only a Spring Boot starter. The source tree contains Spring Boot, Quarkus, Micronaut, portable SQL, and database-specific integration modules around shared runtime contracts.

Evidence boundary: the current Maven plugin 1.1.0 can discover dynamic targets and generate java-lib-core against teaql-java 1.528-RELEASE. The current generated Java workspace and complete Order Search matrix build and execute across the documented providers. Module presence still does not by itself prove a released artifact or a supported framework/provider lifetime; consult the Java Compatibility Guide and the dated matrix before adoption.

Current Module Layout

ModulePurpose
teaqlCore entities, requests, criteria, metadata, policy, audit logging, and runtime contracts.
teaql-utilsShared runtime utilities.
teaql-sqlSQL repository implementation based on spring-jdbc.
teaql-autoconfigureSpring Boot auto-configuration.
teaql-starterModule directory for the compatibility starter artifact teaql-spring-boot-starter.
teaql-quarkusQuarkus CDI integration and JDBC-backed TeaQLDatabase.
teaql-micronautMicronaut factory integration and JDBC-backed TeaQLDatabase.
teaql-sql-portablePortable SQL repository through TeaQLDatabase; currently designed mainly for Android, but it has no Android SDK dependency.
teaql-sqlite, teaql-mysql, teaql-mssql, teaql-oracle, teaql-db2, teaql-hana, teaql-duck, teaql-snowflakeDatabase-specific SQL modules.
teaql-memoryIn-memory repository support.
teaql-graphqlGraphQL integration.

Dependency Entry Points

The source modules define the following intended dependency entry points. Verify the selected artifact in the TeaQL Maven repository and build the generated workspace before treating the combination as supported.

The Spring Boot compatibility starter coordinate is:

<dependency>
<groupId>io.teaql</groupId>
<artifactId>teaql-spring-boot-starter</artifactId>
<version>1.528-RELEASE</version>
</dependency>

The Quarkus source integration is named:

<dependency>
<groupId>io.teaql</groupId>
<artifactId>teaql-quarkus</artifactId>
<version>1.528-RELEASE</version>
</dependency>

The Micronaut source integration is named:

<dependency>
<groupId>io.teaql</groupId>
<artifactId>teaql-micronaut</artifactId>
<version>1.528-RELEASE</version>
</dependency>

Android-focused projects should use teaql-sql-portable and provide a platform-backed TeaQLDatabase implementation. The module name is intentionally not teaql-android because it does not depend on Android SDK classes.

Discover the Current Generation Target

Generation targets are supplied dynamically by the TeaQL service, not frozen in the Maven plugin. With plugin 1.1.0, inspect the live catalog immediately before generation:

mvn io.teaql:teaql-maven-plugin:1.1.0:list-services
mvn io.teaql:teaql-maven-plugin:1.1.0:generate \
-Dinput=model \
-Dservice=java-lib-core \
-Doutput=output

java-lib-core is the target verified on 2026-07-13; it is an observed catalog result, not a permanent allowlist. Select the target returned by your current list-services output and inspect the emitted dependency set.

Request Execution Contract

Generated query requests are built first and executed only after intent is declared. The current pattern is:

Q.orders()
.filterByMerchant(ctx.getMerchant())
.selectLineItemList(Q.lineItems().selectSku())
.comment("Load merchant orders")
.purpose("Render the order list")
.executeForList(ctx);

purpose(...) is the terminal builder method. It returns an ExecutableRequest, so select/filter/order/page calls must come before .comment(...).purpose(...).

For a single row, use executeForOne(...):

Order order = Q.orders()
.filterById(orderId)
.comment("Load order")
.purpose("Open the order detail page")
.executeForOne(ctx);

Mutation code should declare audit intent before save:

order.updateStatusToShipped()
.auditAs("Ship order")
.save(ctx);

Runtime Policy

RequestPolicy is the runtime guardrail for request and mutation intent. The default PurposeRequestPolicy can reject queries without .comment() and .purpose(), and mutations without audit comments.

Projects can install their own policy through UserContext:

ctx.setRequestPolicy(new PurposeRequestPolicy());

Framework integrations provide default beans for RequestPolicy, LogManager, DataStore, LockService, Translator, and EntityMetaFactory, and applications can replace them with project-specific implementations.

JPMS Boundary

The Java runtime uses module-info.java to keep generated-code APIs public and implementation packages controlled. Application code should use generated entities, Q requests, E expressions, UserContext, RequestPolicy, and the documented framework modules. Internal resolver and repository implementation packages are not stable application extension points.