activerecord-bogacs 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6cade13cd15b5374a780d1f8d0de1d63b7e0c89a
4
- data.tar.gz: 51949daaccd651b2d8fa51ccfa3379109885ed16
3
+ metadata.gz: 930e066b793b68dafffe166563475cfa1812aad6
4
+ data.tar.gz: 56cd2c22124126859b4e8bb5da2f8fe133c43a5e
5
5
  SHA512:
6
- metadata.gz: 91259b8c14a9eeea273eddb83c0b561ab65908683619a6b4f0bd7d744198c7a9e1a1b4dae5d1705b82b98fa5e8c0097d00b06c9b1c90ca7113cbfa1b59018fa7
7
- data.tar.gz: 9f814b2b2eb6ced23c2da439c2dfd05c9fec270ed50f2f410748c75906e9911f62a7e794b28e5021de0de9eec5169b13d381dd077fba94fe1f39b159b6bebfde
6
+ metadata.gz: 8b9a4c0e4877fd090e266096c7c48cff52d3a2856efc712c8e3919c659d9f8a866ccf1f19d92ac44258e0d44cbfc255bab33473ab4a2c2200fbd6a5e228ebcc5
7
+ data.tar.gz: daaf27dcb6b82139cfeaf396181ddfbe6bf3ff36300f79dc56ae6aee9d4b604250f2172f434296136350c2bfb290907a2030d8b741e06330343b5fe51db2e4b2
data/.travis.yml CHANGED
@@ -1,26 +1,44 @@
1
1
  language: ruby
2
+ sudo: false
2
3
  jdk:
3
4
  #- openjdk6
4
5
  - oraclejdk7
5
6
  - oraclejdk8
6
7
  rvm:
7
- - jruby
8
+ - jruby-1.7.16
8
9
  #- jruby-head
9
- #- jruby-18mode
10
- #- jruby-19mode
11
10
  #- 2.1.2
12
11
  before_install:
13
12
  - ((jruby -v | grep 1.8.7) && jruby --1.9 -S gem update --system 2.1.11) || true
14
13
  before_script:
15
14
  #- echo \"JRUBY_OPTS: $JRUBY_OPTS\"
16
- - export JRUBY_OPTS="--server -Xcext.enabled=false -Xcompile.invokedynamic=false"
15
+ - export JRUBY_OPTS="$JRUBY_OPTS --server -Xcext.enabled=false -Xcompile.invokedynamic=false"
17
16
  - export JAVA_OPTS="$JAVA_OPTS" # -Xmx600M
18
17
  script:
19
18
  - bundle exec rake tomcat:jndi:download tomcat:jdbc:download tomcat:dbcp:download
20
- - bundle exec rake c3p0:download hikari:download
19
+ - bundle exec rake c3p0:download
20
+ - bundle exec rake hikari:download
21
+ - bundle exec rake dbcp:download
21
22
  - bundle exec rake db:create:mysql db:create:postgresql
22
23
  env:
23
- - JRUBY_OPTS="$JRUBY_OPTS" AR_ADAPTER=mysql AR_VERSION="~> 4.1.6"
24
- - JRUBY_OPTS="$JRUBY_OPTS" AR_ADAPTER=postgresql AR_VERSION="~> 4.1.6"
25
- - JRUBY_OPTS="$JRUBY_OPTS" AR_ADAPTER=postgresql AR_VERSION="~> 3.2.18"
26
- - JRUBY_OPTS="--1.8 $JRUBY_OPTS" AR_ADAPTER=mysql AR_VERSION="~> 3.2.18"
24
+ - JRUBY_OPTS="$JRUBY_OPTS" AR_ADAPTER=mysql AR_VERSION="~> 4.1.9" HIKARI_VERSION="2.3.2"
25
+ - JRUBY_OPTS="$JRUBY_OPTS" AR_ADAPTER=postgresql AR_VERSION="~> 4.1.9" HIKARI_VERSION="2.3.1-java6"
26
+ - JRUBY_OPTS="$JRUBY_OPTS" AR_ADAPTER=mysql AR_VERSION="~> 4.1.9" HIKARI_VERSION="2.0.1-java6"
27
+ - JRUBY_OPTS="$JRUBY_OPTS" AR_ADAPTER=postgresql AR_VERSION="~> 3.2.18" HIKARI_VERSION="1.4.0"
28
+ - JRUBY_OPTS="--1.8 $JRUBY_OPTS" AR_ADAPTER=mysql AR_VERSION="~> 3.2.18" HIKARI_VERSION="2.2.5-java6"
29
+ matrix:
30
+ #allow_failures:
31
+ #- rvm: jruby-head
32
+ exclude:
33
+ - rvm: jruby-1.7.16
34
+ env: JRUBY_OPTS="$JRUBY_OPTS" AR_ADAPTER=mysql AR_VERSION="~> 4.1.9" HIKARI_VERSION="2.3.2"
35
+ jdk: oraclejdk7
36
+ - rvm: jruby-1.7.16
37
+ env: JRUBY_OPTS="$JRUBY_OPTS" AR_ADAPTER=postgresql AR_VERSION="~> 4.1.9" HIKARI_VERSION="2.3.1-java6"
38
+ jdk: oraclejdk8
39
+ - rvm: jruby-1.7.16
40
+ env: JRUBY_OPTS="$JRUBY_OPTS" AR_ADAPTER=mysql AR_VERSION="~> 4.1.9" HIKARI_VERSION="2.0.1-java6"
41
+ jdk: oraclejdk8
42
+ - rvm: jruby-1.7.16
43
+ env: JRUBY_OPTS="--1.8 $JRUBY_OPTS" AR_ADAPTER=mysql AR_VERSION="~> 3.2.18" HIKARI_VERSION="2.2.5-java6"
44
+ jdk: oraclejdk8
data/Gemfile CHANGED
@@ -16,6 +16,11 @@ else
16
16
  gem 'activerecord', :require => nil
17
17
  end
18
18
 
19
+ if RUBY_VERSION.index('1.8') == 0
20
+ gem 'i18n', '< 0.7.0' # Gem::InstallError: i18n requires Ruby version >= 1.9.3
21
+ gem 'atomic', '1.1.16' # concurrent-ruby gem only for Ruby version >= 1.9.3
22
+ end
23
+
19
24
  platform :jruby do
20
25
  if version = ENV['AR_JDBC_VERSION']
21
26
  if version.index('/') && ::File.exist?(version)
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013-2014 [Karol Bucek](http://kares.org)
1
+ Copyright (c) 2013-2015 [Karol Bucek](http://kares.org)
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -117,7 +117,7 @@ Only tested with ActiveRecord-JDBC-Adapter using the official Postgres' driver.
117
117
 
118
118
  ## Copyright
119
119
 
120
- Copyright (c) 2014 [Karol Bucek](http://kares.org).
120
+ Copyright (c) 2015 [Karol Bucek](http://kares.org).
121
121
  See LICENSE (http://en.wikipedia.org/wiki/MIT_License) for details.
122
122
 
123
123
  [0]: http://res.cloudinary.com/kares/image/upload/c_scale,h_600,w_800/v1406451696/bogacs.jpg
data/Rakefile CHANGED
@@ -94,7 +94,7 @@ namespace :tomcat do
94
94
 
95
95
  tomcat_maven_repo = 'http://repo2.maven.org/maven2/org/apache/tomcat'
96
96
  download_dir = File.expand_path('test/jars', File.dirname(__FILE__))
97
- version_default = '7.0.54'
97
+ version_default = '7.0.59'
98
98
 
99
99
  [ 'tomcat-jdbc', 'tomcat-dbcp' ].each do |tomcat_pool|
100
100
  namespace tomcat_pool.sub('tomcat-', '') do # rake tomcat:dbcp:download
@@ -102,7 +102,8 @@ namespace :tomcat do
102
102
  tomcat_pool_jar = "#{tomcat_pool}.jar"
103
103
 
104
104
  task :download, :version do |_,args| # rake tomcat:jdbc:download[7.0.54]
105
- version = args[:version] || version_default
105
+ env_key = "#{tomcat_pool.upcase.sub('-', '_')}_VERSION" # 'TOMCAT_JDBC_VERSION'
106
+ version = args[:version] || ENV[env_key] || version_default
106
107
 
107
108
  uri = "#{tomcat_maven_repo}/#{tomcat_pool}/#{version}/#{tomcat_pool}-#{version}.jar"
108
109
 
@@ -173,24 +174,47 @@ namespace :tomcat do
173
174
 
174
175
  end
175
176
 
177
+ namespace :dbcp do # a.k.a DBCP2
178
+
179
+ commons_repo = 'http://repo2.maven.org/maven2/org/apache/commons'
180
+ download_dir = File.expand_path('test/jars', File.dirname(__FILE__))
181
+ version_default = '2.0.1'
182
+
183
+ task :download, :version do |_,args| # rake dbcp:download
184
+ version = args[:version] || ENV['DBCP_VERSION'] || version_default
185
+
186
+ dbcp_jar = "commons-dbcp2-#{version}.jar"
187
+
188
+ uri = "#{commons_repo}/commons-dbcp2/#{version}/#{dbcp_jar}"
189
+
190
+ _download(uri, download_dir, dbcp_jar)
191
+ end
192
+
193
+ task :clear do
194
+ Dir.glob( File.join(download_dir, '{commons-dbcp2}*.jar') ).each { |jar| rm jar }
195
+ end
196
+
197
+ end
198
+
176
199
  namespace :c3p0 do
177
200
 
178
201
  mchange_base_repo = 'http://repo2.maven.org/maven2/com/mchange'
179
202
  download_dir = File.expand_path('test/jars', File.dirname(__FILE__))
180
- c3p0_version = '0.9.5-pre9'
181
- mchange_commons_version = '0.2.8'
203
+ c3p0_version = '0.9.5'
204
+ mchange_commons_version = '0.2.9'
182
205
 
183
- c3p0_jar = "c3p0-#{c3p0_version}.jar"
184
206
  mchange_commons_jar = "mchange-commons-java-#{mchange_commons_version}.jar"
185
207
 
186
208
  task :download, :version do |_,args| # rake c3p0:download
187
- # version = args[:version] || version_default
209
+ version = args[:version] || ENV['C3P0_VERSION'] || c3p0_version
210
+
211
+ c3p0_jar = "c3p0-#{version}.jar"
188
212
 
189
213
  uri = "#{mchange_base_repo}/mchange-commons-java/#{mchange_commons_version}/#{mchange_commons_jar}"
190
214
 
191
215
  _download(uri, download_dir, mchange_commons_jar)
192
216
 
193
- uri = "#{mchange_base_repo}/c3p0/#{c3p0_version}/#{c3p0_jar}"
217
+ uri = "#{mchange_base_repo}/c3p0/#{version}/#{c3p0_jar}"
194
218
 
195
219
  _download(uri, download_dir, c3p0_jar)
196
220
  end
@@ -207,8 +231,8 @@ namespace :hikari do
207
231
  slf4j_base_repo = 'http://repo2.maven.org/maven2/org/slf4j'
208
232
  javassist_base_repo = 'http://repo2.maven.org/maven2/org/javassist'
209
233
  download_dir = File.expand_path('test/jars', File.dirname(__FILE__))
210
- hikari_version = '1.3.9'
211
- slf4j_version = '1.7.7'
234
+ hikari_version = '1.4.0'
235
+ slf4j_version = '1.7.10'
212
236
  javassist_version = '3.18.2-GA'
213
237
 
214
238
  slf4j_api_jar = "slf4j-api-#{slf4j_version}.jar"
@@ -216,11 +240,17 @@ namespace :hikari do
216
240
  javassist_jar = "javassist-#{javassist_version}.jar"
217
241
 
218
242
  task :download, :version do |_,args| # rake c3p0:download
219
- version = args[:version] || hikari_version
220
-
221
- hikari_jar = "HikariCP-#{hikari_version}.jar"
243
+ version = args[:version] || ENV['HIKARI_VERSION'] || hikari_version
244
+
245
+ version = version.dup
246
+ if version.sub!('-java6', '') # e.g. '2.3.2-java6'
247
+ hikari_jar = "HikariCP-java6-#{version}.jar"
248
+ uri = "#{hikari_base_repo}/HikariCP-java6/#{version}/#{hikari_jar}"
249
+ else
250
+ hikari_jar = "HikariCP-#{version}.jar"
251
+ uri = "#{hikari_base_repo}/HikariCP/#{version}/#{hikari_jar}"
252
+ end
222
253
 
223
- uri = "#{hikari_base_repo}/HikariCP/#{version}/#{hikari_jar}"
224
254
  _download(uri, download_dir, hikari_jar)
225
255
 
226
256
  uri = "#{slf4j_base_repo}/slf4j-api/#{slf4j_version}/#{slf4j_api_jar}"
@@ -234,7 +264,7 @@ namespace :hikari do
234
264
  end
235
265
 
236
266
  task :clear do
237
- Dir.glob( File.join(download_dir, '{HikariCP,slf4j}*.jar') ).each { |jar| rm jar }
267
+ Dir.glob( File.join(download_dir, '{HikariCP,slf4j,javassist}*.jar') ).each { |jar| rm jar }
238
268
  end
239
269
 
240
270
  end
@@ -18,9 +18,9 @@ Gem::Specification.new do |gem|
18
18
  gem.test_files = gem.files.grep(%r{^test/})
19
19
  gem.require_paths = ["lib"]
20
20
 
21
- gem.add_runtime_dependency 'atomic', '~> 1.1'
22
21
  gem.add_runtime_dependency 'thread_safe', '~> 0.3'
23
22
 
23
+ gem.add_development_dependency 'concurrent-ruby', '>= 0.8' if RUBY_VERSION.index('1.8') != 0
24
24
  gem.add_development_dependency 'rake', '~> 10.3'
25
25
  gem.add_development_dependency 'test-unit', '~> 2.5'
26
26
  end
@@ -2,7 +2,16 @@ require 'active_record/connection_adapters/abstract/connection_pool'
2
2
 
3
3
  require 'thread'
4
4
  require 'thread_safe'
5
- require 'atomic'
5
+ begin
6
+ require 'concurrent/atomic'
7
+ rescue LoadError => e
8
+ begin
9
+ require 'atomic'
10
+ rescue LoadError
11
+ warn "shareable pool needs gem 'concurrent-ruby' please install or add it to your Gemfile"
12
+ raise e
13
+ end
14
+ end
6
15
 
7
16
  require 'active_record/bogacs/pool_support'
8
17
 
@@ -223,6 +232,12 @@ module ActiveRecord
223
232
  least_shared # might be nil in that case we'll likely wait (as super)
224
233
  end
225
234
 
235
+ if defined? Concurrent::Atomic
236
+ Atomic = Concurrent::Atomic
237
+ else
238
+ Atomic = ::Atomic
239
+ end
240
+
226
241
  def add_shared_connection(connection)
227
242
  @shared_connections[connection] = Atomic.new(1)
228
243
  end
@@ -1,5 +1,5 @@
1
1
  module ActiveRecord
2
2
  module Bogacs
3
- VERSION = '0.2.0'
3
+ VERSION = '0.3.0'
4
4
  end
5
5
  end
@@ -1,7 +1,5 @@
1
1
  require File.expand_path('../../test_helper', File.dirname(__FILE__))
2
2
 
3
- require 'atomic'
4
-
5
3
  ActiveRecord::Bogacs::FalsePool.class_eval do
6
4
  # ...
7
5
  end
@@ -178,7 +176,7 @@ module ActiveRecord
178
176
  (max_pool_size - 1).times { threads_ready.pop } # awaits
179
177
 
180
178
  connection = t1_ready.pop
181
- t1_jdbc_connection = connection.jdbc_connection(true)
179
+ t1_jdbc_connection = unwrap_connection(connection)
182
180
 
183
181
  # pool = ActiveRecord::Base.connection_pool
184
182
 
@@ -202,7 +200,7 @@ module ActiveRecord
202
200
 
203
201
  if defined? JRUBY_VERSION
204
202
  if connection2 = t2.join.value
205
- assert_equal t1_jdbc_connection, connection2.jdbc_connection(true)
203
+ assert_equal t1_jdbc_connection, unwrap_connection(connection2)
206
204
  end
207
205
  end
208
206
 
@@ -212,6 +210,12 @@ module ActiveRecord
212
210
  threads && threads.each(&:join)
213
211
  end
214
212
 
213
+ protected
214
+
215
+ def unwrap_connection(connection)
216
+ connection.jdbc_connection(true)
217
+ end
218
+
215
219
  end
216
220
 
217
221
  class ConnectionPoolWrappingTomcatJdbcDataSourceTest < TestBase
@@ -235,6 +239,62 @@ module ActiveRecord
235
239
 
236
240
  end
237
241
 
242
+ class ConnectionPoolWrappingTomcatDbcpDataSourceTest < TestBase
243
+ include ConnectionPoolWrappingDataSourceTestMethods
244
+
245
+ def self.build_data_source(config)
246
+ build_tomcat_dbcp_data_source(config)
247
+ end
248
+
249
+ def self.jndi_name; 'jdbc/TestTomcatDbcpDB' end
250
+
251
+ def self.close_data_source
252
+ @@data_source.close if @@data_source
253
+ end
254
+
255
+ def max_pool_size; @@data_source.max_active end
256
+
257
+ def teardown
258
+ self.class.establish_jndi_connection # for next test
259
+ end
260
+
261
+ protected
262
+
263
+ def unwrap_connection(connection)
264
+ connection = connection.jdbc_connection(true)
265
+ connection.delegate
266
+ end
267
+
268
+ end
269
+
270
+ class ConnectionPoolWrappingDbcpDataSourceTest < TestBase
271
+ include ConnectionPoolWrappingDataSourceTestMethods
272
+
273
+ def self.build_data_source(config)
274
+ build_tomcat_dbcp_data_source(config)
275
+ end
276
+
277
+ def self.jndi_name; 'jdbc/TestTomcatDbcpDB' end
278
+
279
+ def self.close_data_source
280
+ @@data_source.close if @@data_source
281
+ end
282
+
283
+ def max_pool_size; @@data_source.max_active end
284
+
285
+ def teardown
286
+ self.class.establish_jndi_connection # for next test
287
+ end
288
+
289
+ protected
290
+
291
+ def unwrap_connection(connection)
292
+ connection = connection.jdbc_connection(true)
293
+ connection.delegate
294
+ end
295
+
296
+ end
297
+
238
298
  class ConnectionPoolWrappingC3P0DataSourceTest < TestBase
239
299
  include ConnectionPoolWrappingDataSourceTestMethods
240
300
 
data/test/test_helper.rb CHANGED
@@ -110,6 +110,14 @@ end
110
110
  module ActiveRecord
111
111
  module Bogacs
112
112
 
113
+ begin
114
+ require 'concurrent/atomic'
115
+ Atomic = Concurrent::Atomic
116
+ rescue LoadError
117
+ require 'atomic'
118
+ Atomic = ::Atomic
119
+ end
120
+
113
121
  module TestHelper
114
122
 
115
123
  def _test_name
@@ -251,6 +259,28 @@ module ActiveRecord
251
259
  data_source
252
260
  end
253
261
 
262
+ def build_tomcat_dbcp_data_source(ar_jdbc_config = AR_CONFIG)
263
+ load 'test/jars/tomcat-dbcp.jar'
264
+
265
+ data_source = org.apache.tomcat.dbcp.dbcp.BasicDataSource.new
266
+ configure_dbcp_data_source(data_source, ar_jdbc_config)
267
+
268
+ data_source.setAccessToUnderlyingConnectionAllowed true
269
+
270
+ data_source
271
+ end
272
+
273
+ def build_commons_dbcp_data_source(ar_jdbc_config = AR_CONFIG)
274
+ load Dir.glob('test/jars/{commons-dbcp}*.jar').first
275
+
276
+ data_source = org.apache.tomcat.dbcp.dbcp.BasicDataSource.new
277
+ configure_dbcp_data_source(data_source, ar_jdbc_config)
278
+
279
+ data_source.setAccessToUnderlyingConnectionAllowed true
280
+
281
+ data_source
282
+ end
283
+
254
284
  def configure_dbcp_data_source(data_source, ar_jdbc_config)
255
285
  unless driver = ar_jdbc_config[:driver]
256
286
  jdbc_driver_module.load_driver
@@ -261,10 +291,18 @@ module ActiveRecord
261
291
  data_source.setUrl ar_jdbc_config[:url]
262
292
  data_source.setUsername ar_jdbc_config[:username] if ar_jdbc_config[:username]
263
293
  data_source.setPassword ar_jdbc_config[:password] if ar_jdbc_config[:password]
264
- if ar_jdbc_config[:properties]
265
- properties = java.util.Properties.new
266
- properties.putAll ar_jdbc_config[:properties]
267
- data_source.setDbProperties properties
294
+ if properties = ar_jdbc_config[:properties]
295
+ if data_source.respond_to?(:setDbProperties) # TC-JDBC
296
+ db_properties = java.util.Properties.new
297
+ properties.each { |name, value| db_properties.put(name, value.to_s) }
298
+ data_source.setDbProperties db_properties
299
+ else # Tomcat-DBCP / Commons DBCP2
300
+ # format of the string must be: [propertyName=property;]
301
+ connection_properties = properties.inject('') do
302
+ |str, name, val| str << "[#{name}=#{val};]"; str
303
+ end
304
+ data_source.setConnectionProperties connection_properties
305
+ end
268
306
  end
269
307
  # JDBC pool tunings (some mapped from AR configuration) :
270
308
  if ar_jdbc_config[:pool] # default is 100
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-bogacs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karol Bucek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-02 00:00:00.000000000 Z
11
+ date: 2015-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: atomic
14
+ name: thread_safe
15
15
  version_requirements: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: '1.1'
19
+ version: '0.3'
20
20
  requirement: !ruby/object:Gem::Requirement
21
21
  requirements:
22
22
  - - ~>
23
23
  - !ruby/object:Gem::Version
24
- version: '1.1'
24
+ version: '0.3'
25
25
  prerelease: false
26
26
  type: :runtime
27
27
  - !ruby/object:Gem::Dependency
28
- name: thread_safe
28
+ name: concurrent-ruby
29
29
  version_requirements: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
- version: '0.3'
33
+ version: '0.8'
34
34
  requirement: !ruby/object:Gem::Requirement
35
35
  requirements:
36
- - - ~>
36
+ - - '>='
37
37
  - !ruby/object:Gem::Version
38
- version: '0.3'
38
+ version: '0.8'
39
39
  prerelease: false
40
- type: :runtime
40
+ type: :development
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  version_requirements: !ruby/object:Gem::Requirement
@@ -115,7 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
115
  version: '0'
116
116
  requirements: []
117
117
  rubyforge_project:
118
- rubygems_version: 2.1.9
118
+ rubygems_version: 2.4.5
119
119
  signing_key:
120
120
  specification_version: 4
121
121
  summary: A small body of still water, usually fresh ... for ActiveRecord!