Skip to content

Instantly share code, notes, and snippets.

@tomconnors
Created January 22, 2016 22:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tomconnors/d3c9f76c50c63fefbaab to your computer and use it in GitHub Desktop.
Save tomconnors/d3c9f76c50c63fefbaab to your computer and use it in GitHub Desktop.
Multiple References to a Connection Pool (perhaps incorrect?)
(def datasources (agent {}))
(defn make-datasource [db-conf]
(send-off datasources
(fn [datasources]
(if-let [ds-conf (get datasources db-conf)]
(update-in datasources [db-conf :count] inc)
(assoc datasources
db-conf {:count 1
:ds (conn-pool/make-datasource db-conf)}))))
(await datasources)
(:ds (get @datasources db-conf)))
(defn close-datasource [db-conf]
(send-off
datasources
(fn [datasources]
(if-let [{:keys [count ds]} (get datasources db-conf)]
(if (= count 1)
(do
(conn-pool/close-datasource ds)
(dissoc datasources db-conf))
(update-in datasources [db-conf :count] dec))
(throw (Exception. "Cannot close nonexistent datasource"))))))
;; ... elsewhere:
(let [conn-pool-ds (make-datasource db-conf)]
(jdbc/query {:datasource conn-pool-ds} ["select * from foo"]))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment