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 CHANGED
@@ -27,3 +27,4 @@ require 'rubygems'
27
27
  require 'lib/gemfire-jruby'
28
28
  client = ActiveSupport::Cache::GemFire.getInstance('client', {'locators'=>'localhost:10355', 'region-name'=>'data'})
29
29
 
30
+
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.7
1
+ 0.0.8
@@ -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.7"
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-01-29}
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
- Marshal.load(@region.get(Marshal.dump(key)))
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
- # Write a value to the GemFire cache. _key_ is used to read the value from the cache and can be any JRuby object. Returns the value that was stored at _key_.
93
+ # Alias for put(key, value) ... for compatibility with memcached
68
94
  def write(key, value)
69
95
  super
70
- @region.put(Marshal.dump(key), Marshal.dump(value))
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
- # Delete the entry stored in the GemFire cache at _key_. _key_ can be any JRuby object. Returns the value that was deleted.
101
+ # Alias for destroy(key) ... for compatibility with memcached
76
102
  def delete(key)
77
103
  super
78
- @region.destroy(Marshal.dump(key))
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.keys
116
+ keySet = @region.keySet
91
117
  end
92
- keySet.each do |k| result << Marshal.load(k) end
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.containsKey(Marshal.dump(key))
125
+ @region.containsKeyOnServer(key.to_yaml)
100
126
  else
101
- @region.containsKeyOnServer(Marshal.dump(key))
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
- properties.setProperty(key, value) unless ((key == 'cacheserver-port') || (key == 'region-name') || (key == 'locators' && role == 'client'))
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.7
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-01-29 00:00:00 -08:00
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