jruby-ehcache-rails2 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. data/.gitignore +2 -0
  2. data/Gemfile +4 -0
  3. data/Gemfile.lock +15 -0
  4. data/History.txt +15 -0
  5. data/License.txt +23 -0
  6. data/Manifest.txt +37 -0
  7. data/PostInstall.txt +2 -0
  8. data/README.txt +9 -0
  9. data/Rakefile +13 -0
  10. data/VERSION +1 -0
  11. data/config/ehcache.yml +22 -0
  12. data/config/ehcache_manual_rmi.yml +27 -0
  13. data/examples/ehcache.xml +44 -0
  14. data/examples/jruby-ehcache.rb +13 -0
  15. data/ext/ehcache-2.4.6/ehcache-core-2.4.6.jar +0 -0
  16. data/ext/ehcache-2.4.6/ehcache-terracotta-2.4.6.jar +0 -0
  17. data/ext/ehcache-2.4.6/slf4j-api-1.6.1.jar +0 -0
  18. data/ext/ehcache-2.4.6/slf4j-jdk14-1.6.1.jar +0 -0
  19. data/ext/ehcache-2.4.6/terracotta-toolkit-1.3-runtime-3.3.0.jar +0 -0
  20. data/ext/marshaled-ruby-object.jar +0 -0
  21. data/jruby-ehcache-rails2.gemspec +27 -0
  22. data/jruby-ehcache-rails3.gemspec +27 -0
  23. data/jruby-ehcache.gemspec +23 -0
  24. data/lib/ehcache.rb +22 -0
  25. data/lib/ehcache/active_support_store.rb +12 -1
  26. data/lib/ehcache/cache.rb +74 -0
  27. data/lib/ehcache/cache_manager.rb +69 -0
  28. data/lib/ehcache/config.rb +51 -0
  29. data/lib/ehcache/element.rb +36 -0
  30. data/lib/ehcache/java.rb +57 -0
  31. data/lib/ehcache/version.rb +3 -0
  32. data/lib/ehcache/yaml_config.rb +251 -0
  33. data/script/console +10 -0
  34. data/script/destroy +14 -0
  35. data/script/generate +14 -0
  36. data/script/txt2html +82 -0
  37. data/spec/cache_manager_spec.rb +81 -0
  38. data/spec/cache_spec.rb +86 -0
  39. data/spec/spec.opts +2 -0
  40. data/spec/spec_helper.rb +12 -0
  41. data/src/net/sf/ehcache/MarshaledRubyObject.java +15 -0
  42. data/tasks/deployment.rake +34 -0
  43. data/tasks/environment.rake +7 -0
  44. data/tasks/website.rake +17 -0
  45. data/test/ehcache.xml +44 -0
  46. data/test/ehcache.yml +67 -0
  47. data/test/test_cache.rb +36 -0
  48. data/test/test_cache_manager.rb +27 -0
  49. data/test/test_configuration.rb +29 -0
  50. data/test/test_ehcache.rb +22 -0
  51. data/test/test_element.rb +37 -0
  52. data/test/test_helper.rb +22 -0
  53. data/test/test_yaml_config.rb +159 -0
  54. data/website/index.html +141 -0
  55. data/website/javascripts/rounded_corners_lite.inc.js +285 -0
  56. data/website/stylesheets/screen.css +138 -0
  57. data/website/template.html.erb +48 -0
  58. metadata +76 -97
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ *.DS_Store
2
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Gemfile for the ehcache gem
4
+ gemspec :name => "jruby-ehcache"
data/Gemfile.lock ADDED
@@ -0,0 +1,15 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ jruby-ehcache (1.3.0)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+
10
+ PLATFORMS
11
+ java
12
+ ruby
13
+
14
+ DEPENDENCIES
15
+ jruby-ehcache!
data/History.txt ADDED
@@ -0,0 +1,15 @@
1
+ == 0.0.3 2008-08-20
2
+ * 1 bug fix
3
+ * removed un-needed marshalling
4
+ * 1 major enhancement
5
+ * added support for configurable bootstrap cache loader and event listener
6
+
7
+ == 0.0.2 2008-06-08
8
+
9
+ * 1 bug fix
10
+ * add mutex, and marshalling for serialization to cache
11
+
12
+ == 0.0.1 2008-06-05
13
+
14
+ * 1 major enhancement:
15
+ * Initial release
data/License.txt ADDED
@@ -0,0 +1,23 @@
1
+ Copyright (c) 2008 - 2010 Dylan Stamat <dstamat@elctech.com> and
2
+ Jason Voegele <jason@jvoegele.com>
3
+
4
+ Permission is hereby granted, free of charge, to any person
5
+ obtaining a copy of this software and associated documentation
6
+ files (the "Software"), to deal in the Software without
7
+ restriction, including without limitation the rights to use,
8
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the
10
+ Software is furnished to do so, subject to the following
11
+ conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
18
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23
+ OTHER DEALINGS IN THE SOFTWARE.
data/Manifest.txt ADDED
@@ -0,0 +1,37 @@
1
+ History.txt
2
+ License.txt
3
+ Manifest.txt
4
+ PostInstall.txt
5
+ README.txt
6
+ Rakefile
7
+ bin/ehcache
8
+ config/ehcache.yml
9
+ config/hoe.rb
10
+ config/requirements.rb
11
+ ext/ehcache-1.4.1/ehcache-1.4.1-remote-debugger.jar
12
+ ext/ehcache-1.4.1/ehcache-1.4.1.jar
13
+ ext/ehcache-1.4.1/lib/backport-util-concurrent-3.0.jar
14
+ ext/ehcache-1.4.1/lib/commons-logging-1.0.4.jar
15
+ ext/ehcache-1.4.1/lib/jsr107cache-1.0.jar
16
+ ext/rails/ehcache_store.rb
17
+ lib/ehcache.rb
18
+ lib/ehcache/cache.rb
19
+ lib/ehcache/cache_manager.rb
20
+ lib/ehcache/config.rb
21
+ lib/ehcache/element.rb
22
+ lib/ehcache/extensions.rb
23
+ lib/ehcache/java.rb
24
+ lib/ehcache/status.rb
25
+ lib/ehcache/version.rb
26
+ script/console
27
+ script/destroy
28
+ script/generate
29
+ script/txt2html
30
+ setup.rb
31
+ spec/spec_helper.rb
32
+ tasks/deployment.rake
33
+ tasks/environment.rake
34
+ tasks/website.rake
35
+ test/test_ehcache.rb
36
+ test/test_ehcachejr.rb
37
+ test/test_helper.rb
data/PostInstall.txt ADDED
@@ -0,0 +1,2 @@
1
+ For more information on this gem, and Ehcache proper, see:
2
+ http://github.com/dylanz/ehcache/tree/master/README.txt
data/README.txt CHANGED
@@ -51,6 +51,15 @@ OR
51
51
  $ jruby -S gem install jruby-ehcache-rails3
52
52
 
53
53
 
54
+ == GEMFILE:
55
+
56
+ Add the gem as you normally would in your Gemfile, making sure to require
57
+ 'ehcache' explicitly. Here is an example of adding the rails3 gem to a Gemfile.
58
+
59
+ gem 'jruby-ehcache-rails3', :require => 'ehcache'
60
+
61
+
62
+
54
63
  == REQUIREMENTS:
55
64
 
56
65
  Tested with JRuby 1.5.3.
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ require "bundler/gem_helper"
2
+ Bundler::GemHelper.install_tasks :name => "jruby-ehcache"
3
+
4
+ task :default => [ :test ]
5
+
6
+ require 'rdoc/task'
7
+ require 'rake/testtask'
8
+ desc "Executes the test suite"
9
+ Rake::TestTask.new do |t|
10
+ t.name = :test
11
+ t.libs << 'lib' << 'ext' << 'test'
12
+ t.pattern = "test/test_*.rb"
13
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.3.0
@@ -0,0 +1,22 @@
1
+ disk_store:
2
+ path: java.io.tmpdir
3
+
4
+ peer_providers:
5
+ - class: net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory
6
+ properties: peerDiscovery=automatic,multicastGroupAddress=230.0.0.1,multicastGroupPort=4446,timeToLive=1
7
+ property_separator: "\,"
8
+
9
+ peer_listeners:
10
+ - class: net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory
11
+
12
+ default_cache:
13
+ name: cache
14
+ max_elements_in_memory: 10000
15
+ time_to_live_seconds: 0
16
+ time_to_idle_seconds: 0
17
+ overflow_to_disk: true
18
+ eternal: false
19
+ disk_spool_buffer_size_mb: 30
20
+ disk_persistent: false
21
+ disk_expiry_thread_interval_seconds: 120
22
+ memory_store_eviction_policy: LRU
@@ -0,0 +1,27 @@
1
+ disk_store:
2
+ path: java.io.tmpdir
3
+
4
+ peer_providers:
5
+ - class: net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory
6
+ properties: peerDiscovery=manual,rmiUrls=//that_hostname:40001/cache
7
+ property_separator: "\,"
8
+
9
+ peer_listeners:
10
+ - class: net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory
11
+ properties: hostName=this_hostname,port=40000
12
+
13
+ default_cache:
14
+ name: cache
15
+ max_elements_in_memory: 10000
16
+ time_to_live_seconds: 0
17
+ time_to_idle_seconds: 0
18
+ overflow_to_disk: true
19
+ eternal: false
20
+ disk_spool_buffer_size_mb: 30
21
+ disk_persistent: false
22
+ disk_expiry_thread_interval_seconds: 120
23
+ memory_store_eviction_policy: LRU
24
+ event_listener: { class: net.sf.ehcache.distribution.RMICacheReplicatorFactory }
25
+ bootstrap_loader: { class: net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory,
26
+ properties: 'bootstrapAsynchronously=true,maximumChunkSizeBytes=5000000',
27
+ property_separator: "\," }
@@ -0,0 +1,44 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+
3
+ <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+ xsi:noNamespaceSchemaLocation="../../main/config/ehcache.xsd">
5
+
6
+ <!-- Disable for test ehcache.xml. Should go to the same place. -->
7
+ <diskStore path="java.io.tmpdir"/>
8
+
9
+ <cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
10
+ properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1, multicastGroupPort=4446, timeToLive=0"/>
11
+
12
+
13
+ <cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
14
+ properties="hostName=, port=, socketTimeoutMillis="/>
15
+
16
+
17
+ <defaultCache
18
+ name="default"
19
+ maxElementsInMemory="10"
20
+ eternal="false"
21
+ timeToIdleSeconds="5"
22
+ timeToLiveSeconds="10"
23
+ overflowToDisk="true"
24
+ />
25
+
26
+
27
+ <!-- Sample cache named sampleCache1 -->
28
+ <cache name="sampleCache1"
29
+ maxElementsInMemory="10000"
30
+ maxElementsOnDisk="1000"
31
+ eternal="false"
32
+ timeToIdleSeconds="360"
33
+ timeToLiveSeconds="1000"
34
+ overflowToDisk="true">
35
+ </cache>
36
+
37
+ <!-- Sample cache named sampleCache2. Is eternal. Is diskPersistent but does not overflow to disk -->
38
+ <cache name="sampleCache2"
39
+ maxElementsInMemory="1000"
40
+ eternal="true"
41
+ overflowToDisk="false"
42
+ diskPersistent="true"
43
+ />
44
+ </ehcache>
@@ -0,0 +1,13 @@
1
+ require 'ehcache'
2
+
3
+ manager = Ehcache::CacheManager.new
4
+ cache = manager.cache
5
+
6
+ cache.put("answer", "42", {:ttl => 120})
7
+ answer = cache.get("answer")
8
+ puts "Answer: #{answer}"
9
+
10
+ question = cache.get("question") || 'unknown'
11
+ puts "Question: #{question}"
12
+
13
+ manager.shutdown
Binary file
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "ehcache/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = %q{jruby-ehcache-rails2}
7
+ s.version = Ehcache::VERSION
8
+ s.authors = [%q{Dylan Stamat}, %q{Jason Voegele}]
9
+ s.date = %q{2012-03-14}
10
+ s.description = %q{The Ehcache cache store provider for Rails 2}
11
+ s.email = [%q{dstamat@elctech.com}, %q{jvoegele@terracotta.org}]
12
+ s.extra_rdoc_files = [ "README.txt" ]
13
+ s.homepage = %q{http://ehcache.rubyforge.org}
14
+ s.rubyforge_project = %q{ehcache}
15
+ s.rubygems_version = %q{1.8.9}
16
+ s.summary = %q{Rails 2 cache store provider using Ehcache}
17
+
18
+ s.files = `git ls-files`.split("\n").concat(
19
+ ["lib/active_support/ehcache_store.rb",
20
+ "lib/ehcache/active_support_store.rb"])
21
+
22
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
23
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
24
+ s.require_paths = ["lib"]
25
+
26
+ s.add_runtime_dependency "jruby-ehcache"
27
+ end
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "ehcache/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = %q{jruby-ehcache-rails3}
7
+ s.version = Ehcache::VERSION
8
+ s.authors = [%q{Dylan Stamat}, %q{Jason Voegele}]
9
+ s.date = %q{2012-03-14}
10
+ s.description = %q{The Ehcache cache store provider for Rails 3}
11
+ s.email = [%q{dstamat@elctech.com}, %q{jvoegele@terracotta.org}]
12
+ s.extra_rdoc_files = [ "README.txt" ]
13
+ s.homepage = %q{http://ehcache.rubyforge.org}
14
+ s.rubyforge_project = %q{ehcache}
15
+ s.rubygems_version = %q{1.8.9}
16
+ s.summary = %q{Rails 3 cache store provider using Ehcache}
17
+
18
+ s.files = `git ls-files`.split("\n").concat(
19
+ ["lib/active_support/cache/ehcache_store.rb",
20
+ "lib/ehcache/active_support_store.rb"])
21
+
22
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
23
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
24
+ s.require_paths = ["lib"]
25
+
26
+ s.add_runtime_dependency "jruby-ehcache"
27
+ end
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "ehcache/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = %q{jruby-ehcache}
7
+ s.version = Ehcache::VERSION
8
+ s.authors = [%q{Dylan Stamat}, %q{Jason Voegele}]
9
+ s.date = %q{2012-03-14}
10
+ s.description = %q{JRuby interface to the popular Java caching library Ehcache}
11
+ s.email = [%q{dstamat@elctech.com}, %q{jvoegele@terracotta.org}]
12
+ s.extra_rdoc_files = [ "README.txt" ]
13
+ s.homepage = %q{http://ehcache.rubyforge.org}
14
+ s.rubyforge_project = %q{ehcache}
15
+ s.rubygems_version = %q{1.8.9}
16
+ s.summary = %q{JRuby interface to Ehcache}
17
+
18
+ s.files = `git ls-files`.split("\n")
19
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
+ s.require_paths = ["lib"]
22
+
23
+ end
data/lib/ehcache.rb ADDED
@@ -0,0 +1,22 @@
1
+ unless $:.include?(File.dirname(__FILE__)) ||
2
+ $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+ $:.unshift(File.dirname(__FILE__))
4
+ end
5
+
6
+ require 'java'
7
+
8
+ module Ehcache
9
+ unless defined?(EHCACHE_HOME)
10
+ EHCACHE_HOME = File.expand_path(File.dirname(__FILE__) + '/..')
11
+ end
12
+
13
+ # wraps all native exceptions
14
+ class EhcacheError < RuntimeError; end
15
+ end
16
+
17
+ require 'ehcache/extensions'
18
+ require 'ehcache/java'
19
+ require 'ehcache/config'
20
+ require 'ehcache/cache'
21
+ require 'ehcache/cache_manager'
22
+ require 'ehcache/element'
@@ -44,4 +44,15 @@ module Ehcache
44
44
  end
45
45
 
46
46
  end
47
- end
47
+ end
48
+
49
+ if defined?(Rails)
50
+ Ehcache::ActiveSupportStore.default_cache_name = 'rails_cache'
51
+
52
+ case Rails::VERSION::MAJOR
53
+ when 2
54
+ Ehcache::ActiveSupportStore.config_directory = File.expand_path(File.join(RAILS_ROOT, 'config'))
55
+ when 3
56
+ Ehcache::ActiveSupportStore.config_directory = File.expand_path(File.join(::Rails.root, 'config'))
57
+ end
58
+ end
@@ -0,0 +1,74 @@
1
+ # Enhance net.sf.ehcache.Cache with a more Rubyesque API.
2
+ class Java::NetSfEhcache::Cache
3
+ include Enumerable
4
+
5
+ # Yield each Element stored in this cache to the given block. This method
6
+ # uses Cache#getKeys as its basis, and therefore it is possible that some
7
+ # of the yielded elements have expired.
8
+ def each
9
+ for key in self.getKeys
10
+ yield self.get(key)
11
+ end
12
+ end
13
+
14
+ # Does this cache require marshalling of Ruby objects?
15
+ def marshal?
16
+ config = self.cache_configuration
17
+ config.overflow_to_disk? || config.overflow_to_off_heap? || config.terracotta_clustered?
18
+ end
19
+
20
+ # Gets an element value from the cache. Unlike the #get method, this method
21
+ # returns the element value, not the Element object.
22
+ def [](key)
23
+ element = self.get(key)
24
+ element ? element.value : nil
25
+ end
26
+
27
+ alias ehcache_put put
28
+
29
+ # Wrap the Cache#put method to allow for extra options to be passed to the
30
+ # created Element.
31
+ def put(*args)
32
+ options = args.extract_options!
33
+ if args.size == 1 && args.first.kind_of?(Ehcache::Element)
34
+ element = args.first
35
+ elsif args.size == 2
36
+ if marshal?
37
+ value = Java::NetSfEhcache::MarshaledRubyObject.new(Marshal.dump(args[1]).to_java_bytes)
38
+ end
39
+ element = Ehcache::Element.create(args[0], value, options)
40
+ else
41
+ raise ArgumentError, "Must be Element object or key and value arguments"
42
+ end
43
+
44
+ if options[:unless_exist] || options[:unlessExist] ||
45
+ options[:if_absent] ||options[:ifAbsent]
46
+ put_if_absent(element)
47
+ else
48
+ ehcache_put(element)
49
+ end
50
+ end
51
+
52
+ alias []= put
53
+
54
+ alias include? isKeyInCache
55
+ alias member? isKeyInCache
56
+
57
+ # Atomic compare and swap for cache elements. Invokes the given block with
58
+ # the current value of the element and attempts to replace it with the
59
+ # value returned from the block, repeating until replace returns true.
60
+ # Note that the provided block works only with element values, not Element
61
+ # objects: the result of element.getValue is passed to the block parameter,
62
+ # and the block is expected to return a value based on it.
63
+ # If there is no element with the given key, returns immediately without
64
+ # retrying.
65
+ def compare_and_swap(key, &block)
66
+ begin
67
+ old_element = self.get(key)
68
+ return nil unless old_element
69
+ new_element = Ehcache::Element.new(key, yield(old_element.value))
70
+ end until replace(old_element, new_element)
71
+ end
72
+
73
+ alias update compare_and_swap
74
+ end