Hi! We are excited to announce the 1.0.0 release of trapperkeeper and trapperkeeper-webserver-jetty9. Now that Puppet Labs is shipping several production apps built on the framework and we consider the API to be stable, we decided to bump the version number to 1.0.0 and ensure that we adhere to semantic versioning principles in future releases.
Trapperkeeper[1] is a Clojure framework for hosting long-running applications and services. You can think of it as a sort of "binder" for Ring applications and other modular bits of Clojure code. It's based on the excellent Prismatic graph[2] library, and manages life cycles and dependencies of service components that make up your application. It provides some built-in functionality for loading configuration from config files on disk (and supports several different config formats), and uses clojure protocols to define the contracts between different services in your system. It was designed to be compatible with Stuart Sierra's 'reloaded' workflow, and also includes several test utility functions / macros to make it easy to write comprehensive integration tests. For more info, check out our wiki[3], where you'll find lots of documentation and a sample web application. We've also released version 1.0.0 of trapperkeeper-webserver-jetty9[4], which is a trapperkeeper service that provides a Jetty9 web server (surprise!) and functions for adding your web apps to the server. It supports adding multiple web apps (you can mount them at different URL paths in the same server), which helps allow you to keep your code more modular. It's primarily intended for running Ring applications, but it also supports running Java servlets, applications from WAR files, and configuring certain URL paths to be reverse-proxied via Jetty's ProxyServlet. You can configure tons of things about the server via the config files: plaintext vs HTTPS ports, configure SSL via pem file paths, open multiple HTTPS ports with different certificate configurations, and even change the URL paths at which your web apps will be mounted without modifying your code (via the "web routing service"[5]). Getting started with trapperkeeper and trapperkeeper-webserver-jetty9 is as simple as: $ lein new trapperkeeper my.namespace/project-name $ cd project-name $ lein test $ lein tk We hope you find it useful! Please feel free to jump on to #trapperkeeper on Freenode if you have any questions or suggestions. The projects are on clojars at puppetlabs/trapperkeeper and puppetlabs/trapperkeeper-webserver-jetty9. (Special thanks to technomancy for helping me fix an initial corrupt deploy of 1.0.0 that I flubbed!) [1] Trapperkeeper github repo: https://github.com/puppetlabs/trapperkeeper [2] Prismatic plumbing/graph library: https://github.com/Prismatic/plumbing [3] Trapperkeeper github wiki: https://github.com/puppetlabs/trapperkeeper/wiki [4] tk-jetty9 github repo and docs: https://github.com/puppetlabs/trapperkeeper-webserver-jetty9 [5] tk-jetty9 webrouting service docs: https://github.com/puppetlabs/trapperkeeper-webserver-jetty9/blob/master/doc/webrouting-service.md Grand plans for future releases: * Provide a mechanism for services to validate their configuration data at startup, and fail fast with a user-friendly error message if the config is invalid * Support other configuration data sources (besides just file-based config) * Provide notification hooks for config changes * ??? * Profit -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.