practicalli / practicalli/clojure-web-services
Introducting component lifecycle management
Nobody has claimed this yet.
- Dominant language
- Markdown
- Stars
- 16
- Forks
- 14
- PR merge metrics
- No merged PRs in 30d
Description
Overview of lifecycle management in Clojure,
Discuss why and when livecycle management is required
Briefly covering the different approaches taken by Mount, Component and Integrant.
Link to a section and examples of each
component
- ?
integrant
- duct
- ?
Check to see which luminus and pedestal templates use.
Write section on application lifecycle management tools
Application lifecycle management tools configure the many components that are part of an application, such as HTTP server, persistence store access, cache management, passing configuration to routing (db connections, security, etc)
When running an application, lifecycle tools ensure components are configured and started correctly, to provide a consistent startup and clean shutdown of all components.
Some tools also have specific REPL libraries (e.g. Integrant REPL, Component REPL) to support a REPL driven development workflow. These tools can start, restart and stop components in the system or the whole system itself, without requiring the Clojure REPL process to be restarted.
Commonly used projects
-
https://github.com/tolitius/mount - simple, atom based, lightweight
-
https://github.com/weavejester/integrant - data focus, more involved, separate Integrant REPL project, most common for new projects with multiple components, works well with JUXT aero
-
https://github.com/stuartsierra/component - classic component approach, less used for new projects, but still many projects using this approach
Projects to evaluate
- https://github.com/juxt/clip - combination of code and configuration in one structure
- https://github.com/donut-power/system - combination of code and configuration in one structure
- https://github.com/tolitius/yurt - manage stateful components in isolation (related to Mount)
Semi-related projects
- https://github.com/kepler16/gx.cljc - a data-oriented library for defining and manipulating directed acyclic graph's of state machines
Resources
Related issues
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
No target documentation file is named. Start by reviewing the lifecycle-management overview and the listed Mount, Integrant, Component, Clip, System, and Yurt projects, then check the Luminus and Pedestal templates and related issues. Done means a completed section explains when lifecycle management is needed, compares the approaches, and links to relevant examples.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- clojure
- Domain
- documentation
- Issue type
- Documentation
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100