You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shiro.apache.org by ad...@apache.org on 2009/03/11 07:30:38 UTC
svn commit: r752386 - in /incubator/jsecurity/trunk: samples/quickstart/src/
samples/spring-hibernate/web/WEB-INF/classes/
samples/spring/webroot/WEB-INF/classes/ samples/standalone/src/
samples/web/webroot/WEB-INF/classes/ support/ehcache/src/org/apac...
Author: adc
Date: Wed Mar 11 06:30:37 2009
New Revision: 752386
URL: http://svn.apache.org/viewvc?rev=752386&view=rev
Log:
KI-66 intermediate changes
Added:
incubator/jsecurity/trunk/support/ehcache/src/org/apache/
incubator/jsecurity/trunk/support/ehcache/src/org/apache/ki/
incubator/jsecurity/trunk/support/ehcache/src/org/apache/ki/cache/
incubator/jsecurity/trunk/support/ehcache/src/org/apache/ki/cache/ehcache/
incubator/jsecurity/trunk/support/ehcache/src/org/apache/ki/cache/ehcache/EhCache.java (with props)
incubator/jsecurity/trunk/support/ehcache/src/org/apache/ki/cache/ehcache/EhCacheManager.java (with props)
incubator/jsecurity/trunk/support/ehcache/src/org/apache/ki/cache/ehcache/ehcache.xml
- copied unchanged from r752382, incubator/jsecurity/trunk/support/ehcache/src/org/ki/cache/ehcache/ehcache.xml
incubator/jsecurity/trunk/support/ehcache/src/org/apache/ki/cache/ehcache/package-info.java
- copied unchanged from r752382, incubator/jsecurity/trunk/support/ehcache/src/org/ki/cache/ehcache/package-info.java
Removed:
incubator/jsecurity/trunk/support/ehcache/src/org/ki/cache/ehcache/EhCache.java
incubator/jsecurity/trunk/support/ehcache/src/org/ki/cache/ehcache/EhCacheManager.java
incubator/jsecurity/trunk/support/ehcache/src/org/ki/cache/ehcache/ehcache.xml
incubator/jsecurity/trunk/support/ehcache/src/org/ki/cache/ehcache/package-info.java
Modified:
incubator/jsecurity/trunk/samples/quickstart/src/log4j.properties
incubator/jsecurity/trunk/samples/spring-hibernate/web/WEB-INF/classes/log4j.properties
incubator/jsecurity/trunk/samples/spring/webroot/WEB-INF/classes/log4j.properties
incubator/jsecurity/trunk/samples/standalone/src/log4j.properties
incubator/jsecurity/trunk/samples/web/webroot/WEB-INF/classes/log4j.properties
Modified: incubator/jsecurity/trunk/samples/quickstart/src/log4j.properties
URL: http://svn.apache.org/viewvc/incubator/jsecurity/trunk/samples/quickstart/src/log4j.properties?rev=752386&r1=752385&r2=752386&view=diff
==============================================================================
--- incubator/jsecurity/trunk/samples/quickstart/src/log4j.properties (original)
+++ incubator/jsecurity/trunk/samples/quickstart/src/log4j.properties Wed Mar 11 06:30:37 2009
@@ -33,4 +33,4 @@
# Disable verbose logging
log4j.logger.org.apache.ki.util.ThreadContext=WARN
-log4j.logger.org.ki.cache.ehcache.EhCache=WARN
\ No newline at end of file
+log4j.logger.org.apache.ki.cache.ehcache.EhCache=WARN
\ No newline at end of file
Modified: incubator/jsecurity/trunk/samples/spring-hibernate/web/WEB-INF/classes/log4j.properties
URL: http://svn.apache.org/viewvc/incubator/jsecurity/trunk/samples/spring-hibernate/web/WEB-INF/classes/log4j.properties?rev=752386&r1=752385&r2=752386&view=diff
==============================================================================
--- incubator/jsecurity/trunk/samples/spring-hibernate/web/WEB-INF/classes/log4j.properties (original)
+++ incubator/jsecurity/trunk/samples/spring-hibernate/web/WEB-INF/classes/log4j.properties Wed Mar 11 06:30:37 2009
@@ -36,4 +36,4 @@
# Disable verbose logging
log4j.logger.org.apache.ki.util.ThreadContext=WARN
-log4j.logger.org.ki.cache.ehcache.EhCache=WARN
+log4j.logger.org.apache.ki.cache.ehcache.EhCache=WARN
Modified: incubator/jsecurity/trunk/samples/spring/webroot/WEB-INF/classes/log4j.properties
URL: http://svn.apache.org/viewvc/incubator/jsecurity/trunk/samples/spring/webroot/WEB-INF/classes/log4j.properties?rev=752386&r1=752385&r2=752386&view=diff
==============================================================================
--- incubator/jsecurity/trunk/samples/spring/webroot/WEB-INF/classes/log4j.properties (original)
+++ incubator/jsecurity/trunk/samples/spring/webroot/WEB-INF/classes/log4j.properties Wed Mar 11 06:30:37 2009
@@ -33,4 +33,4 @@
# Disable verbose logging
log4j.logger.org.apache.ki.util.ThreadContext=WARN
-log4j.logger.org.ki.cache.ehcache.EhCache=WARN
+log4j.logger.org.apache.ki.cache.ehcache.EhCache=WARN
Modified: incubator/jsecurity/trunk/samples/standalone/src/log4j.properties
URL: http://svn.apache.org/viewvc/incubator/jsecurity/trunk/samples/standalone/src/log4j.properties?rev=752386&r1=752385&r2=752386&view=diff
==============================================================================
--- incubator/jsecurity/trunk/samples/standalone/src/log4j.properties (original)
+++ incubator/jsecurity/trunk/samples/standalone/src/log4j.properties Wed Mar 11 06:30:37 2009
@@ -33,5 +33,5 @@
# Disable verbose logging
log4j.logger.org.apache.ki.util.ThreadContext=WARN
-log4j.logger.org.ki.cache.ehcache.EhCache=WARN
+log4j.logger.org.apache.ki.cache.ehcache.EhCache=WARN
Modified: incubator/jsecurity/trunk/samples/web/webroot/WEB-INF/classes/log4j.properties
URL: http://svn.apache.org/viewvc/incubator/jsecurity/trunk/samples/web/webroot/WEB-INF/classes/log4j.properties?rev=752386&r1=752385&r2=752386&view=diff
==============================================================================
--- incubator/jsecurity/trunk/samples/web/webroot/WEB-INF/classes/log4j.properties (original)
+++ incubator/jsecurity/trunk/samples/web/webroot/WEB-INF/classes/log4j.properties Wed Mar 11 06:30:37 2009
@@ -41,7 +41,7 @@
# =============================================================================
# JSecurity security framework
log4j.logger.org.apache.ki.realm.text.PropertiesRealm=INFO
-log4j.logger.org.ki.cache.ehcache.EhCache=INFO
+log4j.logger.org.apache.ki.cache.ehcache.EhCache=INFO
log4j.logger.org.ki.io=INFO
log4j.logger.org.ki.web.servlet=INFO
log4j.logger.org.apache.ki.util.ThreadContext=INFO
\ No newline at end of file
Added: incubator/jsecurity/trunk/support/ehcache/src/org/apache/ki/cache/ehcache/EhCache.java
URL: http://svn.apache.org/viewvc/incubator/jsecurity/trunk/support/ehcache/src/org/apache/ki/cache/ehcache/EhCache.java?rev=752386&view=auto
==============================================================================
--- incubator/jsecurity/trunk/support/ehcache/src/org/apache/ki/cache/ehcache/EhCache.java (added)
+++ incubator/jsecurity/trunk/support/ehcache/src/org/apache/ki/cache/ehcache/EhCache.java Wed Mar 11 06:30:37 2009
@@ -0,0 +1,236 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ki.cache.ehcache;
+
+import net.sf.ehcache.Element;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ki.cache.Cache;
+import org.apache.ki.cache.CacheException;
+
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * JSecurity {@link org.apache.ki.cache.Cache} implementation that wraps an {@link net.sf.ehcache.Ehcache} instance.
+ *
+ * @author Jeremy Haile
+ * @author Les Hazlewood
+ * @since 0.2
+ */
+@SuppressWarnings("unchecked")
+public class EhCache implements Cache {
+
+ /** Private internal log instance. */
+ private static final Log log = LogFactory.getLog(EhCache.class);
+
+ /**
+ * The wrapped Ehcache instance.
+ */
+ private net.sf.ehcache.Ehcache cache;
+
+ /**
+ * Constructs a new EhCache instance with the given cache.
+ *
+ * @param cache - delegate EhCache instance this JSecurity cache instance will wrap.
+ */
+ public EhCache(net.sf.ehcache.Cache cache) {
+ if (cache == null) {
+ throw new IllegalArgumentException("Cache argument cannot be null.");
+ }
+ this.cache = cache;
+ }
+
+ /**
+ * Gets a value of an element which matches the given key.
+ *
+ * @param key the key of the element to return.
+ * @return The value placed into the cache with an earlier put, or null if not found or expired
+ */
+ public Object get(Object key) throws CacheException {
+ try {
+ if (log.isTraceEnabled()) {
+ log.trace("Getting object from cache [" + cache.getName() + "] for key [" + key + "]");
+ }
+ if (key == null) {
+ return null;
+ } else {
+ Element element = cache.get(key);
+ if (element == null) {
+ if (log.isTraceEnabled()) {
+ log.trace("Element for [" + key + "] is null.");
+ }
+ return null;
+ } else {
+ return element.getObjectValue();
+ }
+ }
+ }
+ catch (Throwable t) {
+ throw new CacheException(t);
+ }
+ }
+
+ /**
+ * Puts an object into the cache.
+ *
+ * @param key the key.
+ * @param value the value.
+ */
+ public void put(Object key, Object value) throws CacheException {
+ if (log.isTraceEnabled()) {
+ log.trace("Putting object in cache [" + cache.getName() + "] for key [" + key + "]");
+ }
+ try {
+ Element element = new Element(key, value);
+ cache.put(element);
+ }
+ catch (Throwable t) {
+ throw new CacheException(t);
+ }
+ }
+
+ /**
+ * Removes the element which matches the key.
+ *
+ * <p>If no element matches, nothing is removed and no Exception is thrown.</p>
+ *
+ * @param key the key of the element to remove
+ */
+ public void remove(Object key) throws CacheException {
+ if (log.isTraceEnabled()) {
+ log.trace("Removing object from cache [" + cache.getName() + "] for key [" + key + "]");
+ }
+ try {
+ cache.remove(key);
+ } catch (Throwable t) {
+ throw new CacheException(t);
+ }
+ }
+
+ /**
+ * Removes all elements in the cache, but leaves the cache in a useable state.
+ */
+ public void clear() throws CacheException {
+ if (log.isTraceEnabled()) {
+ log.trace("Clearing all objects from cache [" + cache.getName() + "]");
+ }
+ try {
+ cache.removeAll();
+ } catch (Throwable t) {
+ throw new CacheException(t);
+ }
+ }
+
+ public int size() {
+ try {
+ return cache.getSize();
+ } catch (Throwable t) {
+ throw new CacheException(t);
+ }
+ }
+
+ public Set keys() {
+ try {
+ List keys = cache.getKeys();
+ if (keys != null && !keys.isEmpty()) {
+ return Collections.unmodifiableSet(new LinkedHashSet(keys));
+ } else {
+ return Collections.EMPTY_SET;
+ }
+ } catch (Throwable t) {
+ throw new CacheException(t);
+ }
+ }
+
+ public Set values() {
+ try {
+ List keys = cache.getKeys();
+ if (keys != null && !keys.isEmpty()) {
+ Set values = new LinkedHashSet(keys.size());
+ for (Object key : keys) {
+ values.add(cache.get(key));
+ }
+ return Collections.unmodifiableSet(values);
+ } else {
+ return Collections.EMPTY_SET;
+ }
+ } catch (Throwable t) {
+ throw new CacheException(t);
+ }
+ }
+
+ /**
+ * Returns the size (in bytes) that this EhCache is using in memory (RAM), or <code>-1</code> if that
+ * number is unknown or cannot be calculated.
+ *
+ * @return the size (in bytes) that this EhCache is using in memory (RAM), or <code>-1</code> if that
+ * number is unknown or cannot be calculated.
+ */
+ public long getMemoryUsage() {
+ try {
+ return cache.calculateInMemorySize();
+ }
+ catch (Throwable t) {
+ return -1;
+ }
+ }
+
+ /**
+ * Returns the size (in bytes) that this EhCache's memory store is using (RAM), or <code>-1</code> if
+ * that number is unknown or cannot be calculated.
+ *
+ * @return the size (in bytes) that this EhCache's memory store is using (RAM), or <code>-1</code> if
+ * that number is unknown or cannot be calculated.
+ */
+ public long getMemoryStoreSize() {
+ try {
+ return cache.getMemoryStoreSize();
+ }
+ catch (Throwable t) {
+ throw new CacheException(t);
+ }
+ }
+
+ /**
+ * Returns the size (in bytes) that this EhCache's disk store is consuming or <code>-1</code> if
+ * that number is unknown or cannot be calculated.
+ *
+ * @return the size (in bytes) that this EhCache's disk store is consuming or <code>-1</code> if
+ * that number is unknown or cannot be calculated.
+ */
+ public long getDiskStoreSize() {
+ try {
+ return cache.getDiskStoreSize();
+ } catch (Throwable t) {
+ throw new CacheException(t);
+ }
+ }
+
+ /**
+ * Returns "EhCache [" + cache.getName() + "]"
+ *
+ * @return "EhCache [" + cache.getName() + "]"
+ */
+ public String toString() {
+ return "EhCache [" + cache.getName() + "]";
+ }
+}
Propchange: incubator/jsecurity/trunk/support/ehcache/src/org/apache/ki/cache/ehcache/EhCache.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/jsecurity/trunk/support/ehcache/src/org/apache/ki/cache/ehcache/EhCache.java
------------------------------------------------------------------------------
svn:keywords = Date Revision Id Author
Propchange: incubator/jsecurity/trunk/support/ehcache/src/org/apache/ki/cache/ehcache/EhCache.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: incubator/jsecurity/trunk/support/ehcache/src/org/apache/ki/cache/ehcache/EhCacheManager.java
URL: http://svn.apache.org/viewvc/incubator/jsecurity/trunk/support/ehcache/src/org/apache/ki/cache/ehcache/EhCacheManager.java?rev=752386&view=auto
==============================================================================
--- incubator/jsecurity/trunk/support/ehcache/src/org/apache/ki/cache/ehcache/EhCacheManager.java (added)
+++ incubator/jsecurity/trunk/support/ehcache/src/org/apache/ki/cache/ehcache/EhCacheManager.java Wed Mar 11 06:30:37 2009
@@ -0,0 +1,294 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ki.cache.ehcache;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ki.cache.Cache;
+import org.apache.ki.cache.CacheException;
+import org.apache.ki.cache.CacheManager;
+import org.apache.ki.cache.ehcache.EhCache;
+
+import org.apache.ki.io.ResourceUtils;
+import org.apache.ki.session.mgt.eis.CachingSessionDAO;
+import org.apache.ki.util.Destroyable;
+
+import org.apache.ki.util.Initializable;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * JSecurity <code>CacheManager</code> implementation utilizing the Ehcache framework for all cache functionality.
+ * <p/>
+ * This class can {@link #setCacheManager(net.sf.ehcache.CacheManager) accept} a manually configured
+ * {@link net.sf.ehcache.CacheManager net.sf.ehcache.CacheManager} instance,
+ * or an <code>ehcache.xml</code> path location can be specified instead and one will be constructed. If neither are
+ * specified, JSecurity's failsafe <code><a href="./ehcache.xml">ehcache.xml</a></code> file will be used by default.
+ *
+ * <p>This implementation requires EhCache 1.2 and above. Make sure EhCache 1.1 or earlier
+ * is not in the classpath or it will not work.</p>
+ *
+ * <p>Please see the <a href="http://ehcache.sf.net" target="_top">Ehcache website</a> for their documentation.</p>
+ *
+ * @author Jeremy Haile
+ * @author Les Hazlewood
+ * @see <a href="http://ehcache.sf.net" target="_top">The Ehcache website</a>
+ * @since 0.2
+ */
+public class EhCacheManager implements CacheManager, Initializable, Destroyable {
+
+ /**
+ * The default name for the active sessions cache, equal to
+ * {@link org.apache.ki.session.mgt.eis.CachingSessionDAO#ACTIVE_SESSION_CACHE_NAME CachingSessionDAO.ACTIVE_SESSION_CACHE_NAME}.
+ */
+ public static final String DEFAULT_ACTIVE_SESSIONS_CACHE_NAME = CachingSessionDAO.ACTIVE_SESSION_CACHE_NAME;
+
+ /**
+ * The default maximum number of active sessions in cache <em>memory</em>, equal to <code>20,000</code>.
+ */
+ public static final int DEFAULT_ACTIVE_SESSIONS_CACHE_MAX_ELEM_IN_MEM = 20000;
+
+ /**
+ * The default time the active sessions disk expiration thread will run, equal to <code>600</code> (10 minutes).
+ */
+ public static final int DEFAULT_ACTIVE_SESSIONS_DISK_EXPIRY_THREAD_INTERVAL_SECONDS = 600;
+
+ /**
+ * This class's private log instance.
+ */
+ private static final Log log = LogFactory.getLog(EhCacheManager.class);
+
+ /**
+ * The EhCache cache manager used by this implementation to create caches.
+ */
+ protected net.sf.ehcache.CacheManager manager;
+
+ /**
+ * Indicates if the CacheManager instance was implicitly/automatically created by this instance, indicating that
+ * it should be automatically cleaned up as well on shutdown.
+ */
+ private boolean cacheManagerImplicitlyCreated = false;
+
+ /**
+ * Classpath file location of the ehcache CacheManager config file.
+ */
+ private String cacheManagerConfigFile = "classpath:org/ki/cache/ehcache/ehcache.xml";
+
+ /**
+ * Default no argument constructor
+ */
+ public EhCacheManager() {
+ }
+
+ /**
+ * Returns the wrapped Ehcache {@link net.sf.ehcache.CacheManager CacheManager} instance.
+ *
+ * @return the wrapped Ehcache {@link net.sf.ehcache.CacheManager CacheManager} instance.
+ */
+ public net.sf.ehcache.CacheManager getCacheManager() {
+ return manager;
+ }
+
+ /**
+ * Sets the wrapped Ehcache {@link net.sf.ehcache.CacheManager CacheManager} instance.
+ *
+ * @param manager the wrapped Ehcache {@link net.sf.ehcache.CacheManager CacheManager} instance.
+ */
+ public void setCacheManager(net.sf.ehcache.CacheManager manager) {
+ this.manager = manager;
+ }
+
+ /**
+ * Returns the resource location of the config file used to initialize a new
+ * EhCache CacheManager instance. The string can be any resource path supported by the
+ * {@link org.apache.ki.io.ResourceUtils#getInputStreamForPath(String)} call.
+ *
+ * <p>This property is ignored if the CacheManager instance is injected directly - that is, it is only used to
+ * lazily create a CacheManager if one is not already provided.</p>
+ *
+ * @return the resource location of the config file used to initialize the wrapped
+ * EhCache CacheManager instance.
+ */
+ public String getCacheManagerConfigFile() {
+ return this.cacheManagerConfigFile;
+ }
+
+ /**
+ * Sets the resource location of the config file used to initialize the wrapped
+ * EhCache CacheManager instance. The string can be any resource path supported by the
+ * {@link org.apache.ki.io.ResourceUtils#getInputStreamForPath(String)} call.
+ *
+ * <p>This property is ignored if the CacheManager instance is injected directly - that is, it is only used to
+ * lazily create a CacheManager if one is not already provided.</p>
+ *
+ * @param classpathLocation resource location of the config file used to create the wrapped
+ * EhCache CacheManager instance.
+ */
+ public void setCacheManagerConfigFile(String classpathLocation) {
+ this.cacheManagerConfigFile = classpathLocation;
+ }
+
+ /**
+ * Acquires the InputStream for the ehcache configuration file using
+ * {@link ResourceUtils#getInputStreamForPath(String) ResourceUtils.getInputStreamForPath} with the
+ * path returned from {@link #getCacheManagerConfigFile() getCacheManagerConfigFile()}.
+ *
+ * @return the InputStream for the ehcache configuration file.
+ */
+ protected InputStream getCacheManagerConfigFileInputStream() {
+ String configFile = getCacheManagerConfigFile();
+ try {
+ return ResourceUtils.getInputStreamForPath(configFile);
+ } catch (IOException e) {
+ throw new IllegalStateException("Unable to obtain input stream for cacheManagerConfigFile.", e);
+ }
+ }
+
+ /**
+ * Loads an existing EhCache from the cache manager, or starts a new cache if one is not found.
+ *
+ * @param name the name of the cache to load/create.
+ */
+ public final Cache getCache(String name) throws CacheException {
+
+ if (log.isTraceEnabled()) {
+ log.trace("Loading a new EhCache cache named [" + name + "]");
+ }
+
+ try {
+ net.sf.ehcache.Cache cache = getCacheManager().getCache(name);
+ if (cache == null) {
+ if (log.isInfoEnabled()) {
+ log.info("Could not find a specific ehcache configuration for cache named [" + name + "]; using defaults.");
+ }
+ if (name.equals(DEFAULT_ACTIVE_SESSIONS_CACHE_NAME)) {
+ if (log.isInfoEnabled()) {
+ log.info("Creating " + DEFAULT_ACTIVE_SESSIONS_CACHE_NAME + " cache with default JSecurity " +
+ "session cache settings.");
+ }
+ cache = buildDefaultActiveSessionsCache();
+ manager.addCache(cache);
+ } else {
+ manager.addCache(name);
+ }
+
+ cache = manager.getCache(name);
+
+ if (log.isInfoEnabled()) {
+ log.info("Started EHCache named [" + name + "]");
+ }
+ } else {
+ if (log.isInfoEnabled()) {
+ log.info("Using preconfigured EHCache named [" + cache.getName() + "]");
+ }
+ }
+ return new EhCache(cache);
+ } catch (net.sf.ehcache.CacheException e) {
+ throw new CacheException(e);
+ }
+ }
+
+ /**
+ * Builds the default cache instance to use for JSecurity's Session Cache when enterprise Sessions are
+ * enabled.
+ *
+ * @return the default cache instance to use for JSecurity's Session Cache when enterprise Sessions are
+ * enabled.
+ * @throws CacheException if there is a problem constructing the Cache instance.
+ */
+ private net.sf.ehcache.Cache buildDefaultActiveSessionsCache() throws CacheException {
+ return new net.sf.ehcache.Cache(DEFAULT_ACTIVE_SESSIONS_CACHE_NAME,
+ DEFAULT_ACTIVE_SESSIONS_CACHE_MAX_ELEM_IN_MEM,
+ true,
+ true,
+ 0,
+ 0,
+ true,
+ DEFAULT_ACTIVE_SESSIONS_DISK_EXPIRY_THREAD_INTERVAL_SECONDS);
+ }
+
+ /**
+ * Initializes this instance.
+ *
+ * <p>If a {@link #setCacheManager CacheManager} has been
+ * explicitly set (e.g. via Dependency Injection or programatically) prior to calling this
+ * method, this method does nothing.</p>
+ *
+ * <p>However, if no <tt>CacheManager</tt> has been set, the default Ehcache singleton will be initialized, where
+ * Ehcache will look for an <tt>ehcache.xml</tt> file at the root of the classpath. If one is not found,
+ * Ehcache will use its own failsafe configuration file.</p>
+ *
+ * <p>Because JSecurity cannot use the failsafe defaults (failsafe expunges cached objects after 2 minutes,
+ * something not desireable for JSecurity sessions), this class manages an internal default configuration for
+ * this case.</p>
+ *
+ * @throws org.apache.ki.cache.CacheException
+ * if there are any CacheExceptions thrown by EhCache.
+ * @see net.sf.ehcache.CacheManager#create
+ */
+ public final void init() throws CacheException {
+ try {
+ net.sf.ehcache.CacheManager cacheMgr = getCacheManager();
+ if (cacheMgr == null) {
+ if (log.isDebugEnabled()) {
+ log.debug("cacheManager property not set. Constructing CacheManager instance... ");
+ }
+ //using the CacheManager constructor, the resulting instance is _not_ a VM singleton
+ //(as would be the case by calling CacheManager.getInstance(). We do not use the getInstance here
+ //because we need to know if we need to destroy the CacheManager instance - using the static call,
+ //we don't know which component is responsible for shutting it down. By using a single EhCacheManager,
+ //it will always know to shut down the instance if it was responsible for creating it.
+ cacheMgr = new net.sf.ehcache.CacheManager(getCacheManagerConfigFileInputStream());
+ if (log.isTraceEnabled()) {
+ log.trace("instantiated Ehcache CacheManager instance.");
+ }
+ cacheManagerImplicitlyCreated = true;
+ setCacheManager(cacheMgr);
+ if (log.isDebugEnabled()) {
+ log.debug("implicit cacheManager created successfully.");
+ }
+ }
+ } catch (Exception e) {
+ throw new CacheException(e);
+ }
+ }
+
+ /**
+ * Shuts-down the wrapped Ehcache CacheManager <b>only if implicitly created</b>.
+ *
+ * <p>If another component injected
+ * a non-null CacheManager into this instace before calling {@link #init() init}, this instance expects that same
+ * component to also destroy the CacheManager instance, and it will not attempt to do so.
+ */
+ public void destroy() {
+ if (cacheManagerImplicitlyCreated) {
+ try {
+ net.sf.ehcache.CacheManager cacheMgr = getCacheManager();
+ cacheMgr.shutdown();
+ } catch (Exception e) {
+ if (log.isWarnEnabled()) {
+ log.warn("Unable to cleanly shutdown implicitly created CacheManager instance. " +
+ "Ignoring (shutting down)...");
+ }
+ }
+ cacheManagerImplicitlyCreated = false;
+ }
+ }
+}
Propchange: incubator/jsecurity/trunk/support/ehcache/src/org/apache/ki/cache/ehcache/EhCacheManager.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/jsecurity/trunk/support/ehcache/src/org/apache/ki/cache/ehcache/EhCacheManager.java
------------------------------------------------------------------------------
svn:keywords = Date Revision Id Author
Propchange: incubator/jsecurity/trunk/support/ehcache/src/org/apache/ki/cache/ehcache/EhCacheManager.java
------------------------------------------------------------------------------
svn:mime-type = text/plain