Appearance
Glossary
This glossary explains key terms used in the JoinedWorkz documentation. It is intentionally compact and will be extended over time.
Core concepts
JoinedWorkz
A model-driven generation platform. You describe your system in a canonical model, JoinedWorkz transforms it and runs generators (cartridges) to produce artefacts such as OpenAPI specs, Java classes, diagrams, etc.
Canonical Model Notation (CMN)
The primary DSL for modelling domain types, APIs, components and applications. CMN files use the extension .cmn.
Profile DSL (.profil)
The DSL for defining platforms, stereotypes, strategies, outlets and cartridges. Profiles describe how a canonical model should be interpreted and what generators should run.
Facility
A Maven module that bundles everything needed for one or more platforms: profiles (.profil), CMN models (e.g. base types, method types), cartridges, generators, strategies, etc.
Examples:
common-base– Base platformcommon-java– Java platformspring-boot– SpringBoot platform
Platform
A named configuration that defines how a CMN model is interpreted for a specific technology stack.
Examples:
Base– core types + OpenAPI/schema/diagram cartridgesJava– extends Base with Java-specific mappingsSpringBoot– extends Java with Spring MVC / REST mappings
Models select a platform in the header:
platform SpringBoot
Modelling elements (CMN)
Package
The namespace of a model file, defined in the header:
package com.example.customer
Optionally prefixed by a layer (see below).
Layer
An optional qualifier before package used to group packages by role, for example:
core– internal domain modelapi– external API surface (DTOs, resources)backend– technical composition, components, applications
Layer names are used by platforms (e.g. SpringBoot) for outlet routing and for special behaviour such as API ↔ domain mapping.
Simple type
A scalar type based on a stereotype and optional parameters:
type<string> String(maxLength) maxLength=undefined
Simple types often carry validation or format properties (e.g. maxLength, pattern, format).
Complex type
A structured type with fields:
type<entity> Customer {
id**: Id
firstName*: Name
lastName*: Name
email: String(255)
}
Complex types can:
- extend other complex types (
extends) - include fields from other types or field sets
- define operations
Enum
A type with a closed list of values, each optional with properties:
enum SetupType {
NONE value="none"
NP value="NP"
JP value="JP"
}
Entity
A complex type with the stereotype entity. Entities usually have an identity (key field) and may map to persisted objects (e.g. JPA entities) depending on the platform.
DTO (Data Transfer Object)
A type used to transport data across boundaries (e.g. in APIs). DTOs are usually complex types in the api layer that:
- include fields from domain entities, and
- optionally hide internal fields.
Resource
Represents an externally visible endpoint (typically HTTP/REST).
resource /customers as Customer[] by id { ... }
Key parts:
- path (
/customers) - representation type (
CustomerorCustomer[]) - identifier (
by id)
Resource method
A method inside a resource that refers to a method type and optionally adds parameters and overrides:
readEntity()
createEntity()
queryEntities(^page: Integer, pageSize: Integer)
Method type (methodtype)
A reusable definition of HTTP semantics that resource methods refer to. There are:
- raw method types (pure HTTP verbs:
get,post,put, …) - opinionated method types with defaults (e.g.
create,read,update,delete,query,list) - SpringBoot-specific entity CRUD helpers (
createEntity,readEntity,updateEntity,queryEntities,deleteEntity)
Component
Groups APIs into a deployable building block and defines which resources it provides:
component CustomerBackend {
provide /customers { ... }
}
Components are used for backend structure and for generating diagrams and implementation artefacts.
Application
Assembles components into a larger system:
application CustomerApp {
consists of {
CustomerBackend
}
use {
// external components
}
}
Applications can be used to generate component diagrams and aggregated OpenAPI documents.
Profiles, stereotypes and properties
Stereotype
A reusable semantic tag that can be applied to model elements. Defined in profiles:
stereotype entity applicable for complextype
Usage in CMN:
type<entity> Customer { ... }
Stereotypes can:
- restrict where they apply (
applicable for) - inherit (
specialization of) - define propagation behaviour (e.g. along specialisation or references)
Property
Named, typed attributes that can be attached to model elements (via profiles) and given values in CMN models.
Examples: minLength, max, javaType, tableName.
Strategy
A strategy implementation used to compute derived property values. In a profile:
strategy JavaNamingStrategy implementation="..."
Used in a contribution:
contribute to field {
property javaName: STRING strategy=JavaNamingStrategy
}
Generation concepts
Outlet
Describes where generated artefacts are written and with which behaviour (delete on clean, mark as derived, etc.). Example:
outlet generatedOpenApi
directory = "./src/generated/resources/openapi"
Outlets can be overridden per project and per layer in joinedworkz.properties.
Cartridge
Bundles generators and connects them to outlets:
cartridge OpenApiCartridge
implementation="..."
outlets=generatedOpenApi, generatedOpenApiHtml
Platforms decide which cartridges are applied.
joinedworkz.properties
A project-level configuration file (in the project root) used to override:
- outlet directories (globally and per layer)
- package names (e.g. for cloned helper libraries)
Examples:
outlet.generatedJavaSource.directory=src/generated/java
outlet.generatedJavaSource.api.directory=../webapp/src/generated/java
override-package.org.iworkz.core=com.example.core
Handler
In the SpringBoot facility: a class/method that implements business logic for resource methods. The handler is referenced via a handler property in method types or resource methods and is wired into generated controllers and interfaces.
DataAccessService
A generated service class (SpringBoot + persistence facilities) that encapsulates CRUD operations for an entity. The SpringBoot CRUD method types (createEntity, readEntity, updateEntity, queryEntities, deleteEntity) use ${entity}DataAccessService as their handler target.
Facilities and platforms (summary)
Base facility / Base platform
Provides:
- core simple types (e.g.
String,Integer,Decimal,Date, …) - method types for REST APIs (raw + opinionated)
- generic cartridges (OpenAPI, schema, diagrams)
Java facility / Java platform
Extends Base with:
- Java-specific type mappings (
javaType) - naming strategies (
javaName) - Java-generation cartridges
Spring Boot facility / SpringBoot platform
Extends Java with:
- Spring MVC / REST mappings
- controller and handler generation
- special handling of the
apilayer for DTO ↔ domain mapping - entity CRUD helpers in
SpringBootApi.cmn
This glossary is not complete, but it should give you a solid starting point for the most frequently used JoinedWorkz concepts.
