Ад, заборы, коровники
Успешно скрестил Clojure, c3p0 connection pool и Firebird JDBC driver (Jaybird):
Проблема(из-за которой даже пришлось выпилить korma) изначально была в том, что c3p0 сам по себе роль для коннекта не передавал. Роль, судя по всему - понятие сугубо для Firebird, причем даже там ими почти никто не пользуется, "слишком сложно". Примеров на тему "как передать роль" вообще почти нет, документация разрозненная и бредовая, пришлось перекопать исходники jaybird и c3p0, чтобы найти методику ее передачи.
(ns org.nii.operden
(:require [clojure.java.jdbc :as sql])
(:use org.nii.operden.settings)
(:import (javax.sql DataSource))
(:import (com.mchange.v2.c3p0 DataSources ComboPooledDataSource))
(:import (java.util Properties))
)
;;параметры коннекта. пригодны для использования в clojure.java.jdbc/with-connection
(def
dbspec
(let [user (get mainConfig "firebird.user" "")
rolename (get mainConfig "firebird.rolename" "")
pass (get mainConfig "firebird.password" "")
subname (get mainConfig "firebird.subname" "//localhost/operden")
encoding (get mainConfig "firebird.encoding" "WIN1251")]
{:classname "org.firebirdsql.jdbc.FBDriver"
:subprotocol "firebirdsql"
:user user
:roleName rolename
:password pass
:subname subname
:encoding encoding}))
;передать роль для коннекта в jaybird через c3p0
(defn roleProp
[role]
(doto (Properties.)
(.put "roleName" role))
)
;функция нагло стырена из korma и модифицирована
;возвращает DataSource, который так же пригоден для использования
; в clojure.java.jdbc/with-connection
(defn connection-pool
"Create a connection pool for the given database spec."
[spec]
(let [excess (or (:excess-timeout spec) (* 30 60))
idle (or (:idle-timeout spec) (* 3 60 60))
cpds (doto (ComboPooledDataSource.)
(.setDriverClass (:classname spec))
(.setJdbcUrl (str "jdbc:" (:subprotocol spec) ":" (:subname spec)))
(.setProperties (roleProp (:roleName spec)))
(.setUser (:user spec))
(.setPassword (:password spec))
(.setAcquireRetryAttempts 3)
(.setMinPoolSize 5)
(.setMaxPoolSize 30)
(.setMaxIdleTimeExcessConnections excess)
(.setMaxIdleTime idle))]
{:datasource cpds}))
(def db (connection-pool dbspec))
Проблема(из-за которой даже пришлось выпилить korma) изначально была в том, что c3p0 сам по себе роль для коннекта не передавал. Роль, судя по всему - понятие сугубо для Firebird, причем даже там ими почти никто не пользуется, "слишком сложно". Примеров на тему "как передать роль" вообще почти нет, документация разрозненная и бредовая, пришлось перекопать исходники jaybird и c3p0, чтобы найти методику ее передачи.

no subject
no subject
no subject
no subject
no subject
no subject
Но с нормальной подсветкой они не мешают, кроме того, большую вложенность делать не принято и не обязательно.
А разные виды скобок сильно упрощают синтаксис, делая его лаконичным.
Есть ещё Oracle Universal Connection Pool
Находится на www.oracle.com
см. /technetwork/database/enterprise-edition/downloads/ucp-112010-099129.html
документация на docs.oracle.com
/cd/E11882_01/java.112/e12265/toc.htm
/cd/E11882_01/java.112/e12826/toc.htm
Умеет setRoleName()
Используется, к примеру, так:
(ns xxx (:import (oracle.ucp.jdbc PoolDataSourceFactory PoolDataSource))) (def ^PoolDataSource ^{:dynamic true} *datasource* (doto (PoolDataSourceFactory/getPoolDataSource) (.setConnectionFactoryClassName "org.hsqldb.jdbc.JDBCDriver") (.setConnectionFactoryProperties (doto (Properties.) ;; (.put "sql.syntax_ora" "true") (.put "hsqldb.default_table_type" "cached"))) (.setURL "jdbc:hsqldb:file:D:/HSQL/database.db") (.setUser "user") (.setPassword "password") ;; (.setMinPoolSize 5) ))no subject
Сломал одну плату (отломал разъём питания при помощи ребёнка от Toradex Iris - Pico ITX Carrier Board, сегодня на работе паял назад). Продолжил крестовый поход по межрассовому смешиванию и впиливанию pkgsrc внутрь Buildroot. Особенно был хорош колл по скайпу с нетбсд-ным разрабом в 24:00 c воскресенья на понедельник, с темой
как нам обустроить Рабкринкак использовать его патч для pkgsrc для организации кросс-сборки. Я был уже близок к тому чтобы в могилу проекта buildroot+pkgsrc вбить осиновый кол, а тут бах - и продвинулся ещё на шаг вперёд.no subject
https://github.com/halgari/clojure-py
(запускать правда не пробовал, просто на код повтыкал)