jruby-ehcache-rails3 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/active_support_store.rb +12 -1
  25. data/lib/ehcache/cache.rb +74 -0
  26. data/lib/ehcache/cache_manager.rb +69 -0
  27. data/lib/ehcache/config.rb +51 -0
  28. data/lib/ehcache/element.rb +36 -0
  29. data/lib/ehcache/java.rb +57 -0
  30. data/lib/ehcache/version.rb +3 -0
  31. data/lib/ehcache/yaml_config.rb +251 -0
  32. data/lib/ehcache.rb +22 -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
@@ -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
@@ -0,0 +1,69 @@
1
+ # Enhance net.sf.ehcache.CacheManager with a more Rubyesque API.
2
+ class Java::NetSfEhcache::CacheManager
3
+ include Enumerable
4
+
5
+ class << self
6
+ alias_method :ehcache_create, :create
7
+
8
+ # Enhanced create that provides for some extra configuration options.
9
+ # Specifically, String arguments may be used where native Ehcache expects
10
+ # java.io.File objects, and if the String refers to a YAML file it will be
11
+ # used as the Configuration source.
12
+ def create(*args)
13
+ process_init_args(*args) do |*args|
14
+ ehcache_create(*args)
15
+ end
16
+ end
17
+ end
18
+
19
+ # Enhanced constructor that provides for some extra configuration options.
20
+ # Specifically, String arguments may be used where native Ehcache expects
21
+ # java.io.File objects, and if the String refers to a YAML file it will be
22
+ # used as the Configuration source.
23
+ def initialize(*args)
24
+ process_init_args(*args) do |*args|
25
+ super(*args)
26
+ end
27
+ end
28
+
29
+ # Iterate through each cache managed by this CacheManager.
30
+ def each
31
+ for name in self.cache_names
32
+ yield self.get_ehcache(name)
33
+ end
34
+ end
35
+
36
+ alias [] get_ehcache
37
+
38
+ def cache(cache_name = '__default_jruby_cache')
39
+ self.add_cache_if_absent(cache_name)
40
+ self.get_ehcache(cache_name)
41
+ end
42
+
43
+ # true if cache by given name is being managed, false otherwise
44
+ def include?(cache_name)
45
+ self.cache_exists(cache_name)
46
+ end
47
+ alias_method :exists?, :include?
48
+ end
49
+
50
+ # Helper method for processing initialization arguments passed to
51
+ # CacheManager.create and CacheManager#initialize.
52
+ def process_init_args(*args)
53
+ args.compact!
54
+ if args.empty?
55
+ # First, look relative to the file that is creating the CacheManager.
56
+ # The expression caller[2] finds the entry in the call stack where
57
+ # CacheManager.new or CacheManager.create was called.
58
+ creator = /^(.+?):\d/.match(caller[2])[1]
59
+ if ehcache_config = Java::NetSfEhcacheConfig::Configuration.find(File.dirname(creator))
60
+ yield(ehcache_config)
61
+ else
62
+ yield
63
+ end
64
+ elsif args.size == 1 && args.first.is_a?(String)
65
+ yield(Ehcache::Config::Configuration.create(args.first))
66
+ else
67
+ yield(*args)
68
+ end
69
+ end
@@ -0,0 +1,51 @@
1
+ require 'ehcache/yaml_config'
2
+
3
+ # Enhance net.sf.ehcache.config.Configuration with a more Rubyesque API, and
4
+ # add support for using YAML for configuration.
5
+ class Java::NetSfEhcacheConfig::Configuration
6
+ Factory = Java::NetSfEhcacheConfig::ConfigurationFactory
7
+
8
+ # Searches for an Ehcache configuration file and, if found, returns a
9
+ # Configuration object created from it. The search algorithm looks for
10
+ # files named "ehcache.yml" or "ehcache.xml", first looking in the provided
11
+ # directories in order, and if not found there then looking in the Ruby
12
+ # $LOAD_PATH.
13
+ # Returns nil if no configuration file is found.
14
+ def self.find(*dirs)
15
+ file_names = %w[ehcache.yml ehcache.xml]
16
+ dirs += $LOAD_PATH
17
+ dirs.each do |dir|
18
+ file_names.each do |name|
19
+ candidate = File.join(dir, name)
20
+ return create(candidate) if File.exist?(candidate)
21
+ end
22
+ end
23
+ nil
24
+ end
25
+
26
+ def self.create(*args)
27
+ result = nil
28
+ case args.size
29
+ when 0
30
+ result = Factory.parseConfiguration()
31
+ when 1
32
+ arg = args.first
33
+
34
+ if arg.is_a?(String)
35
+ raise ArgumentError, "Cannot read config file '#{arg}'" unless File.readable?(arg)
36
+ if arg =~ /\.yml$/
37
+ result = Ehcache::Config::YamlConfig.parse_yaml_config(arg)
38
+ else
39
+ result = Factory.parseConfiguration(java.io.File.new(arg))
40
+ end
41
+ else
42
+ result = Factory.parseConfiguration(arg)
43
+ end
44
+ end
45
+
46
+ unless result.is_a?(self)
47
+ raise ArgumentError, "Could not create Configuration from: #{args.inspect}"
48
+ end
49
+ result
50
+ end
51
+ end
@@ -0,0 +1,36 @@
1
+ # Enhance net.sf.ehcache.Element with a more Rubyesque API.
2
+ class Java::NetSfEhcache::Element
3
+ def self.create(key, value, options = {})
4
+ result = self.new(key, value)
5
+ options.each do |key, value|
6
+ setter = "#{key}=".to_sym
7
+ result.send(setter, value) if result.respond_to?(setter)
8
+ end
9
+ result
10
+ end
11
+
12
+ alias element_value value
13
+
14
+ # Wrap the Element#value method to unmarshal Ruby objects if necessary.
15
+ def value
16
+ val = element_value
17
+ if val.kind_of?(Java::NetSfEhcache::MarshaledRubyObject)
18
+ Marshal.load(String.from_java_bytes(val.bytes))
19
+ else
20
+ val
21
+ end
22
+ end
23
+
24
+ alias tti getTimeToIdle
25
+ alias ttl getTimeToLive
26
+
27
+ alias tti= setTimeToIdle
28
+ alias ttl= setTimeToLive
29
+
30
+ alias expires_in getTimeToLive
31
+ def expires_in=(seconds)
32
+ setTimeToLive(seconds.to_i)
33
+ end
34
+ alias expiresIn expires_in
35
+ alias expiresIn= expires_in=
36
+ end
@@ -0,0 +1,57 @@
1
+ require 'java'
2
+
3
+ EHCACHE_LIBS_DIR = "#{Ehcache::EHCACHE_HOME}/ext"
4
+
5
+ module Ehcache
6
+ module Rails
7
+ RAILS_ROOT_DIR = if defined?(::Rails)
8
+ ::Rails.root.to_s
9
+ elsif defined?(RAILS_ROOT)
10
+ RAILS_ROOT
11
+ end
12
+ if RAILS_ROOT_DIR
13
+ RAILS_LIB_DIR = File.join(RAILS_ROOT_DIR, 'lib')
14
+ Dir["#{RAILS_LIB_DIR}/**/*.jar"].each do |jar|
15
+ $CLASSPATH << File.expand_path(jar)
16
+ end
17
+ end
18
+ end
19
+ Dir["#{EHCACHE_LIBS_DIR}/**/*.jar"].each do |jar|
20
+ $CLASSPATH << File.expand_path(jar)
21
+ end
22
+ LOG = Java::OrgSlf4j::LoggerFactory.getLogger("JRubyEhcache")
23
+ LOG.info("Using Ehcache version #{Java::NetSfEhcacheUtil::ProductInfo.new.getVersion()}")
24
+ =begin
25
+ slf4j_loader = lambda { Java::OrgSlf4j::LoggerFactory.getLogger("JRubyEhcache") }
26
+ begin
27
+ LOG = slf4j_loader.call
28
+ LOG.info("Using SLF4J Logger from CLASSPATH")
29
+ rescue NameError
30
+ Dir["#{EHCACHE_LIBS_DIR}/**/*slf4j*.jar"].each do |l| require l end
31
+ LOG = slf4j_loader.call
32
+ LOG.info("Using bundled SLF4J Logger")
33
+ end
34
+
35
+ ehcache_version_loader = lambda {
36
+ Java::NetSfEhcacheUtil::ProductInfo.new.getVersion()
37
+ }
38
+ begin
39
+ # If Ehcache is already on the classpath, use it.
40
+ VERSION = ehcache_version_loader.call
41
+ LOG.info("Using Ehcache #{VERSION} from CLASSPATH")
42
+ rescue NameError
43
+ # If not, use the Ehcache bundled with the jruby-ehcache gem.
44
+ Dir["#{EHCACHE_LIBS_DIR}/**/*.jar"].each do |l|
45
+ require l unless l =~ /slf4j/
46
+ end
47
+ VERSION = ehcache_version_loader.call
48
+ LOG.info("Using bundled Ehcache #{VERSION}")
49
+ end
50
+ =end
51
+ include_package 'net.sf.ehcache'
52
+
53
+ module Config
54
+ include_package 'net.sf.ehcache.config'
55
+ end
56
+
57
+ end
@@ -0,0 +1,3 @@
1
+ module Ehcache
2
+ VERSION = "1.3.0"
3
+ end