Skip to main content

Generate Java Package

After a domain model is ready, TeaQL can generate a Java package that application teams use from their services.

The common flow is:

Get license
-> model domain
-> generate Java package
-> commit and wait for CI
-> consume the package from Gradle

Define the Root Model​

A root model can declare package-level identity such as service name, organization, and version:

<?xml version="1.0"?>
<root name="cmes" org="doublechaintech" version="118">
<_include file="cmes.xml"/>
</root>

The included model files define the business domain. The root file defines the generation target.

Generate the Package​

Generation can run through the TeaQL generation process and CI pipeline. The important output is a versioned package that application services can depend on.

The package should be treated as generated output:

  • update the model first;
  • regenerate the package;
  • do not hand-edit generated source files;
  • keep application-specific behavior in extension points and service code.

Use from Gradle​

After the package is published, application code can consume it through Gradle as a normal dependency.

The generated package gives the application:

  • entities;
  • Q query APIs;
  • E safe expressions;
  • checker and validation hooks;
  • runtime integration points;
  • generated request and selection APIs.

Application Code​

Application code should use the generated APIs:

Q.orders()
.filterByMerchant(ctx.getMerchant())
.selectLineItemList(Q.lineItems().selectSku())
.comment("Query merchant orders")
.purpose("Load orders for the current page")
.executeForList(ctx);

If the model changes, regenerate the package instead of manually patching generated code.