ColdBox-Anwendungen

Auf dieser Seite

ColdBox-Anwendungen

bxSites coldbox dokumentiert eine ColdBox-Anwendung anhand ihrer Konventionen auf der Festplatte: Routen, Event-Handler, Models und WireBox-Mappings, Module, Interceptors und geplante Tasks.

Die Anwendung wird dabei nie gestartet. Nichts muss kompiliert sein, keine Datasource erreichbar, keine Umgebungsvariable gesetzt - auf einem CI-Runner läuft es also genauso wie lokal. Was dieser Ansatz nicht sehen kann, steht unten unter Grenzen.

Schnellstart

Im Wurzelverzeichnis einer ColdBox-App, die auch ein bx-sites-Projekt enthält:

bxSites coldbox
bxSites build

Die Seiten landen unter docs/api/coldbox/. Liegt die Anwendung woanders:

bxSites coldbox --appRoot=app

Konfiguration

Alles ist optional; das vollständige Schema steht unter coldbox.

coldbox:
  appRoot: "."
  pagePathPrefix: api/coldbox
  tags: [ api, coldbox ]
  include: [ routes, handlers, models, modules, interceptors, scheduler ]
{
	"coldbox": {
		"appRoot": ".",
		"pagePathPrefix": "api/coldbox",
		"tags": [ "api", "coldbox" ],
		"include": [ "routes", "handlers", "models", "modules", "interceptors", "scheduler" ]
	}
}

[coldbox]
appRoot = "."
pagePathPrefix = "api/coldbox"
tags = [ "api", "coldbox" ]
include = [ "routes", "handlers", "models", "modules", "interceptors", "scheduler" ]

include bestimmt, welche Seitengruppen erzeugt werden; ein weggelassener Eintrag wird komplett übersprungen. Zu jedem Schlüssel gibt es ein Flag:

bxSites coldbox --appRoot=app --include=routes,handlers \
	--pagePathPrefix=reference --tags=reference,api

Was erzeugt wird

docs/api/coldbox/
├── index.md               # Überblick und Kennzahlen
├── routes.md              # alle Routen in Deklarationsreihenfolge
├── handlers/
│   ├── index.md
│   ├── Main.md
│   └── api/Orders.md      # Modul-Handler liegen unter ihrem Modul
├── models/
│   ├── index.md           # Models plus die Mappings des Binders
│   └── UserService.md
├── modules/
│   ├── index.md
│   └── api.md
├── interceptors.md
└── scheduled-tasks.md

Routen

Alle Routen des App-Routers und jedes Modul-Routers, in der Reihenfolge ihrer Deklaration - ColdBox nimmt die erste passende, die Reihenfolge ist also bedeutungstragend und die Seite behält sie bei. resources()/apiResources() werden in die einzelnen Routen aufgelöst, die ColdBox daraus erzeugt, und Modul-Routen tragen den Entry Point, unter dem sie tatsächlich hängen.

Handler

Eine Seite je Handler mit den Routen, die ihn erreichen, und der Action, auf die jede zeigt, dann seine aufrufbaren Actions mit Doc-Kommentaren und Argumenten. ColdBox' eigene Lifecycle-Hooks (preHandler, aroundHandler, onError und Verwandte) bekommen einen eigenen Abschnitt, statt als per URL erreichbare Actions gelistet zu werden; init und private Methoden bleiben außen vor.

Models

Eine Seite je Model: Scope, was WireBox hineininjiziert, die eigenen Properties und die öffentlichen Methoden. Injizierte Abhängigkeiten stehen getrennt von einfachen Properties, denn property name="x" inject="y" ist Verdrahtung, keine Daten. Der Index ergänzt die deklarierten Mappings des Binders.

Module, Interceptors und geplante Tasks

Eine Modulseite trägt, was ihre ModuleConfig deklariert - Autor, Version, Entry Point, Abhängigkeiten - und was das Modul zur Anwendung beisteuert, jeweils verlinkt auf die beschreibende Seite. Die Interceptor-Seite deckt beide Wege ab, auf denen ColdBox sie findet: was config/ColdBox registriert und was interceptors/ deklariert, mit den öffentlichen Methoden jeder Klasse als den Interception Points, die sie sind. Die Task-Seite liest config/Scheduler und den Scheduler jedes Moduls.

Reichhaltigere Seiten mit DocBox

Routen, Module, Interceptors und die Struktur der App kommen allein aus den Konventionen. Details je Klasse - die Actions eines Handlers, die Methoden eines Models, deren Argumente und Doc-Kommentare - kommen aus DocBox. Mit installiertem bx-docbox werden diese Seiten deutlich reichhaltiger:

install-bx-module bx-docbox

Ohne das Modul läuft der Verb trotzdem und listet weiterhin jeden Handler, jedes Model, jede Route und jedes Modul; die Seiten sagen dann schlicht, was fehlt und wie man es bekommt.

Grenzen

Statisches Lesen hat eine harte Grenze, und die sollte man benennen. Was eine Anwendung erst zur Laufzeit entscheidet, steht nicht auf der Platte:

  • Eine Route, deren Pattern oder Ziel aus einer Variablen gebaut oder in einer Schleife registriert wird.
  • Ein WireBox-Mapping oder ein geplanter Task mit berechnetem Namen.
  • Ein Modul, das beim Start installiert wird, statt unter modules_app/ eingecheckt zu sein.
  • Was mapDirectory() tatsächlich registriert - das hängt davon ab, was beim Start auf der Platte liegt.

All das wird übersprungen statt geraten: Eine erzeugte Seite untertreibt lieber, als etwas Falsches zu behaupten.

Nicht aus Gradle oder Maven verfügbar

Und zwar bewusst. Eine ColdBox-Anwendung wird über CommandBox gebaut und betrieben, nie über ein Java-Build-Tool - es gibt daher weder einen bxSitesColdBoxDoc-Task noch ein bxsites:coldbox-Goal. Den DocBox-Generator bieten Gradle- und Maven-Plugin hingegen an, denn der dokumentiert BoxLang-/CFML-Klassen, die wirklich im gebauten JVM-Projekt liegen.

Diese Seite bearbeiten Markdown herunterladen Zuletzt aktualisiert Sep 11, 2026, 7:11:15 PM