gemfire-jruby 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- 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
|