All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hibernate.cache.OptimisticTreeCacheProvider Maven / Gradle / Ivy

There is a newer version: 3.6.0.Beta2
Show newest version
//$Id: OptimisticTreeCacheProvider.java 9895 2006-05-05 19:27:17Z epbernard $
package org.hibernate.cache;

import java.util.Properties;
import javax.transaction.TransactionManager;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.cfg.Environment;
import org.hibernate.transaction.TransactionManagerLookup;
import org.hibernate.transaction.TransactionManagerLookupFactory;
import org.jboss.cache.PropertyConfigurator;

/**
 * Support for a standalone JBossCache TreeCache instance utilizing TreeCache's
 * optimistic locking capabilities.  This capability was added in JBossCache
 * version 1.3.0; as such this provider will only work with that version or
 * higher.
 * 

* The TreeCache instance is configured via a local config resource. The * resource to be used for configuration can be controlled by specifying a value * for the {@link #CONFIG_RESOURCE} config property. * * @author Steve Ebersole */ public class OptimisticTreeCacheProvider implements CacheProvider { /** * @deprecated use {@link Environment.CACHE_PROVIDER_CONFIG} */ public static final String CONFIG_RESOURCE = "hibernate.cache.opt_tree_cache.config"; public static final String DEFAULT_CONFIG = "treecache.xml"; private static final String NODE_LOCKING_SCHEME = "OPTIMISTIC"; private static final Log log = LogFactory.getLog( OptimisticTreeCacheProvider.class ); private org.jboss.cache.TreeCache cache; /** * Construct and configure the Cache representation of a named cache region. * * @param regionName the name of the cache region * @param properties configuration settings * @return The Cache representation of the named cache region. * @throws CacheException * Indicates an error building the cache region. */ public Cache buildCache(String regionName, Properties properties) throws CacheException { return new OptimisticTreeCache( cache, regionName ); } public long nextTimestamp() { return System.currentTimeMillis() / 100; } /** * Prepare the underlying JBossCache TreeCache instance. * * @param properties All current config settings. * @throws CacheException * Indicates a problem preparing cache for use. */ public void start(Properties properties) { String resource = properties.getProperty( Environment.CACHE_PROVIDER_CONFIG ); if (resource == null) { resource = properties.getProperty( CONFIG_RESOURCE ); } if ( resource == null ) { resource = DEFAULT_CONFIG; } log.debug( "Configuring TreeCache from resource [" + resource + "]" ); try { cache = new org.jboss.cache.TreeCache(); PropertyConfigurator config = new PropertyConfigurator(); config.configure( cache, resource ); TransactionManagerLookup transactionManagerLookup = TransactionManagerLookupFactory.getTransactionManagerLookup( properties ); if ( transactionManagerLookup == null ) { throw new CacheException( "JBossCache only supports optimisitc locking with a configured " + "TransactionManagerLookup (" + Environment.TRANSACTION_MANAGER_STRATEGY + ")" ); } cache.setTransactionManagerLookup( new TransactionManagerLookupAdaptor( transactionManagerLookup, properties ) ); if ( ! NODE_LOCKING_SCHEME.equalsIgnoreCase( cache.getNodeLockingScheme() ) ) { log.info( "Overriding node-locking-scheme to : " + NODE_LOCKING_SCHEME ); cache.setNodeLockingScheme( NODE_LOCKING_SCHEME ); } cache.start(); } catch ( Exception e ) { throw new CacheException( e ); } } public void stop() { if ( cache != null ) { cache.stop(); cache.destroy(); cache = null; } } public boolean isMinimalPutsEnabledByDefault() { return true; } static final class TransactionManagerLookupAdaptor implements org.jboss.cache.TransactionManagerLookup { private final TransactionManagerLookup tml; private final Properties props; TransactionManagerLookupAdaptor(TransactionManagerLookup tml, Properties props) { this.tml = tml; this.props = props; } public TransactionManager getTransactionManager() throws Exception { return tml.getTransactionManager( props ); } } public org.jboss.cache.TreeCache getUnderlyingCache() { return cache; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy