Managing application states with mount
Once the configuration parameters are defined using Omniconf
, they are accessible across the namespaces as immutable data. The configuration parameters are often used to create stateful objects, such as database connections. For example, in the Consumer service project, Omniconf
made it possible to create a consumer database by directly looking up the :datomic :uri
configuration parameter within the create-consumer-database
function.
The helping-hands.consumer.persistence/create-consumer-database
function has a side effect of database being created and also a new connection being initialized to connect to the created database. This connection has a state that must be shared across other namespaces of the Helping Hands Consumer service that need access to the database. In the current implementation, the connection was initialized at the first call to the helping-hands.consumer.core/consumerdb
as shown here:
(ns helping-hands.consumer.core "Initializes...