Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tomekw/hucpa
JRuby wrapper to HikariCP JDBC connection pool
https://github.com/tomekw/hucpa
connection-pool jdbc jruby jruby-wrapper ruby ruby-gem
Last synced: 4 days ago
JSON representation
JRuby wrapper to HikariCP JDBC connection pool
- Host: GitHub
- URL: https://github.com/tomekw/hucpa
- Owner: tomekw
- License: mit
- Created: 2016-12-10T19:21:55.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2017-03-11T14:03:18.000Z (over 7 years ago)
- Last Synced: 2024-10-14T11:47:28.082Z (30 days ago)
- Topics: connection-pool, jdbc, jruby, jruby-wrapper, ruby, ruby-gem
- Language: Ruby
- Size: 463 KB
- Stars: 15
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.txt
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# Hucpa
[![Code Climate](https://codeclimate.com/github/tomekw/hucpa/badges/gpa.svg)](https://codeclimate.com/github/tomekw/hucpa) [![Gem Version](https://badge.fury.io/rb/hucpa.svg)](https://badge.fury.io/rb/hucpa) [![CircleCI](https://circleci.com/gh/tomekw/hucpa.svg?style=svg)](https://circleci.com/gh/tomekw/hucpa)
A JRuby wrapper to [HikariCP](https://github.com/brettwooldridge/HikariCP) - "zero-overhead" production ready JDBC connection pool.
This is / will be a part of a bigger effort, like a dedicated library to use SQL and / or ActiveRecord integration.Please note the project support only JRuby (tested with 9.1.8.0+) on Java 8.
The public API is subject to change before version `1.0.0`.
## Installation
Add this line to your application's Gemfile:
```ruby
gem "hucpa"
```And then execute:
$ bundle
Or install it yourself as:
$ gem install hucpa
## Configuration options
See [HikariCP Documentation](https://github.com/brettwooldridge/HikariCP#configuration-knobs-baby) for a detailed description.
Not all HikariCP-defined configuration options are currently supported. To add support for infrequently used options please
raise an issue or file a pull request.| Option | Required | Default value | Notes |
| ----------------------- | :------: | ------------- | ----------------------------------------------------------------------- |
| `adapter` | Yes(1) | - | Symbol |
| `auto_commit` | No | `true` | Boolean |
| `connection_test_query` | No | - | String |
| `connection_timeout` | No | `30_000` | Integer, greater than or equal to 250, in miliseconds |
| `database_name` | No | - | String |
| `idle_timeout` | No | `600_000` | Integer, 0 (disabled) or greater than or equal to 10000, in miliseconds |
| `jdbc_url` | Yes(1) | - | String |
| `max_lifetime` | No | `1_800_000` | Integer, 0 (disabled) or greater than or equal to 30000, in miliseconds |
| `maximum_pool_size` | No | `10` | Integer, greater than or equal to 1 |
| `minimum_idle` | No | `10` | Integer, greater than or equal to 1 |
| `password` | Yes | - | String |
| `pool_name` | No | - | String |
| `server_name` | No | - | String |
| `username` | Yes | - | String |`(1)` - either `adapter` or `jdbc_url` has to be provided.
## Supported adapters and corresponding datasource class names
| Adapter | Datasource class name |
| ---------------- | -------------------------------------------------- |
| `db2` | `com.ibm.db2.jcc.DB2SimpleDataSource` |
| `derby` | `org.apache.derby.jdbc.ClientDataSource` |
| `fdbsql` | `com.foundationdb.sql.jdbc.ds.FDBSimpleDataSource` |
| `firebird` | `org.firebirdsql.pool.FBSimpleDataSource` |
| `h2` | `org.h2.jdbcx.JdbcDataSource` |
| `hsqldb` | `org.hsqldb.jdbc.JDBCDataSource` |
| `mariadb` | `org.mariadb.jdbc.MySQLDataSource` |
| `mysql` | `com.mysql.jdbc.jdbc2.optional.MysqlDataSource` |
| `oracle` | `oracle.jdbc.pool.OracleDataSource` |
| `pgjdbc_ng` | `com.impossibl.postgres.jdbc.PGDataSource` |
| `postgresql` | `org.postgresql.ds.PGSimpleDataSource` |
| `sqlite` | `org.sqlite.JDBC` |
| `sqlserver_jtds` | `net.sourceforge.jtds.jdbcx.JtdsDataSource` |
| `sqlserver` | `com.microsoft.sqlserver.jdbc.SQLServerDataSource` |
| `sybase` | `com.sybase.jdbcx.SybDataSource` |## Usage
Install the database driver, for PostgreSQL:
```ruby
gem "jdbc-postgres"
```Load the the database driver if needed, for PostgreSQL:
```ruby
require "jdbc/postgres"
Jdbc::Postgres.load_driver
```Configure the connection pool:
```ruby
# Using the adapter option
options = {
adapter: :postgresql,
database_name: "hucpa",
password: "hucpa",
server_name: "postgres",
username: "hucpa"
}# Using the jdbc_url option
options = {
jdbc_url: "jdbc:postgresql://postgres/hucpa",
password: "hucpa",
username: "hucpa"
}connection_pool = Hucpa::ConnectionPool.new(options)
```Use the connection pool with the `with_connection` API:
```ruby
answer = connection_pool.with_connection do |connection|
result_set =
connection
.create_statement
.execute_query("SELECT 42 AS answer")result_set.next and result_set.get_int("answer")
endanswer
=> 42
```Or use the connection pool with the "classic" API:
```ruby
datasource = connection_pool.open# Explicitly obtain the DB connection
connection = datasource.connectionresult_set =
connection
.create_statement
.execute_query("SELECT 42 AS answer")answer = result_set.next and result_set.get_int("answer")
# Explicitly release the DB connection
connection.closeanswer
=> 42
```Close the connection pool:
```ruby
connection_pool.close
```## Development
Build the Docker image:
$ docker-compose build
Create services:
$ docker-compose create
Run specs:
$ docker-compose run --rm app rspec spec
Run console:
$ docker-compose run --rm app irb
## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/tomekw/hucpa. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
## License
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).