gemfire-jruby 0.0.7 → 0.0.8
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.
- data/README +1 -0
- data/VERSION +1 -1
- data/gemfire-jruby.gemspec +4 -2
- data/lib/examples.rb +100 -0
- data/lib/gemfire-jruby.rb +135 -11
- data/server.rb +11 -0
- metadata +4 -2
data/README
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.8
|
data/gemfire-jruby.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{gemfire-jruby}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.8"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Alan McKean"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-02-05}
|
13
13
|
s.description = %q{"Uses Memcached API"}
|
14
14
|
s.email = %q{alan.mckean@gemstone.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -49,7 +49,9 @@ Gem::Specification.new do |s|
|
|
49
49
|
"doc/index.html",
|
50
50
|
"doc/rdoc-style.css",
|
51
51
|
"gemfire-jruby.gemspec",
|
52
|
+
"lib/examples.rb",
|
52
53
|
"lib/gemfire-jruby.rb",
|
54
|
+
"server.rb",
|
53
55
|
"test/helper.rb",
|
54
56
|
"test/test_gemfire-jruby.rb"
|
55
57
|
]
|
data/lib/examples.rb
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
# run this in jirb
|
2
|
+
require 'rubygems'
|
3
|
+
require 'gemfire-jruby'
|
4
|
+
|
5
|
+
## create the server
|
6
|
+
server = GemFireServer.new('localhost:10355')
|
7
|
+
# copy and paste the ExampleCacheListener class (below) into the server shell
|
8
|
+
server.addListener(ExampleCacheListener.new)
|
9
|
+
|
10
|
+
# Now, in another jirb shell
|
11
|
+
require 'rubygems'
|
12
|
+
require 'gemfire-jruby'
|
13
|
+
|
14
|
+
## create the client
|
15
|
+
client = GemFireClient.new('localhost:10355')
|
16
|
+
# copy and paste the ExampleCacheListener class (below) into the server shell
|
17
|
+
client.addListener(ExampleCacheListener.new)
|
18
|
+
|
19
|
+
# Put some data into the client shell ... the listeners should fire in both shells
|
20
|
+
(1..12).each do |key| client.write(key, Date.new(key,key,key)) end
|
21
|
+
|
22
|
+
# Explore the client api in the client shell
|
23
|
+
client.read(1)
|
24
|
+
client.keys
|
25
|
+
client.exist?(1)
|
26
|
+
|
27
|
+
# Try the server api in the server shell
|
28
|
+
server.read(1)
|
29
|
+
server.keys
|
30
|
+
server.exist?(1)
|
31
|
+
|
32
|
+
# Back in the client shell
|
33
|
+
client.delete(1)
|
34
|
+
client.exist?(1)
|
35
|
+
|
36
|
+
# Check in the server shell
|
37
|
+
server.exist?(1)
|
38
|
+
|
39
|
+
class ExampleCacheListener
|
40
|
+
def afterCreate(entryEvent)
|
41
|
+
puts YAML::load(entryEvent.getKey).to_s + ' was created with ' + YAML::load(entryEvent.getNewValue).to_s
|
42
|
+
end
|
43
|
+
def afterUpdate(entryEvent)
|
44
|
+
puts YAML::load(entryEvent.getKey).to_s + ' was updated to ' + YAML::load(entryEvent.getNewValue).to_s
|
45
|
+
end
|
46
|
+
def afterDestroy(entryEvent)
|
47
|
+
puts YAML::load(entryEvent.getKey).to_s + 'was destroyed'
|
48
|
+
end
|
49
|
+
def afterInvalidate(entryEvent)
|
50
|
+
end
|
51
|
+
def afterRegionCreate(regionEvent)
|
52
|
+
puts 'Region ' + regionEvent.getRegion.getName + 'was created'
|
53
|
+
end
|
54
|
+
def afterRegionDestroy(regionEvent)
|
55
|
+
puts 'Region ' + regionEvent.getRegion.getName + 'was destroyed'
|
56
|
+
end
|
57
|
+
def afterRegionClear(regionEvent)
|
58
|
+
puts 'Region ' + regionEvent.getRegion.getName + 'was cleared'
|
59
|
+
end
|
60
|
+
def afterRegionInvalidate(regionEvent)
|
61
|
+
end
|
62
|
+
def afterRegionLive(regionEvent)
|
63
|
+
end
|
64
|
+
def close
|
65
|
+
puts 'CacheListener is closing'
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
class ExampleCacheWriter
|
70
|
+
def beforeCreate(entryEvent)
|
71
|
+
puts YAML::load(entryEvent.getKey).to_s + ' is about to be created with ' + YAML::load(entryEvent.getNewValue).to_s
|
72
|
+
end
|
73
|
+
def beforeUpdate(entryEvent)
|
74
|
+
puts YAML::load(entryEvent.getKey).to_s + ' is about to be updated to ' + YAML::load(entryEvent.getNewValue).to_s
|
75
|
+
end
|
76
|
+
def beforeDestroy(entryEvent)
|
77
|
+
puts YAML::load(entryEvent.getKey).to_s + ' is about to be destroyed'
|
78
|
+
end
|
79
|
+
def beforeRegionDestroy(regionEvent)
|
80
|
+
puts 'Region ' + regionEvent.getRegion.getName + ' is about to be destroyed'
|
81
|
+
end
|
82
|
+
def beforeRegionClear(regionEvent)
|
83
|
+
puts 'Region ' + regionEvent.getRegion.getName + ' is about to be cleared'
|
84
|
+
end
|
85
|
+
def close
|
86
|
+
puts 'CacheWriter is closing'
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
class ExampleCacheLoader
|
91
|
+
def load(helper)
|
92
|
+
puts 'Loading ' + YAML::load(helper.getKey).to_s
|
93
|
+
'V' + YAML::load(helper.getKey).to_s
|
94
|
+
end
|
95
|
+
def close
|
96
|
+
puts 'CacheLoader is closing'
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
|
data/lib/gemfire-jruby.rb
CHANGED
@@ -56,26 +56,52 @@ module ActiveSupport
|
|
56
56
|
logger.error("GemfireCache Creation Error (#{e}): #{e.message}")
|
57
57
|
end
|
58
58
|
|
59
|
+
# GemFire api
|
60
|
+
def create(key, value)
|
61
|
+
@region.create(key.to_yaml, value.to_yaml)
|
62
|
+
rescue CacheException => e
|
63
|
+
logger.error("GemfireCache Error (#{e}): #{e.message}")
|
64
|
+
end
|
65
|
+
|
66
|
+
def put(key, value)
|
67
|
+
@region.put(key.to_yaml, value.to_yaml)
|
68
|
+
rescue CacheException => e
|
69
|
+
logger.error("GemfireCache Error (#{e}): #{e.message}")
|
70
|
+
end
|
71
|
+
|
72
|
+
def invalidate(key)
|
73
|
+
@region.invalidate(key.to_yaml)
|
74
|
+
rescue CacheException => e
|
75
|
+
logger.error("GemfireCache Error (#{e}): #{e.message}")
|
76
|
+
end
|
77
|
+
|
78
|
+
# Destroy the entry stored in the GemFire cache at _key_. _key_ can be any JRuby object. Returns the value that was deleted.
|
79
|
+
def destroy(key)
|
80
|
+
@region.destroy(key.to_yaml)
|
81
|
+
rescue CacheException => e
|
82
|
+
logger.error("GemfireCache Error (#{e}): #{e.message}")
|
83
|
+
end
|
84
|
+
|
59
85
|
# Read a value from the GemFire cache. _key_ can be any JRuby object. Returns the value stored at _key_.
|
60
86
|
def read(key)
|
61
87
|
super
|
62
|
-
|
88
|
+
YAML::load(@region.get(key.to_yaml))
|
63
89
|
rescue CacheException => e
|
64
90
|
logger.error("GemfireCache Error (#{e}): #{e.message}")
|
65
91
|
end
|
66
92
|
|
67
|
-
#
|
93
|
+
# Alias for put(key, value) ... for compatibility with memcached
|
68
94
|
def write(key, value)
|
69
95
|
super
|
70
|
-
@region.put(
|
96
|
+
@region.put(key.to_yaml, value.to_yaml)
|
71
97
|
rescue CacheException => e
|
72
98
|
logger.error("GemfireCache Error (#{e}): #{e.message}")
|
73
99
|
end
|
74
100
|
|
75
|
-
#
|
101
|
+
# Alias for destroy(key) ... for compatibility with memcached
|
76
102
|
def delete(key)
|
77
103
|
super
|
78
|
-
@region.destroy(
|
104
|
+
@region.destroy(key.to_yaml)
|
79
105
|
rescue CacheException => e
|
80
106
|
logger.error("GemfireCache Error (#{e}): #{e.message}")
|
81
107
|
end
|
@@ -84,21 +110,21 @@ module ActiveSupport
|
|
84
110
|
def keys(onServer=true)
|
85
111
|
keySet = nil
|
86
112
|
result = []
|
87
|
-
if (onServer && @role == 'client') then
|
113
|
+
if (onServer && (@role == 'client')) then
|
88
114
|
keySet = @region.keySetOnServer
|
89
115
|
else
|
90
|
-
keySet = @region.
|
116
|
+
keySet = @region.keySet
|
91
117
|
end
|
92
|
-
keySet.each do |k| result <<
|
118
|
+
keySet.each do |k| result << YAML::load(k) end
|
93
119
|
result
|
94
120
|
end
|
95
121
|
|
96
122
|
# Check if there is an entry accessible by _key_ in the GemFire cache. Returns a boolean.
|
97
123
|
def exist?(key)
|
98
124
|
if @region.getAttributes.getPoolName then
|
99
|
-
@region.
|
125
|
+
@region.containsKeyOnServer(key.to_yaml)
|
100
126
|
else
|
101
|
-
@region.
|
127
|
+
@region.containsKey(key.to_yaml)
|
102
128
|
end
|
103
129
|
end
|
104
130
|
|
@@ -108,6 +134,29 @@ module ActiveSupport
|
|
108
134
|
rescue CacheException => e
|
109
135
|
logger.error("GemfireCache Error (#{e}): #{e.message}")
|
110
136
|
end
|
137
|
+
|
138
|
+
# Add a CacheListener to the cache region
|
139
|
+
def addListener(cacheListener)
|
140
|
+
@region.getAttributesMutator.addCacheListener(cacheListener)
|
141
|
+
end
|
142
|
+
|
143
|
+
# Install a CacheWriter into the client's cache region
|
144
|
+
def setWriter(cacheWriter)
|
145
|
+
if @role == 'server' then
|
146
|
+
@region.getAttributesMutator.setCacheWriter(cacheWriter)
|
147
|
+
else
|
148
|
+
raise 'Only servers can have CacheWriters'
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
# Install a CacheLoader into the cache region
|
153
|
+
def setLoader(cacheLoader)
|
154
|
+
if @role == 'server' then
|
155
|
+
@region.getAttributesMutator.setCacheLoader(cacheLoader)
|
156
|
+
else
|
157
|
+
raise 'Only servers can have CacheLoaders'
|
158
|
+
end
|
159
|
+
end
|
111
160
|
|
112
161
|
# Not implemented by GemFire. Raises an exception when called.
|
113
162
|
def increment(key)
|
@@ -146,7 +195,8 @@ module ActiveSupport
|
|
146
195
|
properties = Properties.new
|
147
196
|
properties.setProperty('mcast-port', '0')
|
148
197
|
options.each do |key, value|
|
149
|
-
|
198
|
+
puts key
|
199
|
+
properties.setProperty(key, value) unless ((key == 'cacheserver-port') || (key == 'region-name') || (key == 'caching-enabled') || (key == 'locators' && role == 'client'))
|
150
200
|
end
|
151
201
|
properties
|
152
202
|
end
|
@@ -214,3 +264,77 @@ module ActiveSupport
|
|
214
264
|
end
|
215
265
|
end
|
216
266
|
end
|
267
|
+
|
268
|
+
class GemFireCacher
|
269
|
+
def initialize(locator, regionName="data", cachingOn=false)
|
270
|
+
raise "GemFireCacher is an abstract class. Instantiate either a GemFireClient or a GemFireServer"
|
271
|
+
end
|
272
|
+
|
273
|
+
# GemFire api
|
274
|
+
def create(key, value)
|
275
|
+
@gemfire.create(key, value)
|
276
|
+
end
|
277
|
+
def put(key, value)
|
278
|
+
@gemfire.put(key, value)
|
279
|
+
end
|
280
|
+
def invalidate(key)
|
281
|
+
@gemfire.invalidate(key)
|
282
|
+
end
|
283
|
+
def destroy(key)
|
284
|
+
@gemfire.destroy(key)
|
285
|
+
end
|
286
|
+
|
287
|
+
# Both servers and clients can have CacheListeners
|
288
|
+
def addListener(cacheListener)
|
289
|
+
@gemfire.addListener(cacheListener)
|
290
|
+
end
|
291
|
+
|
292
|
+
# Memcached api
|
293
|
+
def read(key)
|
294
|
+
@gemfire.read(key)
|
295
|
+
end
|
296
|
+
def write(key, value)
|
297
|
+
@gemfire.write(key, value)
|
298
|
+
end
|
299
|
+
def delete(key)
|
300
|
+
@gemfire.delete(key)
|
301
|
+
end
|
302
|
+
def exist?(key)
|
303
|
+
@gemfire.exist?(key)
|
304
|
+
end
|
305
|
+
def keys(onServer=true)
|
306
|
+
@gemfire.keys(onServer)
|
307
|
+
end
|
308
|
+
def clear
|
309
|
+
@gemfire.clear
|
310
|
+
end
|
311
|
+
def increment(key)
|
312
|
+
@gemfire.increment(key)
|
313
|
+
end
|
314
|
+
def decrement(key)
|
315
|
+
@gemfire.decrement(key)
|
316
|
+
end
|
317
|
+
def delete_matched(matcher)
|
318
|
+
@gemfire.delete_matched(matcher)
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
class GemFireServer < GemFireCacher
|
323
|
+
def initialize(locator, regionName="data", cacheServerPort=40404)
|
324
|
+
@gemfire = ActiveSupport::Cache::GemFire.getInstance('server', {'locators'=>locator, 'region-name'=>regionName, 'cacheserver-port'=>cacheServerPort})
|
325
|
+
end
|
326
|
+
# Only servers can have CacheLoaders and CacheWriters
|
327
|
+
def setWriter(cacheWriter)
|
328
|
+
@gemfire.setWriter(cacheWriter)
|
329
|
+
end
|
330
|
+
def setLoader(cacheLoader)
|
331
|
+
@gemfire.setLoader(cacheLoader)
|
332
|
+
end
|
333
|
+
end
|
334
|
+
|
335
|
+
class GemFireClient < GemFireCacher
|
336
|
+
def initialize(locator, regionName="data", cachingOn=false)
|
337
|
+
@gemfire = ActiveSupport::Cache::GemFire.getInstance('client', {'locators'=>locator, 'region-name'=>regionName, 'caching-enabled'=>cachingOn.to_s})
|
338
|
+
end
|
339
|
+
end
|
340
|
+
|
data/server.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'lib/gemfire-jruby'
|
3
|
+
require 'lib/example_cache_listener'
|
4
|
+
require 'date'
|
5
|
+
|
6
|
+
server = GemFireServer.new('localhost:10355')
|
7
|
+
server.addListener(ExampleCacheListener.new)
|
8
|
+
server.write(100, {'hello' => 'world', 'goodbye' => 'life'})
|
9
|
+
|
10
|
+
#client = GemFireClient.new('localhost:10355')
|
11
|
+
#client.addListener(MyListener.new)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gemfire-jruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alan McKean
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-02-05 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -64,7 +64,9 @@ files:
|
|
64
64
|
- doc/index.html
|
65
65
|
- doc/rdoc-style.css
|
66
66
|
- gemfire-jruby.gemspec
|
67
|
+
- lib/examples.rb
|
67
68
|
- lib/gemfire-jruby.rb
|
69
|
+
- server.rb
|
68
70
|
- test/helper.rb
|
69
71
|
- test/test_gemfire-jruby.rb
|
70
72
|
has_rdoc: true
|