torquebox-cache 2.0.3-java → 2.1.0-java
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/lib/active_support/cache/torque_box_store.rb +5 -1
- data/lib/cache.rb +54 -138
- data/lib/cache_listener.rb +7 -1
- data/lib/gem_hook.rb +6 -3
- data/lib/polyglot-cache-1.7.1.jar +0 -0
- data/lib/polyglot-core-1.7.1.jar +0 -0
- data/lib/{dm-infinispan-adapter.rb → sequence.rb} +42 -2
- data/lib/torquebox-cache.jar +0 -0
- data/lib/torquebox-cache.rb +4 -2
- data/spec/cache_listener_spec.rb +4 -0
- data/spec/cache_spec.rb +35 -22
- data/spec/gem_hook_spec.rb +31 -0
- data/spec/spec_helper.rb +0 -7
- data/spec/torque_box_store_spec.rb +14 -24
- metadata +17 -40
- data/lib/datamapper/dm-infinispan-adapter.rb +0 -129
- data/lib/datamapper/model.rb +0 -187
- data/lib/datamapper/search.rb +0 -146
- data/spec/dm-infinispan-adapter_spec.rb +0 -375
@@ -84,6 +84,10 @@ module ActiveSupport
|
|
84
84
|
|
85
85
|
protected
|
86
86
|
|
87
|
+
def defaults
|
88
|
+
{:name=>'__torque_box_store__', :mode => :invalidation, :sync => false}
|
89
|
+
end
|
90
|
+
|
87
91
|
def encode value
|
88
92
|
Marshal.dump(value).to_java_bytes
|
89
93
|
end
|
@@ -116,7 +120,7 @@ module ActiveSupport
|
|
116
120
|
private
|
117
121
|
|
118
122
|
def cache
|
119
|
-
@cache ||= TorqueBox::Infinispan::Cache.new(options)
|
123
|
+
@cache ||= TorqueBox::Infinispan::Cache.new( defaults.merge(options) )
|
120
124
|
end
|
121
125
|
end
|
122
126
|
end
|
data/lib/cache.rb
CHANGED
@@ -18,6 +18,7 @@
|
|
18
18
|
require 'torquebox/kernel'
|
19
19
|
require 'torquebox/injectors'
|
20
20
|
require 'torquebox/transactions'
|
21
|
+
require 'sequence'
|
21
22
|
|
22
23
|
module TorqueBox
|
23
24
|
module Infinispan
|
@@ -31,7 +32,7 @@ module TorqueBox
|
|
31
32
|
end
|
32
33
|
|
33
34
|
def getTransactionManager
|
34
|
-
|
35
|
+
fetch('transaction-manager')
|
35
36
|
end
|
36
37
|
end
|
37
38
|
|
@@ -45,40 +46,6 @@ module TorqueBox
|
|
45
46
|
end
|
46
47
|
end
|
47
48
|
|
48
|
-
class Sequence
|
49
|
-
include java.io.Serializable
|
50
|
-
|
51
|
-
class Codec
|
52
|
-
def self.encode(sequence)
|
53
|
-
sequence.value.to_s
|
54
|
-
end
|
55
|
-
|
56
|
-
def self.decode(sequence_bytes)
|
57
|
-
sequence_bytes && Sequence.new( sequence_bytes.to_s.to_i )
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def initialize(amount = 1)
|
62
|
-
@data = amount
|
63
|
-
end
|
64
|
-
|
65
|
-
def value
|
66
|
-
@data ? @data.to_i : @data
|
67
|
-
end
|
68
|
-
|
69
|
-
def next(amount = 1)
|
70
|
-
Sequence.new( @data.to_i + amount )
|
71
|
-
end
|
72
|
-
|
73
|
-
def ==(other)
|
74
|
-
self.value == other.value
|
75
|
-
end
|
76
|
-
|
77
|
-
def to_s
|
78
|
-
"Sequence: #{self.value}"
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
49
|
class Cache
|
83
50
|
include TorqueBox::Injectors
|
84
51
|
|
@@ -87,8 +54,9 @@ module TorqueBox
|
|
87
54
|
java_import org.infinispan.config.Configuration::CacheMode
|
88
55
|
java_import org.infinispan.transaction::TransactionMode
|
89
56
|
java_import org.infinispan.transaction::LockingMode
|
57
|
+
java_import org.projectodd.polyglot.cache.as::CacheService
|
90
58
|
INFINISPAN_AVAILABLE = true
|
91
|
-
rescue NameError
|
59
|
+
rescue NameError => e
|
92
60
|
INFINISPAN_AVAILABLE = false
|
93
61
|
# Not running inside TorqueBox
|
94
62
|
end
|
@@ -106,21 +74,38 @@ module TorqueBox
|
|
106
74
|
options[:name] || TORQUEBOX_APP_NAME
|
107
75
|
end
|
108
76
|
|
109
|
-
def
|
110
|
-
|
77
|
+
def persisted?
|
78
|
+
!options[:persist].nil?
|
79
|
+
end
|
80
|
+
|
81
|
+
def replicated?
|
82
|
+
[:r, :repl, :replicated, :replication].include? options[:mode]
|
83
|
+
end
|
84
|
+
|
85
|
+
def distributed?
|
86
|
+
[:d, :dist, :distributed, :distribution].include? options[:mode]
|
87
|
+
end
|
88
|
+
|
89
|
+
def invalidated?
|
90
|
+
[:i, :inv, :invalidated, :invalidation].include? options[:mode]
|
91
|
+
end
|
92
|
+
|
93
|
+
def clustered?
|
94
|
+
INFINISPAN_AVAILABLE && service.clustered?
|
111
95
|
end
|
112
96
|
|
113
97
|
def clustering_mode
|
114
|
-
|
115
|
-
distributed = [:d, :dist, :distributed, :distribution].include? options[:mode]
|
98
|
+
return CacheMode::LOCAL unless clustered?
|
116
99
|
sync = options[:sync]
|
117
100
|
case
|
118
|
-
when replicated
|
101
|
+
when replicated?
|
119
102
|
sync ? CacheMode::REPL_SYNC : CacheMode::REPL_ASYNC
|
120
|
-
when distributed
|
103
|
+
when distributed?
|
121
104
|
sync ? CacheMode::DIST_SYNC : CacheMode::DIST_ASYNC
|
122
|
-
|
105
|
+
when invalidated?
|
123
106
|
sync ? CacheMode::INVALIDATION_SYNC : CacheMode::INVALIDATION_ASYNC
|
107
|
+
else
|
108
|
+
sync ? CacheMode::DIST_SYNC : CacheMode::DIST_ASYNC
|
124
109
|
end
|
125
110
|
end
|
126
111
|
|
@@ -220,7 +205,7 @@ module TorqueBox
|
|
220
205
|
def transaction(&block)
|
221
206
|
if !transactional?
|
222
207
|
yield self
|
223
|
-
elsif
|
208
|
+
elsif fetch('transaction-manager').nil?
|
224
209
|
tm = cache.getAdvancedCache.getTransactionManager
|
225
210
|
begin
|
226
211
|
tm.begin if tm
|
@@ -258,15 +243,6 @@ module TorqueBox
|
|
258
243
|
cache.stop
|
259
244
|
end
|
260
245
|
|
261
|
-
def self.shutdown
|
262
|
-
Cache.local_managers.each { |m| m.stop }
|
263
|
-
end
|
264
|
-
|
265
|
-
@@local_managers = []
|
266
|
-
def self.local_managers
|
267
|
-
@@local_managers
|
268
|
-
end
|
269
|
-
|
270
246
|
def self.log( message, status = 'INFO' )
|
271
247
|
$stdout.puts( "#{status}: #{message}" )
|
272
248
|
end
|
@@ -282,108 +258,62 @@ module TorqueBox
|
|
282
258
|
end
|
283
259
|
|
284
260
|
def cache
|
285
|
-
if INFINISPAN_AVAILABLE
|
286
|
-
@cache ||=
|
261
|
+
if INFINISPAN_AVAILABLE
|
262
|
+
@cache ||= manager.running?( name ) ? reconfigure : configure
|
287
263
|
else
|
288
264
|
@cache ||= nothing
|
289
265
|
end
|
290
266
|
end
|
291
267
|
|
268
|
+
def service
|
269
|
+
@service ||= TorqueBox::ServiceRegistry[CacheService::CACHE]
|
270
|
+
end
|
271
|
+
|
292
272
|
def manager
|
293
|
-
|
294
|
-
@manager ||= TorqueBox::ServiceRegistry[org.jboss.msc.service.ServiceName::JBOSS.append( "infinispan", "torquebox" )]
|
295
|
-
rescue Exception => e
|
296
|
-
log( "Caught exception while looking up Infinispan service.", 'ERROR' )
|
297
|
-
log( e.message, 'ERROR' )
|
298
|
-
end
|
299
|
-
@manager
|
273
|
+
@manager ||= service.cache_container
|
300
274
|
end
|
301
|
-
|
275
|
+
|
302
276
|
def reconfigure(mode=clustering_mode)
|
303
|
-
|
304
|
-
base_config =
|
277
|
+
existing_cache = manager.get_cache(name)
|
278
|
+
base_config = existing_cache.configuration
|
305
279
|
unless base_config.cache_mode == mode
|
306
280
|
log( "Reconfiguring Infinispan cache #{name} from #{base_config.cache_mode} to #{mode}" )
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
config.transaction.transactionMode( transaction_mode )
|
311
|
-
config.transaction.recovery.transactionManagerLookup( transaction_manager_lookup )
|
312
|
-
manager.define_configuration(name, config.build)
|
313
|
-
cache.start
|
281
|
+
existing_cache .stop
|
282
|
+
configure(mode)
|
283
|
+
existing_cache .start
|
314
284
|
end
|
315
|
-
return
|
285
|
+
return existing_cache
|
316
286
|
end
|
317
287
|
|
318
288
|
def configure(mode=clustering_mode)
|
319
289
|
log( "Configuring Infinispan cache #{name} as #{mode}" )
|
320
290
|
base_config = manager.default_configuration.clone
|
321
|
-
base_config.class_loader = java.lang::Thread.current_thread.context_class_loader
|
322
291
|
base_config.cache_mode = mode
|
323
|
-
|
324
292
|
config = base_config.fluent
|
325
293
|
config.transaction.transactionMode( transaction_mode )
|
326
|
-
config.transaction.recovery.transactionManagerLookup( transaction_manager_lookup )
|
327
|
-
manager.define_configuration(name, config.build )
|
328
|
-
manager.get_cache(name)
|
329
|
-
end
|
330
|
-
|
331
|
-
def transaction_manager_lookup
|
332
|
-
@tm ||= if inject('transaction-manager')
|
333
|
-
ContainerTransactionManagerLookup.new
|
334
|
-
else
|
335
|
-
org.infinispan.transaction.lookup.GenericTransactionManagerLookup.new
|
336
|
-
end
|
337
|
-
end
|
338
|
-
|
339
|
-
def clustered
|
340
|
-
(manager.running?(name) ? reconfigure : configure) if manager
|
341
|
-
rescue
|
342
|
-
log( "Clustered: Can't get clustered cache; falling back to local: #{$!}", 'ERROR' )
|
343
|
-
end
|
344
|
-
|
345
|
-
def local
|
346
|
-
log( "Configuring Infinispan local cache #{name}" )
|
347
|
-
bare_config = org.infinispan.config.Configuration.new
|
348
|
-
bare_config.class_loader = java.lang::Thread.current_thread.context_class_loader
|
349
|
-
|
350
|
-
config = bare_config.fluent
|
351
|
-
config.transaction.transactionMode( transaction_mode )
|
352
|
-
|
353
294
|
if transactional?
|
354
295
|
config.transaction.transactionManagerLookup( transaction_manager_lookup )
|
355
296
|
config.transaction.lockingMode( locking_mode )
|
356
297
|
end
|
357
|
-
|
358
|
-
if options[:persist]
|
359
|
-
log( "Configuring #{name} local cache for file-based persistence" )
|
298
|
+
if persisted?
|
360
299
|
store = org.infinispan.loaders.file.FileCacheStoreConfig.new
|
361
300
|
store.purge_on_startup( false )
|
362
301
|
store.location(options[:persist]) if File.exist?( options[:persist].to_s )
|
363
302
|
config.loaders.add_cache_loader( store )
|
364
303
|
end
|
304
|
+
manager.define_configuration(name, config.build )
|
305
|
+
manager.get_cache(name)
|
306
|
+
end
|
365
307
|
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
end
|
373
|
-
|
374
|
-
if ((local_manager = Cache.find_local_manager(name)) == nil)
|
375
|
-
log( "No local CacheManager exists for #{name}. Creating one." )
|
376
|
-
local_manager = org.infinispan.manager.DefaultCacheManager.new
|
377
|
-
local_manager.define_configuration( name, config.build )
|
378
|
-
Cache.local_managers << local_manager
|
379
|
-
end
|
380
|
-
|
381
|
-
local_manager.get_cache( self.name )
|
382
|
-
rescue Exception => e
|
383
|
-
log( "Unable to obtain local cache: #{$!}", 'ERROR' )
|
384
|
-
log( e.backtrace, 'ERROR' )
|
308
|
+
def transaction_manager_lookup
|
309
|
+
@tm ||= if fetch('transaction-manager')
|
310
|
+
ContainerTransactionManagerLookup.new
|
311
|
+
else
|
312
|
+
org.infinispan.transaction.lookup.GenericTransactionManagerLookup.new
|
313
|
+
end
|
385
314
|
end
|
386
315
|
|
316
|
+
|
387
317
|
def nothing
|
388
318
|
result = Object.new
|
389
319
|
def result.method_missing(*args); end
|
@@ -401,25 +331,11 @@ module TorqueBox
|
|
401
331
|
args << expires_in << SECONDS
|
402
332
|
args << expires << SECONDS
|
403
333
|
end
|
404
|
-
#$stderr.puts "cache=#{cache.inspect}"
|
405
|
-
#$stderr.puts "*args=#{args.inspect}"
|
406
334
|
cache.send( *args ) && true
|
407
335
|
end
|
408
336
|
|
409
|
-
# Finds the CacheManager for a given cache and returns it - or nil if not found
|
410
|
-
def self.find_local_manager( cache_name )
|
411
|
-
local_managers.each do |m|
|
412
|
-
if m.cache_exists( cache_name )
|
413
|
-
log( ":-:-:-: local_manager already exists for #{cache_name}" )
|
414
|
-
return m
|
415
|
-
end
|
416
|
-
end
|
417
|
-
return nil
|
418
|
-
end
|
419
|
-
|
420
337
|
end
|
421
338
|
|
422
|
-
at_exit { Cache.shutdown }
|
423
339
|
end
|
424
340
|
end
|
425
341
|
|
data/lib/cache_listener.rb
CHANGED
@@ -15,6 +15,8 @@
|
|
15
15
|
# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
16
16
|
# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
17
17
|
|
18
|
+
require 'jruby/core_ext'
|
19
|
+
|
18
20
|
module TorqueBox
|
19
21
|
module Infinispan
|
20
22
|
class CacheListener
|
@@ -28,7 +30,11 @@ module TorqueBox
|
|
28
30
|
end
|
29
31
|
end
|
30
32
|
|
31
|
-
|
33
|
+
if JRUBY_VERSION =~ /^1\.7/
|
34
|
+
add_class_annotations( { org.infinispan.notifications.Listener => { } } )
|
35
|
+
else
|
36
|
+
add_class_annotation( { org.infinispan.notifications.Listener => { } } )
|
37
|
+
end
|
32
38
|
add_method_signature( "event_fired", [java.lang.Void::TYPE, org.infinispan.notifications.cachelistener.event.Event] )
|
33
39
|
add_method_annotation( "event_fired",
|
34
40
|
{ org.infinispan.notifications.cachelistener.annotation.CacheEntryCreated => {},
|
data/lib/gem_hook.rb
CHANGED
@@ -16,7 +16,10 @@
|
|
16
16
|
# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
17
17
|
|
18
18
|
require 'cache'
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
begin
|
20
|
+
ActiveSupport
|
21
|
+
require 'active_support/cache/torque_box_store.rb'
|
22
|
+
rescue NameError
|
23
|
+
# ActiveSupport not used
|
24
|
+
end
|
22
25
|
|
Binary file
|
Binary file
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright
|
1
|
+
# Copyright 2012 Red Hat, Inc, and individual contributors.
|
2
2
|
#
|
3
3
|
# This is free software; you can redistribute it and/or modify it
|
4
4
|
# under the terms of the GNU Lesser General Public License as
|
@@ -15,4 +15,44 @@
|
|
15
15
|
# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
16
16
|
# 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
17
17
|
|
18
|
-
|
18
|
+
module TorqueBox
|
19
|
+
module Infinispan
|
20
|
+
|
21
|
+
class Sequence
|
22
|
+
include java.io.Serializable
|
23
|
+
|
24
|
+
class Codec
|
25
|
+
def self.encode(sequence)
|
26
|
+
sequence.value.to_s
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.decode(sequence_bytes)
|
30
|
+
sequence_bytes && Sequence.new( sequence_bytes.to_s.to_i )
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def initialize(amount = 1)
|
35
|
+
@data = amount
|
36
|
+
end
|
37
|
+
|
38
|
+
def value
|
39
|
+
@data ? @data.to_i : @data
|
40
|
+
end
|
41
|
+
|
42
|
+
def next(amount = 1)
|
43
|
+
Sequence.new( @data.to_i + amount )
|
44
|
+
end
|
45
|
+
|
46
|
+
def ==(other)
|
47
|
+
self.value == other.value
|
48
|
+
end
|
49
|
+
|
50
|
+
def to_s
|
51
|
+
"Sequence: #{self.value}"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
|
data/lib/torquebox-cache.jar
CHANGED
Binary file
|
data/lib/torquebox-cache.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
module TorqueboxCache
|
2
|
-
VERSION = '2.0
|
3
|
-
MAVEN_VERSION = '2.0
|
2
|
+
VERSION = '2.1.0'
|
3
|
+
MAVEN_VERSION = '2.1.0'
|
4
4
|
end
|
5
5
|
begin
|
6
6
|
require 'java'
|
7
7
|
require File.dirname(__FILE__) + '/torquebox-cache.jar'
|
8
|
+
require File.dirname(__FILE__) + '/polyglot-cache-1.7.1.jar'
|
9
|
+
require File.dirname(__FILE__) + '/polyglot-core-1.7.1.jar'
|
8
10
|
rescue LoadError
|
9
11
|
puts 'JAR-based gems require JRuby to load. Please visit www.jruby.org.'
|
10
12
|
raise
|
data/spec/cache_listener_spec.rb
CHANGED
@@ -19,6 +19,10 @@ require 'cache_listener'
|
|
19
19
|
|
20
20
|
describe TorqueBox::Infinispan::CacheListener do
|
21
21
|
before :each do
|
22
|
+
manager = org.infinispan.manager.DefaultCacheManager.new
|
23
|
+
service = org.projectodd.polyglot.cache.as.CacheService.new
|
24
|
+
service.stub!(:cache_container).and_return( manager )
|
25
|
+
TorqueBox::ServiceRegistry.stub!(:[]).with(org.projectodd.polyglot.cache.as.CacheService::CACHE).and_return( service )
|
22
26
|
@cache = TorqueBox::Infinispan::Cache.new( :name => 'foo-cache' )
|
23
27
|
end
|
24
28
|
|
data/spec/cache_spec.rb
CHANGED
@@ -18,6 +18,10 @@ require File.dirname(__FILE__) + '/spec_helper'
|
|
18
18
|
|
19
19
|
describe TorqueBox::Infinispan::Cache do
|
20
20
|
before :each do
|
21
|
+
manager = org.infinispan.manager.DefaultCacheManager.new
|
22
|
+
service = org.projectodd.polyglot.cache.as.CacheService.new
|
23
|
+
service.stub!(:cache_container).and_return( manager )
|
24
|
+
TorqueBox::ServiceRegistry.stub!(:[]).with(org.projectodd.polyglot.cache.as.CacheService::CACHE).and_return( service )
|
21
25
|
@cache = TorqueBox::Infinispan::Cache.new( :name => 'foo-cache' )
|
22
26
|
end
|
23
27
|
|
@@ -29,11 +33,6 @@ describe TorqueBox::Infinispan::Cache do
|
|
29
33
|
@cache.name.should == 'foo-cache'
|
30
34
|
end
|
31
35
|
|
32
|
-
it "should reuse existing cache managers for an extant local cache" do
|
33
|
-
TorqueBox::Infinispan::Cache.should_receive( :find_local_manager ).with( 'foo-cache' )
|
34
|
-
TorqueBox::Infinispan::Cache.new( :name => 'foo-cache' )
|
35
|
-
end
|
36
|
-
|
37
36
|
it "should respond to clustering_mode" do
|
38
37
|
@cache.should respond_to( :clustering_mode )
|
39
38
|
end
|
@@ -127,9 +126,7 @@ describe TorqueBox::Infinispan::Cache do
|
|
127
126
|
end
|
128
127
|
|
129
128
|
it "should increment a sequence" do
|
130
|
-
puts "AAAA"
|
131
129
|
@cache.increment("My Sequence Name", 1).should == 1
|
132
|
-
puts "BBBB"
|
133
130
|
@cache.increment("My Sequence Name", 1).should == 2
|
134
131
|
end
|
135
132
|
|
@@ -144,6 +141,37 @@ describe TorqueBox::Infinispan::Cache do
|
|
144
141
|
@cache.get('a false value').should be_false
|
145
142
|
end
|
146
143
|
|
144
|
+
it "should allow symbols as keys for basic put" do
|
145
|
+
@cache.put(:asymbol, "a value")
|
146
|
+
@cache.get(:asymbol).should == "a value"
|
147
|
+
end
|
148
|
+
|
149
|
+
it "should allow symbols as keys for put_if_absent" do
|
150
|
+
@cache.put_if_absent(:asymbol, "a value")
|
151
|
+
@cache.get(:asymbol).should == "a value"
|
152
|
+
end
|
153
|
+
|
154
|
+
it "should allow symbols as keys for increment" do
|
155
|
+
@cache.increment :countsymbol
|
156
|
+
@cache.get(:countsymbol).should == "1"
|
157
|
+
@cache.increment(:countsymbol).should == 2
|
158
|
+
end
|
159
|
+
|
160
|
+
it "should store and retrieve zero" do
|
161
|
+
@cache.put(:mynumber, 0)
|
162
|
+
@cache.get(:mynumber).should == 0
|
163
|
+
end
|
164
|
+
|
165
|
+
it "should store and retrieve integers" do
|
166
|
+
@cache.put(:mynumber, 30)
|
167
|
+
@cache.get(:mynumber).should == 30
|
168
|
+
end
|
169
|
+
|
170
|
+
it "should store and retrieve floats" do
|
171
|
+
@cache.put(:mynumber, 1.0)
|
172
|
+
@cache.get(:mynumber).should == 1.0
|
173
|
+
end
|
174
|
+
|
147
175
|
it "should expire entries based on provided expiry durations" do
|
148
176
|
cache = TorqueBox::Infinispan::Cache.new( :name => 'expiring-cache' )
|
149
177
|
cache.put("foo", "bar", 0.1)
|
@@ -323,21 +351,6 @@ describe TorqueBox::Infinispan::Cache do
|
|
323
351
|
end
|
324
352
|
end
|
325
353
|
|
326
|
-
describe "with search" do
|
327
|
-
before :each do
|
328
|
-
@cache = TorqueBox::Infinispan::Cache.new( :name => 'foo-cache' )
|
329
|
-
end
|
330
|
-
|
331
|
-
it "should ask the cache for the search managager" do
|
332
|
-
@cache.should_receive :search_manager
|
333
|
-
Infinispan::Search.new(@cache, lambda{|v|v})
|
334
|
-
end
|
335
|
-
|
336
|
-
after :each do
|
337
|
-
@cache.clear
|
338
|
-
end
|
339
|
-
end
|
340
|
-
|
341
354
|
end
|
342
355
|
|
343
356
|
class Snuffleuffagus
|