jruby-ehcache-rails2 1.2.0 → 1.3.0

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