I am working on a web service that needs to talk to a database, so I am tooling up my basic libraries to give me access to postgres on my desktop.
Jun 5, 2013 1:27:46 PM com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask run
WARNING: com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@15c313da -- Acquisition
Attempt Failed!!! Clearing pending acquires.
While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30).
Last acquisition attempt exception:
java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getDriver(DriverManager.java:264)
In my db library I have the following
(ns myapp.db
(:import [com.mchange.v2.c3p0 ComboPooledDataSource]))
(def specification {
:classname "postgresql"
:subprotocol "org.postgresql.Driver"
:subname "//localhost:5432;database=test"
})
(defn pooled-data-source [specification]
(let [datasource (ComboPooledDataSource.)]
(.setDriverClass datasource (:classname specification))
(.setJdbcUrl datasource (str "jdbc:" (:subprotocol specification) ":" (:subname specification)))
(.setUser datasource (:user specification))
(.setPassword datasource (:password specification))
(.setMaxIdleTimeExcessConnections datasource (* 30 60))
(.setMaxIdleTime datasource (* 3 60 60))
{:datasource datasource}))
(def connection-pool
(delay
(pooled-data-source specification)))
(defn connection [] @connection-pool)
Then in my unit test:
(ns myapp.db-test
(:use clojure.test)
(:require [myapp.db]
[clojure.java.jdbc :as jdbc]))
(let [db (myapp.db/connection)]
(jdbc/with-connection db)
(jdbc/with-query-results rs ["select * from foo"]
(doseq [row rs]
(println row)))))
However this does work in the REPL so at least I know the database is up and accepting connections:
user=> (require '[clojure.java.jdbc :as sql])
user=> (sql/with-connection "postgresql://localhost:5432/test"
(sql/with-query-results results ["select * from foo"]
(doseq [result results] (println result))))
{:y 2, :x 1}
nil
user=>
Help with this is greatly appreciated!
My project.clj is as follows
(defproject myapp "0.1.0"
:description "myapp"
:dependencies [
[org.clojure/clojure "1.5.1"]
[org.clojure/java.jdbc "0.3.0-alpha4"]
[postgresql "9.1-901.jdbc4"]
[c3p0/c3p0 "0.9.1.2"]])