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 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
@@ -0,0 +1,11 @@
1
+ source 'http://rubygems.org'
2
+
3
+ group :development do
4
+ gem 'bundler'
5
+ gem 'jeweler'
6
+ gem 'colorize'
7
+ end
8
+
9
+ group :test do
10
+ gem 'colorize'
11
+ end
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
@@ -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
Binary file
@@ -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
@@ -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
@@ -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