activerecord-bogacs 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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!