Created
January 22, 2016 22:21
-
-
Save tomconnors/d3c9f76c50c63fefbaab to your computer and use it in GitHub Desktop.
Multiple References to a Connection Pool (perhaps incorrect?)
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
(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