march_hare 2.8.0-java → 2.9.0-java

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: 10b9d00ad30cfe685795276ba8bd53d6cc5af312
4
- data.tar.gz: acc9c65925a91800f6a68a1732e15d52eda372ac
3
+ metadata.gz: b56968635df7028f84b2f18fef851cd0351e43e6
4
+ data.tar.gz: 3a582e08e4ea7eb61974083b24d8b901d986883e
5
5
  SHA512:
6
- metadata.gz: 7ae3150965e1d9081ea8ff628fbb4ce23848c88a0fd5c1e28b992d6db54f8eea920e8d7775db8689afc886c3e4a48a0632765d7ce891db327f4731ecfe2b3070
7
- data.tar.gz: 4572abefa55fec760696be30d3bad7707da9120b3e91e7c4ba7816bdf94f40823da08319f03523315f144f56dbaf8075915a2db224bb36a1c61a383c6f8cd73a
6
+ metadata.gz: e39d246d86194431e946266af68edbb78e9f7d3db7b28b722bfec92e4f1b0bebf898cea92c5772020a66820e5f68837e3db886067e86a5992a5236af18116c77
7
+ data.tar.gz: 5be0b472967ff510a4dbec511cba883fac48fd49911e58b6d5e6e7e50ce08a41e751411507f047dcec45593f74013b07dddb57d1fc802af19ee803ad4da18b68
Binary file
@@ -2,6 +2,7 @@
2
2
  require "march_hare/shutdown_listener"
3
3
  require "set"
4
4
  require "march_hare/thread_pools"
5
+ require "java"
5
6
 
6
7
  module MarchHare
7
8
  java_import com.rabbitmq.client.ConnectionFactory
@@ -41,20 +42,26 @@ module MarchHare
41
42
  # @option options [String] :password ("guest") Password
42
43
  # @option options [String] :vhost ("/") Virtual host to use
43
44
  # @option options [Integer] :requested_heartbeat (580) Heartbeat timeout used. 0 means no heartbeat.
44
- # @option options [Boolean] :tls (false) Set to true to use TLS/SSL connection. This will switch port to 5671 by default.
45
+ # @option options [Boolean, String] :tls (false) Set to true to use TLS/SSL connection or TLS version name as a string, e.g. "TLSv1.1".
46
+ # This will switch port to 5671 by default.
47
+ # @option options [String] :tls_certificate_path Path to a PKCS12 certificate.
45
48
  # @option options [java.util.concurrent.ThreadFactory] :thread_factory Thread factory RabbitMQ Java client will use (useful in restricted PaaS platforms such as GAE)
46
49
  #
47
50
  # @see http://rubymarchhare.info/articles/connecting.html Connecting to RabbitMQ guide
48
- def self.connect(options={})
51
+ def self.connect(options = {})
49
52
  cf = ConnectionFactory.new
50
53
 
51
- cf.uri = options[:uri] if options[:uri]
52
- cf.host = hostname_from(options) if include_host?(options)
53
- cf.port = options[:port].to_i if options[:port]
54
- cf.virtual_host = vhost_from(options) if include_vhost?(options)
55
- cf.connection_timeout = timeout_from(options) if include_timeout?(options)
56
- cf.username = username_from(options) if include_username?(options)
57
- cf.password = password_from(options) if include_password?(options)
54
+ if options[:uri]
55
+ cf.uri = options[:uri] if options[:uri]
56
+ else
57
+ cf.host = hostname_from(options) if include_host?(options)
58
+ cf.port = options[:port].to_i if options[:port]
59
+ cf.virtual_host = vhost_from(options) if include_vhost?(options)
60
+ cf.username = username_from(options) if include_username?(options)
61
+ cf.password = password_from(options) if include_password?(options)
62
+ end
63
+
64
+ cf.connection_timeout = timeout_from(options) if include_timeout?(options)
58
65
 
59
66
  cf.requested_heartbeat = heartbeat_from(options)
60
67
  cf.connection_timeout = connection_timeout_from(options) if include_connection_timeout?(options)
@@ -67,44 +74,41 @@ module MarchHare
67
74
  when true then
68
75
  cf.use_ssl_protocol
69
76
  when String then
77
+ # TODO: logging
78
+ $stdout.puts "Using TLS/SSL version #{tls}"
70
79
  if options[:trust_manager]
71
80
  cf.use_ssl_protocol(tls, options[:trust_manager])
72
- elsif (key_cert = tls_key_certificate_path_from(options)) && (key_cert_password = tls_key_certificate_password_from(options))
73
- sslContext = SSLContext.get_instance(tls)
74
- certificate_password = key_cert_password.to_java.to_char_array
81
+ elsif (cert_path = tls_certificate_path_from(options)) && (password = tls_certificate_password_from(options))
82
+ ctx = SSLContext.get_instance(tls)
83
+ pwd = password.to_java.to_char_array
75
84
  begin
76
- input_stream = File.new(key_cert).to_inputstream
77
- key_store = KeyStore.get_instance('PKCS12')
78
- key_store.load(input_stream, certificate_password)
79
-
80
- key_manager_factory = KeyManagerFactory.get_instance("SunX509")
81
- key_manager_factory.init(key_store, certificate_password)
85
+ is = File.new(cert_path).to_inputstream
86
+ ks = KeyStore.get_instance('PKCS12')
87
+ ks.load(is, pwd)
82
88
 
83
- key_managers = key_manager_factory.get_key_managers
89
+ kmf = KeyManagerFactory.get_instance("SunX509")
90
+ kmf.init(ks, pwd)
84
91
 
85
- sslContext.init(key_managers, [NullTrustManager.new].to_java('javax.net.ssl.TrustManager'), nil)
92
+ ctx.init(kmf.get_key_managers, [NullTrustManager.new].to_java('javax.net.ssl.TrustManager'), nil)
86
93
 
87
- cf.use_ssl_protocol(sslContext)
88
- # catch all exceptions from java
89
- rescue Java::JavaLang::Exception => e
94
+ cf.use_ssl_protocol(ctx)
95
+ rescue Java::JavaLang::Throwable => e
90
96
  message = e.message
91
97
  message << "\n"
92
98
  message << e.backtrace.join("\n")
93
99
 
94
100
  raise SSLContextException.new(message)
95
101
  ensure
96
- input_stream.close if input_stream
97
- end
102
+ is.close if is
103
+ end
98
104
  else
99
105
  cf.use_ssl_protocol(tls)
100
106
  end
101
107
  end
102
108
 
103
-
104
109
  new(cf, options)
105
110
  end
106
111
 
107
-
108
112
  class SSLContextException < StandardError
109
113
  end
110
114
 
@@ -116,6 +120,8 @@ module MarchHare
116
120
  # @private
117
121
  def initialize(connection_factory, opts = {})
118
122
  @cf = connection_factory
123
+ @uri = opts[:uri]
124
+ @uses_uri = !(@uri.nil?)
119
125
  # executors cannot be restarted after shutdown,
120
126
  # so we really need a factory here. MK.
121
127
  @executor_factory = opts[:executor_factory] || build_executor_factory_from(opts)
@@ -124,7 +130,11 @@ module MarchHare
124
130
  @default_host_selection_strategy = lambda { |hosts| hosts.sample }
125
131
  @host_selection_strategy = opts[:host_selection_strategy] || @default_host_selection_strategy
126
132
 
127
- @connection = self.new_connection_impl(@hosts, @host_selection_strategy)
133
+ @connection = if @uses_uri
134
+ self.new_uri_connection_impl(opts[:uri])
135
+ else
136
+ self.new_connection_impl(@hosts, @host_selection_strategy)
137
+ end
128
138
  @channels = JavaConcurrent::ConcurrentHashMap.new
129
139
 
130
140
  # should automatic recovery from network failures be used?
@@ -240,7 +250,11 @@ module MarchHare
240
250
 
241
251
  new_connection = converting_rjc_exceptions_to_ruby do
242
252
  reconnecting_on_network_failures(ms) do
243
- self.new_connection_impl(@hosts, @host_selection_strategy)
253
+ if @uses_uri
254
+ self.new_uri_connection_impl(options[:uri])
255
+ else
256
+ self.new_connection_impl(@hosts, @host_selection_strategy)
257
+ end
244
258
  end
245
259
  end
246
260
  @thread_pool = ThreadPools.dynamically_growing
@@ -299,6 +313,35 @@ module MarchHare
299
313
  # the call to #start. MK.
300
314
  end
301
315
 
316
+ def username
317
+ @cf.username
318
+ end
319
+ alias user username
320
+
321
+ def vhost
322
+ @cf.virtual_host
323
+ end
324
+
325
+ def hostname
326
+ @cf.host
327
+ end
328
+ alias host hostname
329
+
330
+ def port
331
+ @cf.port
332
+ end
333
+
334
+ def tls?
335
+ if @uses_uri
336
+ u = java.net.URI.new(@uri.to_java_string)
337
+
338
+ u.scheme == "amqps"
339
+ else
340
+ self.port == ConnectionFactory.DEFAULT_AMQP_OVER_SSL_PORT
341
+ end
342
+ end
343
+ alias ssl? tls?
344
+
302
345
  def method_missing(selector, *args)
303
346
  @connection.__send__(selector, *args)
304
347
  end
@@ -450,7 +493,7 @@ module MarchHare
450
493
 
451
494
  # @private
452
495
  def new_connection_impl(hosts, host_selector)
453
- if hosts && !hosts.empty?
496
+ if hosts && !hosts.empty? && !@uses_uri
454
497
  @cf.host = host_selector.call(hosts)
455
498
  end
456
499
 
@@ -464,6 +507,19 @@ module MarchHare
464
507
  end
465
508
  end
466
509
 
510
+ # @private
511
+ def new_uri_connection_impl(uri)
512
+ @cf.uri = uri
513
+ converting_rjc_exceptions_to_ruby do
514
+ if @executor_factory
515
+ @executor = @executor_factory.call
516
+ @cf.new_connection(@executor)
517
+ else
518
+ @cf.new_connection
519
+ end
520
+ end
521
+ end
522
+
467
523
  # @private
468
524
  def maybe_shut_down_executor
469
525
  @executor.shutdown if @executor
@@ -480,15 +536,23 @@ module MarchHare
480
536
  end
481
537
  end
482
538
 
539
+ def self.tls_certificate_path_from(opts)
540
+ opts[:tls_cert] || opts[:ssl_cert] || opts[:tls_cert_path] || opts[:ssl_cert_path] || opts[:tls_certificate_path] || opts[:ssl_certificate_path]
541
+ end
542
+
483
543
  # @private
484
- def tls_key_certificate_path_from(opts)
485
- opts[:tls_key_cert] || opts[:ssl_key_cert] || opts[:tls_key_cert_path] || opts[:ssl_key_cert_path] || opts[:tls_key_certificate_path] || opts[:ssl_key_certificate_path]
544
+ def tls_certificate_path_from(opts)
545
+ self.class.tls_certificate_path_from(opts)
486
546
  end
487
-
547
+
548
+ def self.tls_certificate_password_from(opts)
549
+ opts[:tls_certificate_password] || opts[:ssl_certificate_password] || opts[:cert_password] || opts[:certificate_password]
550
+ end
551
+
488
552
  # @private
489
- def tls_key_certificate_password_from(opts)
490
- opts[:cert_password] || opts[:certificate_password]
491
- end
553
+ def tls_certificate_password_from(opts)
554
+ self.class.tls_certificate_password_from(opts)
555
+ end
492
556
 
493
557
  # Ruby blocks-based BlockedListener that handles
494
558
  # connection.blocked and connection.unblocked.
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module MarchHare
4
- VERSION = "2.8.0"
4
+ VERSION = "2.9.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: march_hare
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.0
4
+ version: 2.9.0
5
5
  platform: java
6
6
  authors:
7
7
  - Theo Hultberg
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-01-31 00:00:00.000000000 Z
12
+ date: 2015-04-04 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: RabbitMQ client for JRuby built around the official RabbitMQ Java client
15
15
  email:
@@ -60,3 +60,4 @@ signing_key:
60
60
  specification_version: 4
61
61
  summary: RabbitMQ client for JRuby built around the official RabbitMQ Java client
62
62
  test_files: []
63
+ has_rdoc: