Skip to content

Examples

This section collects example projects and records their verification status alongside the documentation.

The focus is on small, focused examples that demonstrate specific JoinedWorkz concepts:

  • how to structure CMN and profile models
  • how to wire the Maven plugin and facilities
  • how generation and outlet overrides work in real projects

More examples will be added over time.

Status baseline — checked 2026-07-26

The self-contained documentation quickstart targets JoinedWorkz 1.3.80, Java 21 and Maven 3.9+. The public quickstart repository has a different, older status described below. The canonical Spring Boot example is the example-spring-boot module from release/1.3.80.


1. JoinedWorkz quickstart

The standalone example project was inspected at immutable commit 58af7168b7fa:

That inspected revision uses JoinedWorkz 1.3.77 and has not yet passed the release 1.3.80 documentation gate. Do not use its POM as the version baseline for this documentation. Until the example is refreshed, follow the self-contained Quickstart, which uses JoinedWorkz 1.3.80, Java 21 and Maven 3.9 or newer.

After the planned refresh and verification, it can again serve as a reference, experiment starting point and project template.


2. How the quickstart maps to the documentation

After its planned release refresh, the quickstart repository will mirror the structure of this documentation:

  • Get Started / Quickstart
    shows how to set up the Maven build and run the generator once.

  • Reference sections
    (CMN reference, profile reference, Maven plugin reference) explain the syntax and configuration that you can see in the example project.

Whenever a guide mentions a CMN fragment or a Maven snippet, you should be able to compare it with the relevant canonical example. The customer CRUD model used by the REST and Spring Boot guides belongs to the separate Spring Boot example described below, not to the quickstart repository.


3. Planned example categories

Over time, more example projects are planned, for example:

  • REST backend with persistence
    combining API modelling with entities mapped to a database.

  • Multi-module setup with outlet overrides
    model in one module, generate OpenAPI, DTOs and backend code into separate sibling modules.

  • Custom generator and platform extensions
    small facility that adds a profile, cartridges and strategies on top of the existing platforms.

  • Integration into an existing Java project
    use JoinedWorkz models to generate only selected artefacts (e.g. OpenAPI or DTOs) and wire them into an existing codebase.

These categories are a roadmap rather than a fixed list. The exact projects may evolve over time as JoinedWorkz and its usage patterns develop.

If you have a concrete scenario that would be useful as an example, you can use the contact information on the JoinedWorkz website to propose it.

4. Spring Boot CRUD example

In addition to the Base-only quickstart there is a Spring Boot example that demonstrates how the SpringBoot facility and its entity CRUD generators work together:

The source used for the verification was commit df7cabf7f21b.

The example contains:

  • a customer entity model,
  • an API model that uses the createEntity, readEntity, updateEntity, queryEntities and deleteEntity method types,
  • a component model that provides the customer resource and names its controller,
  • generated Spring Boot controllers,
  • generated DataAccessService classes for persistence,
  • generated mapper interfaces between DTOs and entities.
  • a manually maintained Spring Boot application shell.

The API model for the customer CRUD endpoints looks roughly like this:

cmn
api package org.joinedworkz.examples.customer.api

import org.joinedworkz.examples.customer

import org.joinedworkz.facilities.profiles.springboot
import org.joinedworkz.facilities.springboot.api

platform SpringBoot

resource /customers as Customer[] by id {

    queryEntities()
    createEntity()
    readEntity()
    updateEntity()
    deleteEntity()  
}

abstract resource /address as Address { }

The component model binds that resource to the generated HTTP boundary:

cmn
package org.joinedworkz.examples.backend

import org.joinedworkz.examples.customer.api
import org.joinedworkz.facilities.profiles.springboot

platform SpringBoot

component CustomerBackend
    basePackage='org.joinedworkz.examples.customer.webapp' {

    provide /customers
        subPackage='customers.v1'
        controller="CustomerV1Controller" {
    }
}

Together, the domain, API and component models generate under src/generated/**:

  • CustomerV1Controller and its API interface from the component's provide /customers boundary,
  • CustomerDataAccessService with CRUD operations,
  • a mapper interface between API DTOs and the entity type,
  • wiring between controller and data access service, including mapping.

The Base cartridge also writes the model-scoped customer API document and an additional CustomerBackend OpenAPI document aggregating all endpoints provided by that component.

Release 1.3.80 generation, main-source compilation and packaging were verified offline with Java 21.0.8 and Maven 3.9.16 on 2026-07-26. The generated CustomersResourceIT is not registered as a Maven test source and was therefore neither compiled nor executed. Runtime startup and CRUD endpoint smoke tests are still pending, so this module is not yet presented as a verified runnable reference.