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 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