jruby-hazelcast-client 3.7.2-jruby
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 +7 -0
- data/.project +13 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +58 -0
- data/LICENSE +20 -0
- data/README.md +1 -0
- data/Rakefile +63 -0
- data/VERSION +1 -0
- data/VERSION_EXT +0 -0
- data/jruby-hazelcast-client.gemspec +25 -0
- data/lib/hazelcast/client.rb +119 -0
- data/lib/hazelcast/client/lock.rb +28 -0
- data/lib/hazelcast/client/map.rb +150 -0
- data/lib/hazelcast/client/queue.rb +12 -0
- data/lib/hazelcast/client/topic.rb +22 -0
- data/lib/hazelcast/jars.rb +21 -0
- data/lib/hazelcast/jars/hazelcast-3.7.2.jar +0 -0
- data/lib/hazelcast/jars/hazelcast-all-3.7.2.jar +0 -0
- data/lib/hazelcast/jars/hazelcast-client-3.7.2.jar +0 -0
- data/lib/hazelcast/jars/version.rb +38 -0
- data/test/Employee.class +0 -0
- data/test/Employee.java +36 -0
- data/test/helper.rb +67 -0
- data/test/test_lock.rb +48 -0
- data/test/test_map.rb +199 -0
- data/test/test_queue.rb +19 -0
- data/test/test_topic.rb +29 -0
- metadata +120 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 248943fb386ac889036eaa8d9643f962bd1eddbf
|
4
|
+
data.tar.gz: 22d0e6fdc729062af6426c69da2409edef63a420
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b771bb86e86271c13135f715eb76bc7f827ce2d7d9fe00797b4cb900f85913fbd4439f31131caeb467b415931012f4d652449aa3f8a59ad5bf82f05074807718
|
7
|
+
data.tar.gz: 14ec014ebeadbdb495f7c43e6a18c8be09d3f09b7705a265501693bf836a2861006a51c41fa2fc4b6cca593ee1be7874dc02c652d3e2cd2155b6fe2db6b33f22
|
data/.project
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<projectDescription>
|
3
|
+
<name>jruby-hazelcast-client</name>
|
4
|
+
<comment></comment>
|
5
|
+
<projects>
|
6
|
+
</projects>
|
7
|
+
<buildSpec>
|
8
|
+
</buildSpec>
|
9
|
+
<natures>
|
10
|
+
<nature>com.aptana.projects.webnature</nature>
|
11
|
+
<nature>com.aptana.ruby.core.rubynature</nature>
|
12
|
+
</natures>
|
13
|
+
</projectDescription>
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
addressable (2.4.0)
|
5
|
+
builder (3.2.2)
|
6
|
+
colorize (0.8.1)
|
7
|
+
descendants_tracker (0.0.4)
|
8
|
+
thread_safe (~> 0.3, >= 0.3.1)
|
9
|
+
faraday (0.9.2)
|
10
|
+
multipart-post (>= 1.2, < 3)
|
11
|
+
git (1.3.0)
|
12
|
+
github_api (0.14.5)
|
13
|
+
addressable (~> 2.4.0)
|
14
|
+
descendants_tracker (~> 0.0.4)
|
15
|
+
faraday (~> 0.8, < 0.10)
|
16
|
+
hashie (>= 3.4)
|
17
|
+
oauth2 (~> 1.0)
|
18
|
+
hashie (3.4.6)
|
19
|
+
highline (1.7.8)
|
20
|
+
jeweler (2.1.1)
|
21
|
+
builder
|
22
|
+
bundler (>= 1.0)
|
23
|
+
git (>= 1.2.5)
|
24
|
+
github_api
|
25
|
+
highline (>= 1.6.15)
|
26
|
+
nokogiri (>= 1.5.10)
|
27
|
+
rake
|
28
|
+
rdoc
|
29
|
+
semver
|
30
|
+
json (1.8.3-java)
|
31
|
+
jwt (1.5.6)
|
32
|
+
multi_json (1.12.1)
|
33
|
+
multi_xml (0.5.5)
|
34
|
+
multipart-post (2.0.0)
|
35
|
+
nokogiri (1.6.8.1-java)
|
36
|
+
oauth2 (1.2.0)
|
37
|
+
faraday (>= 0.8, < 0.10)
|
38
|
+
jwt (~> 1.0)
|
39
|
+
multi_json (~> 1.3)
|
40
|
+
multi_xml (~> 0.5)
|
41
|
+
rack (>= 1.2, < 3)
|
42
|
+
rack (2.0.1)
|
43
|
+
rake (11.3.0)
|
44
|
+
rdoc (4.2.2)
|
45
|
+
json (~> 1.4)
|
46
|
+
semver (1.0.1)
|
47
|
+
thread_safe (0.3.5-java)
|
48
|
+
|
49
|
+
PLATFORMS
|
50
|
+
java
|
51
|
+
|
52
|
+
DEPENDENCIES
|
53
|
+
bundler
|
54
|
+
colorize
|
55
|
+
jeweler
|
56
|
+
|
57
|
+
BUNDLED WITH
|
58
|
+
1.13.1
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2016 Naveen U.
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
# jruby-hazelcast-client
|
data/Rakefile
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
#require 'bundler'
|
2
|
+
#Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'rake'
|
6
|
+
require 'rake/testtask'
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
begin
|
10
|
+
require 'jeweler'
|
11
|
+
Jeweler::Tasks.new do |gem|
|
12
|
+
gem.name = 'jruby-hazelcast-client'
|
13
|
+
gem.authors = ['Naveen U']
|
14
|
+
gem.email = %w(naveen@azalumni.com)
|
15
|
+
gem.homepage = ''
|
16
|
+
gem.summary = %q{Connecting to a Hazelcast Cluster has never been easier!}
|
17
|
+
gem.description = %q{Hazelcast::Client is a little gem that wraps the Java Hazelcast Client library into a more comfortable JRuby package.}
|
18
|
+
gem.platform = 'jruby'
|
19
|
+
|
20
|
+
#gem.rubyforge_project = 'jruby-hazelcast-client'
|
21
|
+
|
22
|
+
gem.files = FileList['bin/*', 'lib/**/*.rb', 'jars/**/*', 'test/**/*.rb', '[A-Z]*'].to_a
|
23
|
+
gem.test_files = Dir['test/test*.rb']
|
24
|
+
gem.executables = FileList['bin/*'].map { |f| File.basename(f) }
|
25
|
+
gem.require_paths = %w(lib)
|
26
|
+
|
27
|
+
end
|
28
|
+
Jeweler::GemcutterTasks.new
|
29
|
+
rescue LoadError
|
30
|
+
puts 'Jeweler (or a dependency) not available. Install it with: gem install jeweler'
|
31
|
+
end
|
32
|
+
|
33
|
+
Rake::TestTask.new :test do |t|
|
34
|
+
t.libs << 'lib'
|
35
|
+
t.test_files = FileList['test/**/test_*.rb']
|
36
|
+
end
|
37
|
+
|
38
|
+
task :test
|
39
|
+
|
40
|
+
task :default => :test
|
41
|
+
|
42
|
+
begin
|
43
|
+
require 'rcov/rcovtask'
|
44
|
+
Rcov::RcovTask.new do |spec|
|
45
|
+
spec.libs << 'spec'
|
46
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
47
|
+
spec.verbose = true
|
48
|
+
end
|
49
|
+
rescue LoadError
|
50
|
+
task :rcov do
|
51
|
+
abort 'RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
require 'rdoc/task'
|
56
|
+
Rake::RDocTask.new do |rdoc|
|
57
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
58
|
+
|
59
|
+
rdoc.rdoc_dir = 'rdoc'
|
60
|
+
rdoc.title = "jruby-hazelcast-client #{version}"
|
61
|
+
rdoc.rdoc_files.include('README*')
|
62
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
63
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
3.7.2
|
data/VERSION_EXT
ADDED
File without changes
|
@@ -0,0 +1,25 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "jruby-hazelcast-client"
|
3
|
+
s.version = "3.7.2"
|
4
|
+
s.platform = "jruby"
|
5
|
+
|
6
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
7
|
+
s.authors = ["Naveen U"]
|
8
|
+
s.date = "2016-10-11"
|
9
|
+
s.description = "JRuby Hazelcast 3.7.2 client"
|
10
|
+
s.email = ["naveen@azalumni.com"]
|
11
|
+
s.extra_rdoc_files = [
|
12
|
+
"LICENSE",
|
13
|
+
"README.md"
|
14
|
+
]
|
15
|
+
s.files = `git ls-files`.split($/)
|
16
|
+
s.homepage = "https://github.com/nav33n4u/jruby-hazelcast-client"
|
17
|
+
s.require_paths = %w( lib )
|
18
|
+
s.rubyforge_project = "jruby-hazelcast-client"
|
19
|
+
s.summary = "JRuby Hazelcast 3.7.2 client"
|
20
|
+
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
21
|
+
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
22
|
+
s.add_development_dependency 'bundler', '~> 0'
|
23
|
+
s.add_development_dependency 'rake', '~> 0'
|
24
|
+
s.add_development_dependency 'jeweler', '~> 0'
|
25
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
raise "hazelcast-client only runs on JRuby. Sorry!" unless (RUBY_PLATFORM =~ /java/)
|
2
|
+
require 'java'
|
3
|
+
require 'rubygems'
|
4
|
+
require 'hazelcast/jars'
|
5
|
+
|
6
|
+
module Hazelcast
|
7
|
+
class Client
|
8
|
+
|
9
|
+
Hazelcast::Jars.all
|
10
|
+
GEM_ROOT = File.expand_path(File.dirname(__FILE__)) unless defined?(GEM_ROOT)
|
11
|
+
|
12
|
+
attr_reader :username, :password, :host
|
13
|
+
|
14
|
+
def initialize(username = nil, password = nil, host = nil)
|
15
|
+
@username = username || "dev"
|
16
|
+
@password = password || "dev-pass"
|
17
|
+
@host = host || "localhost"
|
18
|
+
@conn_id = self.class.connection_id @username, @password, @host
|
19
|
+
self.class.connect @username, @password, @host
|
20
|
+
client
|
21
|
+
end
|
22
|
+
|
23
|
+
def client
|
24
|
+
self.class.connections[@conn_id]
|
25
|
+
end
|
26
|
+
|
27
|
+
def cluster(name)
|
28
|
+
client.getCluster name.to_s
|
29
|
+
end
|
30
|
+
|
31
|
+
def list(name)
|
32
|
+
client.getList name.to_s
|
33
|
+
end
|
34
|
+
|
35
|
+
def lock(name)
|
36
|
+
client.getLock name.to_s
|
37
|
+
end
|
38
|
+
|
39
|
+
def map(name)
|
40
|
+
client.getMap name.to_s
|
41
|
+
end
|
42
|
+
|
43
|
+
def multi_map(name)
|
44
|
+
client.getMultiMap name.to_s
|
45
|
+
end
|
46
|
+
|
47
|
+
def queue(name)
|
48
|
+
client.getQueue name.to_s
|
49
|
+
end
|
50
|
+
|
51
|
+
def set(name)
|
52
|
+
client.getSet name.to_s
|
53
|
+
end
|
54
|
+
|
55
|
+
def topic(name)
|
56
|
+
client.getTopic name.to_s
|
57
|
+
end
|
58
|
+
|
59
|
+
def transaction
|
60
|
+
txn = client.getTransaction
|
61
|
+
txn.begin
|
62
|
+
begin
|
63
|
+
yield
|
64
|
+
txn.commit
|
65
|
+
nil
|
66
|
+
rescue => e
|
67
|
+
txn.rollback
|
68
|
+
e
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def respond_to?(meth)
|
73
|
+
super || client.respond_to?(meth)
|
74
|
+
end
|
75
|
+
|
76
|
+
def method_missing(meth, *args, &blk)
|
77
|
+
if client.respond_to? meth
|
78
|
+
client.send meth, *args, &blk
|
79
|
+
else
|
80
|
+
super
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def self.connections
|
85
|
+
@connections ||= {}
|
86
|
+
end
|
87
|
+
|
88
|
+
def self.connection_id(username, password, *hosts)
|
89
|
+
"#{username}:#{password}:#{hosts.map{ |x| x.to_s }.sort.join('|')}"
|
90
|
+
end
|
91
|
+
|
92
|
+
def self.connect(username, password, *hosts)
|
93
|
+
conn_id = connection_id(username, password, *hosts)
|
94
|
+
if connections.key? conn_id
|
95
|
+
connections[conn_id]
|
96
|
+
else
|
97
|
+
puts ">> Connecting to [#{hosts.inspect}] as [#{username}] with [#{password}]..."
|
98
|
+
client_config = Java::ComHazelcastClientConfig::ClientConfig.new
|
99
|
+
group_config = Java::ComHazelcastConfig::GroupConfig.new username, password
|
100
|
+
hosts.each {|host| client_config.add_address host }
|
101
|
+
client_config.set_group_config group_config
|
102
|
+
connections[conn_id] = com.hazelcast.client.HazelcastClient.newHazelcastClient client_config
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
%w{ lock map queue topic }.each do |name|
|
111
|
+
require Hazelcast::Client::GEM_ROOT + '/client/' + name
|
112
|
+
end
|
113
|
+
|
114
|
+
at_exit do
|
115
|
+
Hazelcast::Client.connections.each do |conn_id, client|
|
116
|
+
puts ">> Shutting down #{client} before closing shop ..."
|
117
|
+
client.shutdown
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class Java::ComHazelcastClientProxy::ClientLockProxy
|
2
|
+
|
3
|
+
# lock()
|
4
|
+
# unlock()
|
5
|
+
|
6
|
+
def unlocked?
|
7
|
+
!locked?
|
8
|
+
end
|
9
|
+
|
10
|
+
def locking(options = {})
|
11
|
+
raise 'Must provide a block' unless block_given?
|
12
|
+
options = { :tries => 1, :timeout => 5, :unit => :seconds, :failed => false }.update options
|
13
|
+
options[:unit] = java.util.concurrent.TimeUnit.const_get(options[:unit].to_s.upcase) if options[:unit].is_a? Symbol
|
14
|
+
|
15
|
+
while options[:tries] > 0
|
16
|
+
if try_lock(options[:timeout], options[:unit])
|
17
|
+
options[:tries] = 0
|
18
|
+
result = yield
|
19
|
+
unlock
|
20
|
+
return result
|
21
|
+
else
|
22
|
+
options[:tries] -= 1
|
23
|
+
end
|
24
|
+
end
|
25
|
+
options[:failed]
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,150 @@
|
|
1
|
+
require 'colorize'
|
2
|
+
|
3
|
+
class Java::ComHazelcastCore::EntryEvent
|
4
|
+
|
5
|
+
alias_method :name, :getName
|
6
|
+
alias_method :source, :getSource
|
7
|
+
alias_method :member, :getMember
|
8
|
+
|
9
|
+
def type
|
10
|
+
getEventType.name
|
11
|
+
end
|
12
|
+
|
13
|
+
alias_method :key, :getKey
|
14
|
+
alias_method :old_value, :getOldValue
|
15
|
+
alias_method :new_value, :getValue
|
16
|
+
alias_method :value, :getValue
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
class Hazelcast::Client::DefaultMapListener
|
21
|
+
|
22
|
+
include com.hazelcast.core.EntryListener
|
23
|
+
|
24
|
+
def entryAdded(event)
|
25
|
+
#puts "#{event.type} : #{event.key} : #{event.value}"
|
26
|
+
end
|
27
|
+
|
28
|
+
def entryRemoved(event)
|
29
|
+
#puts "#{event.type} : #{event.key} : #{event.value}"
|
30
|
+
end
|
31
|
+
|
32
|
+
def entryUpdated(event)
|
33
|
+
#puts "#{event.type} : #{event.key} : #{event.value}"
|
34
|
+
end
|
35
|
+
|
36
|
+
def entryEvicted(event)
|
37
|
+
#puts "#{event.type} : #{event.key} : #{event.value}"
|
38
|
+
end
|
39
|
+
|
40
|
+
def method_missing(name, *params)
|
41
|
+
#puts "method_missing : #{name} : #{params.inspect}"
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
class Java::ComHazelcastClientProxy::ClientMapProxy
|
47
|
+
|
48
|
+
java_import 'com.hazelcast.query.SqlPredicate'
|
49
|
+
java_import 'com.hazelcast.core.EntryListener'
|
50
|
+
|
51
|
+
def [](key)
|
52
|
+
get key.to_s
|
53
|
+
end
|
54
|
+
|
55
|
+
def []=(key, value)
|
56
|
+
put key.to_s, value
|
57
|
+
end
|
58
|
+
|
59
|
+
def keys(predicate = nil)
|
60
|
+
predicate = prepare_predicate(predicate) unless predicate.is_a?(SqlPredicate)
|
61
|
+
key_set(predicate).map
|
62
|
+
end
|
63
|
+
|
64
|
+
alias_method :unlearned_values, :values
|
65
|
+
|
66
|
+
def values(predicate = nil)
|
67
|
+
predicate = prepare_predicate(predicate) unless predicate.is_a?(SqlPredicate)
|
68
|
+
unlearned_values(predicate).map
|
69
|
+
end
|
70
|
+
|
71
|
+
alias_method :find, :values
|
72
|
+
|
73
|
+
def prepare_predicate(predicate)
|
74
|
+
return if predicate.nil?
|
75
|
+
case predicate
|
76
|
+
when String
|
77
|
+
SqlPredicate.new predicate
|
78
|
+
when Hash
|
79
|
+
query = predicate.map do |field, value|
|
80
|
+
cmp = '='
|
81
|
+
if value.is_a?(String)
|
82
|
+
value = "'" + value + "'"
|
83
|
+
cmp = 'LIKE' if value.index('%')
|
84
|
+
end
|
85
|
+
"#{field} #{cmp} #{value}"
|
86
|
+
end.join(' AND ')
|
87
|
+
SqlPredicate.new query
|
88
|
+
else
|
89
|
+
raise 'Unknown predicate type'
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
java_import 'com.hazelcast.core.EntryListener'
|
94
|
+
|
95
|
+
# ===================================================================
|
96
|
+
# DEPRECATION NOTICE
|
97
|
+
# -------------------------------------------------------------------
|
98
|
+
# Deprecating this functionality in favor of actual listener classes
|
99
|
+
|
100
|
+
def on_entry_added(key = nil, include_value = true, &blk)
|
101
|
+
warn '[DEPRECATED] Use an actual class instead of a block'.red
|
102
|
+
klass = Class.new
|
103
|
+
klass.send :include, EntryListener
|
104
|
+
klass.send :define_method, :entryAdded, &blk
|
105
|
+
klass.send :define_method, :method_missing do |name, *params|
|
106
|
+
#puts "method_missing : (#{name.class.name}) #{name} : #{params.inspect}"
|
107
|
+
true
|
108
|
+
end
|
109
|
+
key ? add_entry_listener(klass.new, key, include_value) : add_entry_listener(klass.new, include_value)
|
110
|
+
end
|
111
|
+
|
112
|
+
def on_entry_removed(key = nil, include_value = true, &blk)
|
113
|
+
warn '[DEPRECATED] Use an actual class instead of a block'.red
|
114
|
+
klass = Class.new
|
115
|
+
klass.send :include, EntryListener
|
116
|
+
klass.send :define_method, :entryRemoved, &blk
|
117
|
+
klass.send :define_method, :method_missing do |name, *params|
|
118
|
+
#puts "method_missing : (#{name.class.name}) #{name} : #{params.inspect}"
|
119
|
+
true
|
120
|
+
end
|
121
|
+
key ? add_entry_listener(klass.new(), key, include_value) : add_entry_listener(klass.new, include_value)
|
122
|
+
end
|
123
|
+
|
124
|
+
def on_entry_updated(key = nil, include_value = true, &blk)
|
125
|
+
warn '[DEPRECATED] Use an actual class instead of a block'.red
|
126
|
+
klass = Class.new
|
127
|
+
klass.send :include, EntryListener
|
128
|
+
klass.send :define_method, :entryUpdated, &blk
|
129
|
+
klass.send :define_method, :method_missing do |name, *params|
|
130
|
+
#puts "method_missing : (#{name.class.name}) #{name} : #{params.inspect}"
|
131
|
+
true
|
132
|
+
end
|
133
|
+
key ? add_entry_listener(klass.new, key, include_value) : add_entry_listener(klass.new, include_value)
|
134
|
+
end
|
135
|
+
|
136
|
+
def on_entry_evicted(key = nil, include_value = true, &blk)
|
137
|
+
warn '[DEPRECATED] Use an actual class instead of a block'.red
|
138
|
+
klass = Class.new
|
139
|
+
klass.send :include, EntryListener
|
140
|
+
klass.send :define_method, :entryEvicted, &blk
|
141
|
+
klass.send :define_method, :method_missing do |name, *params|
|
142
|
+
#puts "method_missing : (#{name.class.name}) #{name} : #{params.inspect}"
|
143
|
+
true
|
144
|
+
end
|
145
|
+
key ? add_entry_listener(klass.new, key, include_value) : add_entry_listener(klass.new, include_value)
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|
149
|
+
|
150
|
+
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
class Java::ComHazelcastClientProxy::ClientQueueProxy
|
4
|
+
|
5
|
+
alias_method :unlearned_poll, :poll
|
6
|
+
|
7
|
+
def poll(timeout = 5, unit = :seconds)
|
8
|
+
unit = java.util.concurrent.TimeUnit.const_get(unit.to_s.upcase) if unit.is_a? Symbol
|
9
|
+
unlearned_poll timeout, unit
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class Java::ComHazelcastClientProxy::ClientTopicProxy
|
2
|
+
|
3
|
+
java_import 'com.hazelcast.core.MessageListener'
|
4
|
+
|
5
|
+
def on_message(&blk)
|
6
|
+
klass = Class.new
|
7
|
+
klass.send :include, MessageListener
|
8
|
+
klass.send :define_method, :onMessage, &blk
|
9
|
+
add_message_listener klass.new
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
class Java::ComHazelcastCore::Message
|
15
|
+
|
16
|
+
alias_method :original_to_s, :to_s
|
17
|
+
|
18
|
+
alias_method :message, :get_message_object
|
19
|
+
|
20
|
+
alias_method :to_s, :get_message_object
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../lib/hazelcast/jars/version')
|
2
|
+
|
3
|
+
module Hazelcast
|
4
|
+
class Jars
|
5
|
+
class << self
|
6
|
+
|
7
|
+
def client
|
8
|
+
require "hazelcast/jars/hazelcast-client-#{version}.jar"
|
9
|
+
end
|
10
|
+
|
11
|
+
def server
|
12
|
+
require "hazelcast/jars/hazelcast-#{version}.jar"
|
13
|
+
end
|
14
|
+
|
15
|
+
def all
|
16
|
+
require "hazelcast/jars/hazelcast-all-#{version}.jar"
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Hazelcast
|
2
|
+
class Jars
|
3
|
+
|
4
|
+
LIB_PATH = File.expand_path(File.dirname(File.dirname(File.dirname(__FILE__)))) unless defined?(LIB_PATH)
|
5
|
+
ROOT_PATH = File.dirname(LIB_PATH) unless defined?(ROOT_PATH)
|
6
|
+
|
7
|
+
$:.unshift(LIB_PATH) unless $:.include?(LIB_PATH)
|
8
|
+
|
9
|
+
class << self
|
10
|
+
|
11
|
+
def version
|
12
|
+
@version ||= File.read File.join(ROOT_PATH, 'VERSION')
|
13
|
+
end
|
14
|
+
|
15
|
+
def version_ext
|
16
|
+
@version_ext ||= File.read File.join(ROOT_PATH, 'VERSION_EXT')
|
17
|
+
end
|
18
|
+
|
19
|
+
def gem_version
|
20
|
+
unless @gem_version
|
21
|
+
@gem_version = version
|
22
|
+
@gem_version += ".#{version_ext}" unless version_ext.empty?
|
23
|
+
end
|
24
|
+
@gem_version
|
25
|
+
end
|
26
|
+
|
27
|
+
def full_version
|
28
|
+
unless @full_version
|
29
|
+
@full_version = version
|
30
|
+
@full_version += "-#{version_ext}" unless version_ext.empty?
|
31
|
+
end
|
32
|
+
@full_version
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
data/test/Employee.class
ADDED
Binary file
|
data/test/Employee.java
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
import java.io.Serializable;
|
2
|
+
|
3
|
+
public class Employee implements Serializable {
|
4
|
+
|
5
|
+
public String name;
|
6
|
+
public int age;
|
7
|
+
public boolean active;
|
8
|
+
public double salary;
|
9
|
+
|
10
|
+
public Employee(String name, int age, boolean live, double price) {
|
11
|
+
this.name = name;
|
12
|
+
this.age = age;
|
13
|
+
this.active = live;
|
14
|
+
this.salary = price;
|
15
|
+
}
|
16
|
+
|
17
|
+
public Employee() {
|
18
|
+
}
|
19
|
+
|
20
|
+
public String getName() {
|
21
|
+
return name;
|
22
|
+
}
|
23
|
+
|
24
|
+
public int getAge() {
|
25
|
+
return age;
|
26
|
+
}
|
27
|
+
|
28
|
+
public double getSalary() {
|
29
|
+
return salary;
|
30
|
+
}
|
31
|
+
|
32
|
+
public boolean isActive() {
|
33
|
+
return active;
|
34
|
+
}
|
35
|
+
|
36
|
+
}
|
data/test/helper.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
unless defined?(HELPER_LOADED)
|
2
|
+
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/../lib/hazelcast/client')
|
4
|
+
require 'test/unit'
|
5
|
+
require 'forwardable'
|
6
|
+
require 'date'
|
7
|
+
require 'socket'
|
8
|
+
|
9
|
+
my_ip = Socket.ip_address_list.detect do |intf|
|
10
|
+
intf.ipv4? and !intf.ipv4_loopback? and !intf.ipv4_multicast? and !intf.ipv4_private?
|
11
|
+
end.ip_address rescue 'localhost'
|
12
|
+
|
13
|
+
# Load the Hazelcast cluster
|
14
|
+
CLIENT = Hazelcast::Client.new ENV['HAZELCAST_USER'] || 'dev',
|
15
|
+
ENV['HAZELCAST_PASSWORD'] || 'dev-pass',
|
16
|
+
ENV['HAZELCAST_HOST'] || my_ip
|
17
|
+
|
18
|
+
# Grab notices
|
19
|
+
class Notices
|
20
|
+
class << self
|
21
|
+
extend Forwardable
|
22
|
+
def all
|
23
|
+
@all ||= []
|
24
|
+
end
|
25
|
+
def_delegators :all, :size, :<<, :first, :last, :clear, :map, :[]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Listen on messages
|
30
|
+
class TestMessageListener
|
31
|
+
def initialize(name)
|
32
|
+
@name = name
|
33
|
+
end
|
34
|
+
def on_message(msg)
|
35
|
+
Notices << "[#{@name}] #{msg}"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Listen on events
|
40
|
+
class TestEventListener
|
41
|
+
def initialize(name)
|
42
|
+
@name = name
|
43
|
+
end
|
44
|
+
def entryAdded(event)
|
45
|
+
Notices << "[#{@name}] added : #{event.key} : #{event.value}"
|
46
|
+
end
|
47
|
+
def entryRemoved(event)
|
48
|
+
Notices << "[#{@name}] removed : #{event.key} : #{event.value}"
|
49
|
+
end
|
50
|
+
def entryUpdated(event)
|
51
|
+
Notices << "[#{@name}] updated : #{event.key} : #{event.value}"
|
52
|
+
end
|
53
|
+
def entryEvicted(event)
|
54
|
+
Notices << "[#{@name}] evicted : #{event.key} : #{event.value}"
|
55
|
+
end
|
56
|
+
def method_missing(name, *params)
|
57
|
+
Notices << "[#{@name}] method_missing : #{name} : #{params.inspect}"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# Loading the Employee Java class
|
62
|
+
$CLASSPATH << File.expand_path(File.dirname(__FILE__)) + '/'
|
63
|
+
java_import 'Employee'
|
64
|
+
|
65
|
+
# Finished loading helpers
|
66
|
+
HELPER_LOADED = true
|
67
|
+
end
|
data/test/test_lock.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/helper')
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
class TestHazelcastLock < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_single_lock
|
7
|
+
lock = CLIENT.lock :test_single_lock
|
8
|
+
|
9
|
+
lock.forceUnlock
|
10
|
+
assert lock.unlocked?
|
11
|
+
lock.lock
|
12
|
+
assert lock.locked?
|
13
|
+
lock.unlock
|
14
|
+
assert lock.unlocked?
|
15
|
+
|
16
|
+
lock.locking do
|
17
|
+
assert lock.locked?
|
18
|
+
sleep 0.1
|
19
|
+
assert lock.locked?
|
20
|
+
end
|
21
|
+
assert lock.unlocked?
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_double_lock
|
25
|
+
lock_1 = CLIENT.lock :test_double_lock
|
26
|
+
lock_2 = CLIENT.lock :test_double_lock
|
27
|
+
|
28
|
+
lock_1.forceUnlock
|
29
|
+
assert lock_1.unlocked?
|
30
|
+
assert lock_2.unlocked?
|
31
|
+
|
32
|
+
lock_2.lock
|
33
|
+
assert lock_1.locked?
|
34
|
+
assert lock_2.locked?
|
35
|
+
|
36
|
+
lock_1.unlock
|
37
|
+
lock_1.locking do
|
38
|
+
assert lock_1.locked?
|
39
|
+
assert lock_2.locked?
|
40
|
+
sleep 0.1
|
41
|
+
assert lock_1.locked?
|
42
|
+
assert lock_2.locked?
|
43
|
+
end
|
44
|
+
assert lock_1.unlocked?
|
45
|
+
assert lock_2.unlocked?
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
data/test/test_map.rb
ADDED
@@ -0,0 +1,199 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/helper')
|
2
|
+
|
3
|
+
class TestHazelcastMap < Test::Unit::TestCase
|
4
|
+
|
5
|
+
java_import 'com.hazelcast.query.SqlPredicate'
|
6
|
+
|
7
|
+
def test_same_object
|
8
|
+
hash = CLIENT.map :test_same_object
|
9
|
+
map = CLIENT.map :test_same_object
|
10
|
+
hash.clear
|
11
|
+
assert_equal hash.name, map.name
|
12
|
+
hash[:a] = 1
|
13
|
+
assert_equal hash[:a], map[:a]
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_string_keys
|
17
|
+
hash = CLIENT.map :test_string_keys
|
18
|
+
hash.clear
|
19
|
+
|
20
|
+
hash[:a] = 1
|
21
|
+
assert_equal hash['a'], 1
|
22
|
+
assert_equal hash[:a], 1
|
23
|
+
|
24
|
+
hash['b'] = 2
|
25
|
+
assert_equal hash[:b], 2
|
26
|
+
|
27
|
+
hash[Date.new(2010, 3, 18)] = 3
|
28
|
+
assert_equal hash['2010-03-18'], 3
|
29
|
+
|
30
|
+
hash[4] = 4
|
31
|
+
assert_equal hash['4'], 4
|
32
|
+
assert_equal hash[4], 4
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_predicates
|
36
|
+
map = CLIENT.map :test_predicates
|
37
|
+
|
38
|
+
predicate = map.prepare_predicate 'active = false AND (age = 45 OR name = \'Joe Mategna\')'
|
39
|
+
assert_kind_of Java::ComHazelcastQuery::SqlPredicate, predicate
|
40
|
+
assert_equal '(active=false AND (age=45 OR name=Joe Mategna))', predicate.to_s
|
41
|
+
|
42
|
+
predicate = map.prepare_predicate :quantity => 3
|
43
|
+
assert_kind_of Java::ComHazelcastQuery::SqlPredicate, predicate
|
44
|
+
assert_equal 'quantity=3', predicate.to_s
|
45
|
+
|
46
|
+
predicate = map.prepare_predicate :country => 'Unites States of America'
|
47
|
+
assert_kind_of Java::ComHazelcastQuery::SqlPredicate, predicate
|
48
|
+
assert_equal 'country=Unites States of America', predicate.to_s
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_class_entry_added
|
52
|
+
map = CLIENT.map :test_class_entry_added
|
53
|
+
Notices.clear; map.clear
|
54
|
+
map.add_entry_listener TestEventListener.new('test_class_entry_added'), true
|
55
|
+
|
56
|
+
assert_equal Notices.size, 0
|
57
|
+
k, v = 'a1', 'b2'
|
58
|
+
map[k] = v
|
59
|
+
sleep 1.5
|
60
|
+
assert_equal Notices.size, 1
|
61
|
+
assert_equal Notices.all, [
|
62
|
+
'[test_class_entry_added] added : a1 : b2'
|
63
|
+
]
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_class_entry_removed
|
67
|
+
map = CLIENT.map :test_class_entry_removed
|
68
|
+
Notices.clear; map.clear
|
69
|
+
map.add_entry_listener TestEventListener.new('test_class_entry_removed'), true
|
70
|
+
|
71
|
+
assert_equal Notices.size, 0
|
72
|
+
k, v = 'a1', 'b2'
|
73
|
+
map[k] = v
|
74
|
+
map.remove k
|
75
|
+
sleep 0.25
|
76
|
+
assert_equal Notices.size, 2
|
77
|
+
assert_equal Notices.all, [
|
78
|
+
'[test_class_entry_removed] added : a1 : b2',
|
79
|
+
'[test_class_entry_removed] removed : a1 : '
|
80
|
+
]
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_class_entry_updated
|
84
|
+
map = CLIENT.map :test_class_entry_updated
|
85
|
+
Notices.clear; map.clear
|
86
|
+
map.add_entry_listener TestEventListener.new('test_class_entry_updated'), true
|
87
|
+
|
88
|
+
assert_equal Notices.size, 0
|
89
|
+
k, v = 'a1', 'b2'
|
90
|
+
map[k] = 'b1'
|
91
|
+
map[k] = v
|
92
|
+
sleep 0.5
|
93
|
+
assert_equal Notices.size, 2
|
94
|
+
assert_equal Notices.all, [
|
95
|
+
'[test_class_entry_updated] added : a1 : b1',
|
96
|
+
'[test_class_entry_updated] updated : a1 : b2'
|
97
|
+
]
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_class_entry_evicted
|
101
|
+
map = CLIENT.map :test_class_entry_evicted
|
102
|
+
Notices.clear; map.clear
|
103
|
+
map.add_entry_listener TestEventListener.new('test_class_entry_evicted'), true
|
104
|
+
|
105
|
+
assert_equal Notices.size, 0
|
106
|
+
k, v = 'a1', 'b2'
|
107
|
+
map[k] = v
|
108
|
+
map.evict k
|
109
|
+
sleep 0.25
|
110
|
+
assert_equal Notices.size, 2
|
111
|
+
assert_equal Notices.all, [
|
112
|
+
'[test_class_entry_evicted] added : a1 : b2',
|
113
|
+
'[test_class_entry_evicted] evicted : a1 : '
|
114
|
+
]
|
115
|
+
end
|
116
|
+
|
117
|
+
# ===================================================================
|
118
|
+
# DEPRECATION NOTICE
|
119
|
+
# -------------------------------------------------------------------
|
120
|
+
# Deprecating this functionality in favor of actual listener classes
|
121
|
+
|
122
|
+
def test_entry_added
|
123
|
+
map = CLIENT.map :test_entry_added
|
124
|
+
Notices.clear; map.clear
|
125
|
+
map.on_entry_added do |event|
|
126
|
+
Notices << "added : #{event.key} : #{event.value}"
|
127
|
+
end
|
128
|
+
|
129
|
+
assert_equal Notices.size, 0
|
130
|
+
k, v = 'a1', 'b2'
|
131
|
+
map[k] = v
|
132
|
+
sleep 1.5
|
133
|
+
|
134
|
+
assert_equal Notices.size, 1
|
135
|
+
assert_equal Notices.all, [
|
136
|
+
'added : a1 : b2'
|
137
|
+
]
|
138
|
+
end
|
139
|
+
|
140
|
+
def test_entry_removed
|
141
|
+
map = CLIENT.map :test_entry_removed
|
142
|
+
Notices.clear; map.clear
|
143
|
+
map.on_entry_removed do |event|
|
144
|
+
Notices << "removed : #{event.key} : #{event.value}"
|
145
|
+
end
|
146
|
+
|
147
|
+
assert_equal Notices.size, 0
|
148
|
+
k, v = 'a1', 'b2'
|
149
|
+
map[k] = v
|
150
|
+
map.remove k
|
151
|
+
sleep 0.25
|
152
|
+
|
153
|
+
assert_equal Notices.size, 1
|
154
|
+
assert_equal Notices.all, [
|
155
|
+
'removed : a1 : '
|
156
|
+
]
|
157
|
+
end
|
158
|
+
|
159
|
+
def test_entry_updated
|
160
|
+
map = CLIENT.map :test_entry_updated
|
161
|
+
Notices.clear; map.clear
|
162
|
+
map.on_entry_updated do |event|
|
163
|
+
Notices << "updated : #{event.key} : #{event.value}"
|
164
|
+
end
|
165
|
+
|
166
|
+
assert_equal Notices.size, 0
|
167
|
+
k, v = 'a1', 'b2'
|
168
|
+
map[k] = 'b0'
|
169
|
+
map[k] = 'b1'
|
170
|
+
map[k] = v
|
171
|
+
sleep 0.5
|
172
|
+
|
173
|
+
assert_equal Notices.size, 2
|
174
|
+
assert_equal Notices.all, [
|
175
|
+
'updated : a1 : b1',
|
176
|
+
'updated : a1 : b2'
|
177
|
+
]
|
178
|
+
end
|
179
|
+
|
180
|
+
def test_entry_evicted
|
181
|
+
map = CLIENT.map :test_entry_evicted
|
182
|
+
Notices.clear; map.clear
|
183
|
+
map.on_entry_evicted do |event|
|
184
|
+
Notices << "evicted : #{event.key} : #{event.value}"
|
185
|
+
end
|
186
|
+
|
187
|
+
assert_equal Notices.size, 0
|
188
|
+
k, v = 'a1', 'b2'
|
189
|
+
map[k] = v
|
190
|
+
map.evict k
|
191
|
+
sleep 0.25
|
192
|
+
|
193
|
+
assert_equal Notices.size, 1
|
194
|
+
assert_equal Notices.all, [
|
195
|
+
'evicted : a1 : '
|
196
|
+
]
|
197
|
+
end
|
198
|
+
|
199
|
+
end
|
data/test/test_queue.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/helper')
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
class TestHazelcastQueue < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_single_queing
|
7
|
+
tasks = CLIENT.queue :test_single
|
8
|
+
qty = 50
|
9
|
+
qty.times { |idx| tasks.put idx }
|
10
|
+
found = []
|
11
|
+
while !tasks.empty? do
|
12
|
+
task = tasks.poll
|
13
|
+
found << task
|
14
|
+
end
|
15
|
+
assert !found.empty?
|
16
|
+
assert_equal found.size, qty
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
data/test/test_topic.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/helper') unless defined?(HELPER_LOADED)
|
2
|
+
|
3
|
+
class TestHazelcastTopic < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_block_listener
|
6
|
+
Notices.clear
|
7
|
+
topic = CLIENT.topic :test_block
|
8
|
+
topic.on_message do |msg|
|
9
|
+
Notices << msg.to_s
|
10
|
+
end
|
11
|
+
assert_equal Notices.size, 0
|
12
|
+
topic.publish "Hola!"
|
13
|
+
sleep 0.25
|
14
|
+
assert_equal Notices.size, 1
|
15
|
+
assert_equal Notices.last, "Hola!"
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_class_listener
|
19
|
+
Notices.clear
|
20
|
+
topic = CLIENT.topic :test_class
|
21
|
+
topic.add_message_listener TestMessageListener.new("test_class")
|
22
|
+
assert_equal Notices.size, 0
|
23
|
+
topic.publish "Hola!"
|
24
|
+
sleep 0.25
|
25
|
+
assert_equal Notices.size, 1
|
26
|
+
assert_equal Notices.last, "[test_class] Hola!"
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jruby-hazelcast-client
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 3.7.2
|
5
|
+
platform: jruby
|
6
|
+
authors:
|
7
|
+
- Naveen U
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-10-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - "~>"
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: '0'
|
19
|
+
name: bundler
|
20
|
+
prerelease: false
|
21
|
+
type: :development
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - "~>"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
name: rake
|
34
|
+
prerelease: false
|
35
|
+
type: :development
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
name: jeweler
|
48
|
+
prerelease: false
|
49
|
+
type: :development
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: JRuby Hazelcast 3.7.2 client
|
56
|
+
email:
|
57
|
+
- naveen@azalumni.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files:
|
61
|
+
- LICENSE
|
62
|
+
- README.md
|
63
|
+
files:
|
64
|
+
- ".project"
|
65
|
+
- Gemfile
|
66
|
+
- Gemfile.lock
|
67
|
+
- LICENSE
|
68
|
+
- README.md
|
69
|
+
- Rakefile
|
70
|
+
- VERSION
|
71
|
+
- VERSION_EXT
|
72
|
+
- jruby-hazelcast-client.gemspec
|
73
|
+
- lib/hazelcast/client.rb
|
74
|
+
- lib/hazelcast/client/lock.rb
|
75
|
+
- lib/hazelcast/client/map.rb
|
76
|
+
- lib/hazelcast/client/queue.rb
|
77
|
+
- lib/hazelcast/client/topic.rb
|
78
|
+
- lib/hazelcast/jars.rb
|
79
|
+
- lib/hazelcast/jars/hazelcast-3.7.2.jar
|
80
|
+
- lib/hazelcast/jars/hazelcast-all-3.7.2.jar
|
81
|
+
- lib/hazelcast/jars/hazelcast-client-3.7.2.jar
|
82
|
+
- lib/hazelcast/jars/version.rb
|
83
|
+
- test/Employee.class
|
84
|
+
- test/Employee.java
|
85
|
+
- test/helper.rb
|
86
|
+
- test/test_lock.rb
|
87
|
+
- test/test_map.rb
|
88
|
+
- test/test_queue.rb
|
89
|
+
- test/test_topic.rb
|
90
|
+
homepage: https://github.com/nav33n4u/jruby-hazelcast-client
|
91
|
+
licenses: []
|
92
|
+
metadata: {}
|
93
|
+
post_install_message:
|
94
|
+
rdoc_options: []
|
95
|
+
require_paths:
|
96
|
+
- lib
|
97
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '0'
|
107
|
+
requirements: []
|
108
|
+
rubyforge_project: jruby-hazelcast-client
|
109
|
+
rubygems_version: 2.4.8
|
110
|
+
signing_key:
|
111
|
+
specification_version: 4
|
112
|
+
summary: JRuby Hazelcast 3.7.2 client
|
113
|
+
test_files:
|
114
|
+
- test/Employee.class
|
115
|
+
- test/Employee.java
|
116
|
+
- test/helper.rb
|
117
|
+
- test/test_lock.rb
|
118
|
+
- test/test_map.rb
|
119
|
+
- test/test_queue.rb
|
120
|
+
- test/test_topic.rb
|