- Init-fn for Mariadb component.
- Support for Datomic local. Init-fn takes the Datomic connection as argument.
- Support for multiple API handlers, which are siloed handlers with their own prefix, middleware and dependencies.
- Support for info.sunng/ring-jetty9-adapter
- Facilities to include an api handler behind prefix and separate middleware
- Endpoints in Raamwerk, route data can have their per-endpoint middleware.
- Raamwerk refinement with the endpoints. Now accepts route data or closures over Reitit routes with component dependencies in scope.
- Raamwerk framework overhaul. Adoption of reitit as routing library. No need for middleware component, and handler component is greatly simplified.
- Undertow web server
- Mariadb: data-source and connection
- core.async pipe: high-level component for a core.async pipe
- Sente client fixes (ChannelSocketClient)
- Bump dependencies (including tools.namespace and prismatic schema)
- Etsy: configurable throttle rate
- Immutant web: bug fix (stopping the server twice in a sequence would throw an error)
- Meyvn config + dependencies updated to their latest versions
- Benjamin: ability to wrap component for both persistence-fn and logbook-fn independently.
- Mariadb: database connection component
- Next.jdbc: database connection component
- Defensive measure in durable queue component
- Scheduled Executor Service: added one-off method for non-repeating tasks
- Scheduled Executor Service: recursive scheduler for the one-off method (ability to schedule in the scheduled task)
- Cleanup of Sente component
- Option to get a throttled Etsy client
- LDAP component (UnboundID LDAP SDK for Java)
- New Redis queue component
- Renamed Redis pub sub component (previously known a Carmine)
- Bump dependency version for org.danielsz/lang-utils
- Updated core dependencies (
lang-utils
, for example) - nREPL middleware for system (used by the Meyvn build tool).
- Poco component is even simpler (no need to conj)
- Sente security fix: taoensso/sente#137
- Revamped Scheduled Executor Service component. Declarative. Starting jobs directly from the component. See test for usage.
- Revamped Durable Queue. Declarative. Starting jobs directly from the component. See test for usage.
- Poco: “plain old component”. Bare bones component. Conjes a map and that’s it.
- Handler component has an option to disable shared root middleware
- Fix: #120
- New Riemann client component
- New Kampbell component
- Repl server component will automatically detect the new nrepl namespaces if present.
- Repl server component supports
with-cider
flag for Cider support - Cider Repl server component deprecated (merged with Repl server component)
- REPL server with bind address option
- Cider REPL server with bind address option
- For danielsz/system users: Wondering if anyone know why
(fn [req] (handler req))
wraps the handler in line: https://github.com/danielsz/system/blob/master/src/system/components/jetty.clj#L13 - rabbitmq try catch on close #105
- New core.async pubsub component with tests
- Swapped routes and handlers in handler component: #106
- New durable queue component (Factual)
- Konserve component accepts custom serializer + test
- Konserve with carmine backend
- Redis component with test
- Benjamin component with test
- Added new constructor signature to web components, supporting keyword arguments
- Web server handlers can now be called anything (not just `:handler’), which allows to define any number of web servers in the system map
- Support for alternative routing libraries (bidi)
- lambdacd component #114
- Sente: Add options to component before wrapping, https://github.com/danielsz/system/pull/92/files
- Alex Miller’s bad namespace form. #93 & #94
- Regression fix. #96
- Parameter validations (auto and files, regexes and paths).
- Hara Watcher idempotency #99
- Hara Watcher monitoring
- Removed data_readers loading, since it is built-in the boot-repl task
- Added modes to run system.boot in standard (Lisp) mode, no unloading (no remove-ns), or default tools.namespace mode (with remove-ns)
- Etsy component: removed extraneous field
- Removed dependencies from the dev profile in favor of test profile #102
- New Konserve component
- Duct abstractions: enhancements
- Endpoints can specify middleware
- Routes will be recombined according to their middleware
- The Handler component can also specify middleware that will be applied to all endpoints/routes
This allows to address the use case when different routes need different middleware. For example, Sente is incompatible with `wrap-restful-format’.
Decomplecting routes and middleware also enables better composition. Side-effectful middleware, such as wrap-params, consumes the request body upon reading it. This means it should only be applied once. Hence, web-centric libraries should never force such middleware on the user, but rather let him apply any middleware needed on recombined routes in the end application.
With our new implementation, it is possible to write libraries, for example a social sign-in library, keep it totally separate from application code, and then, with the Duct abstractions in `system’, compose endpoints with any middleware the application should need.
Middleware: #48
New, simplified middleware component. Receives a vector of functions or vectors. If vector is specified, apply first item in vector to handler and rest of vector items (middleware arguments). This is a breaking change (only for the middeware component).
Middleware plays well in the dependency injection mechanism of Component. To wrap the component in middleware, use :component keyword (convention).
- Duct components docstrings: #103
- Carmine/Redis PubSub (pattern channels)
- hara.io.scheduler
- Allow regex and paths in files vector (#86)
- Accomodate simplest use case (no system). http://stackoverflow.com/questions/38622722/reloading-from-clojure-file/38625722#38625722
- Print output when system starts and stops (@peterromfeldhk)
- Validate sys. #91
This is a breaking change release
- Incorporates Duct abstractions (endpoint and handlers)
- App component is deprecated
- Revised the reloading mechanism. Leveraging tools.namespace. New option enabling to turn unloading on or off.
- `reloaded.repl` is now `system.repl`
- Validation with prismatic/schema
- New example for system + sente
- Mongo component supports options, credentials
- Adi component added
- Hikari component added
- JDBC component made idempotent
- Jetty made idempotent
- Test selectors
- Monitoring (protocol and various implementations)
- Fixes a long-standing issue with data-readers in Boot: boot-clj/boot#47
- Release Datomic connection upon stop. #46
- Dependencies: clojure 1.7.0, sente 1.6.0
- Cider nREPL component
- Neo4j component
- Quartzite component
- ScheduledExecutorService component
- Immutant web service component
- Closures are used to expose resources to http requests instead of merging it in the request map (App component)
- Web components (jetty, immutant, http-kit) can be passed functions, but also components. Yes, even arbitrary user-defined components, as long as the convention is respected, namely that (:app my-custom-component) returns a web handler.
- Mongo component can be initialized with a function (typical use case: indices) that receives the db as argument
- Generic app component for typical Ring applications
- Web service example
- Postgres component
- Latest dependencies: component, ns-tracker.
- http-kit acces to full options
- EPL License
- switch to enable hot-reloadable system
- file-based granularity to only restart the system when user-specified files change.
- auto-start option.
- New ElasticSearch component
- Example of a task to run a dev system on the command line (versus REPL).
run
boot task is not built-in. So it now ships withsystem
.
- Latest Sente version. This is a breaking change for Sente.
- Added example project for the Boot build tool.
- Added boot task to reload namespaces on file changes.