WowProperties
The host's configuration, the wow.* namespace: the node, its internal port, its stores and logs, the cluster, the commands' waits and execution, the subscriptions, the timers and schedules, the HTTP edge and the calls to other contexts. The defaults are the runtime's own. The query plane, Kafka, ClickHouse and OpenTelemetry have their own classes (QueryProperties, KafkaProperties, ClickHouseProperties, ObservabilityProperties).
Every key is in the host's configuration metadata (META-INF/spring-configuration-metadata.json), and a wow.* key that no property of the host or of a module names is reported at startup (ConfigurationKeys).
Types
Properties
How each context's built-in subscription wow.access stamps an aggregate's access attributes over its history when a commit changes them: wow.access.*.
Per aggregate type, by <context>.<aggregate> (bracketed in a property name: wow.aggregates.[shop.cart]).
The backend of a node that names no wow.stores: auto (the default) takes PostgreSQL or MongoDB by the application's DataSource or MongoClient, and refuses to start without either, so that data is not lost by mistake, unless a profile of wow.dev-profiles is active or the internal port binds the loopback interface alone; memory keeps the data in memory on purpose, for one node whose data does not outlive it. postgres, mongo or the type of a community backend's store provider (me.ahoo.wow.spi.store.StoreProvider) name one.
What each service that calls this one may call and read on the internal port, by the name it states (Wow-Service, its spring.application.name): optional lists that catch a misconfiguration. The internal port is reachable by the platform's own pods alone; a service that names itself is taken on that network's word.
The bounded contexts the node serves.
The keys wow-cosec reads (wow.cosec.*), bound here so they are checked and documented as the others are. Experimental in 10.0 with wow-cosec, which follows CoSec 8's pre-release: they may change within 10.x.
How the stores manage the framework's tables, collections and indexes: auto creates what is missing (the default), validate creates nothing and refuses a store whose schema is missing or in another format, none creates and checks nothing; wow.stores.<name>.ddl overrides it for one store.
The profiles in which the node runs for development, as it does when its internal port binds a loopback address alone: wow.backend=auto falls back to memory when no durable backend is available, the public port serves without a CallerResolver bean, a single Kafka broker gives no durability warning, and a platform service may take its callers from request headers. None of them is allowed in a deployment.
The node's health and its probes, when the application has Spring Boot Actuator: wow.health.*.
The internal port: the cluster channel, the wait signals and the calls of other services.
The aggregates' logs: their partitions, their store, and how their appends and tails run.
The in-memory provider's settings: the topics it keeps in the JVM.
This node's identity among the nodes of the service, and where they reach it.
How the node calls its peers, the services of the other contexts it calls over HTTP: wow.peer.*.
The peer contexts called over HTTP, by context (wow.peers.<context>.*): a saga's synchronous calls to that context and the typed clients of it go to its service, at its url when one is set, else where wow.peer.discovery finds the service its contract names (DNS by default). A node whose saga calls a context it cannot reach does not start.
Where commands run (CommandRouting): auto, on the owner of the aggregate's partition, or here on the memory backend, which cannot route across nodes; partitioned; local; or topic, through each context's command topic. An aggregate type's wow.aggregates.[<context>.<aggregate>].routing comes before it.
Per @OnSchedule job, by its name: wow.schedules.<job>.* holds all of the job's settings, its rule and the retries of the subscriptions that run it. A job no handler of the node runs fails its start, and so does a job's subscription configured under wow.subscriptions.
The bounds of each context's shared states: wow.shared-states.*.
Where the snapshots are by default, and how the snapshot maintenance runs: wow.snapshot.*.
The named store instances, by name: wow.stores.<name>.type and its settings. The aggregates whose logs are on one store form a log group, with its own partition sequences, checkpoints, parked entries and timers.
Per subscription, by its context and name, <context>.<name>, bracketed in a property name (wow.subscriptions.[shop.CartSaga.onOrderCreated], wow.subscriptions.[shop.wow.snapshot]): a name is unique within its context alone.
The node's topic transport: auto (the default) takes the transport a provider finds configured (Kafka with wow.kafka.bootstrap-servers); without one, the topics are in the node's JVM when it runs for development (a profile of wow.dev-profiles, or a loopback internal port), and otherwise it has none: the node then publishes no stream, and refuses to start when it needs topics (topic routing, command intake, ledger publishing set to true). memory keeps the topics in the JVM on purpose, for development alone; none gives the node no topics in any profile, whatever is configured, with the same refusal; kafka, or a community provider's type, names the transport. A blank wow.kafka.bootstrap-servers is no way to turn the topics off: in development it falls back to the topics in the JVM.