Created
August 21, 2011 15:37
-
-
Save hdenk/1160756 to your computer and use it in GitHub Desktop.
noir framework: a middleware for jdbc-connection-handling (using c3p0 connection pool)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns my-web-app.middleware.jdbc | |
(:require | |
[clojure.java.jdbc :as jdbc] | |
[noir.options :as options]) | |
(:import com.mchange.v2.c3p0.ComboPooledDataSource)) | |
(defn- pooled-data-source | |
[db-connection-settings] | |
(let [cpds (doto (ComboPooledDataSource.) | |
(.setDriverClass (:classname db-connection-settings)) | |
(.setJdbcUrl (str "jdbc:" (:subprotocol db-connection-settings) ":" (:subname db-connection-settings))) | |
(.setUser (:user db-connection-settings)) | |
(.setPassword (:password db-connection-settings)) | |
;; expire excess connections after 30 minutes of inactivity: | |
(.setMaxIdleTimeExcessConnections (* 30 60)) | |
;; expire connections after 3 hours of inactivity: | |
(.setMaxIdleTime (* 3 60 60)))] | |
{:datasource cpds})) | |
(def ^{:arglists ([db-connection-settings])} pooled-data-source-as-singleton | |
(memoize pooled-data-source)) | |
(def pooled-data-source-as-singleton | |
(memoize pooled-data-source)) | |
(defn wrap-jdbc-connection [handler] | |
(fn [request] | |
(jdbc/with-connection | |
(pooled-data-source-as-singleton (options/get :db-connection-settings)) | |
(handler request)))) | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defproject my-web-app | |
... | |
[org.clojure/java.jdbc "0.0.6"] | |
[c3p0/c3p0 "0.9.1.2"] | |
[hsqldb/hsqldb "1.8.0.10"]] | |
... |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns my-web-app.server | |
(:require | |
[my-web-app.middleware.jdbc :as jdbc] | |
[noir.server :as server])) | |
(def ^:private db-connection-settings {:classname "org.hsqldb.jdbcDriver" | |
:subprotocol "hsqldb" | |
:subname "db/test-db"}) | |
(server/load-views "src/order_manager/views/") | |
(server/add-middleware jdbc/wrap-jdbc-connection) | |
(defn -main [& m] | |
(let [mode (keyword (or (first m) :dev)) | |
port (Integer. (get (System/getenv) "PORT" "8080"))] | |
(server/start port {:mode mode | |
:ns 'my-web-app | |
:db-connection-settings db-connection-settings}))) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Links
*http://webnoir.org/tutorials/middleware
*http://github.com/clojure/java.jdbc/blob/master/doc/clojure/java/jdbc/ConnectionPooling.md