⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 queryresultsregionimpl.java

📁 hibernate-distribution-3.3.1.GA-dist.zip源码
💻 JAVA
字号:
/* * Hibernate, Relational Persistence for Idiomatic Java * * Copyright (c) 2007, Red Hat Middleware LLC or third-party contributors as * indicated by the @author tags or express copyright attribution * statements applied by the authors.  All third-party contributions are * distributed under license by Red Hat Middleware LLC. * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU * Lesser General Public License, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA  02110-1301  USA */package org.hibernate.cache.jbc2.query;import java.util.Properties;import org.hibernate.cache.CacheException;import org.hibernate.cache.QueryResultsRegion;import org.hibernate.cache.jbc2.TransactionalDataRegionAdapter;import org.hibernate.cache.jbc2.util.CacheHelper;import org.hibernate.util.PropertiesHelper;import org.jboss.cache.Cache;import org.jboss.cache.Fqn;import org.jboss.cache.config.Option;/** * Defines the behavior of the query cache regions for JBossCache 2.x. *  * @author Brian Stansberry * @version $Revision: 14368 $ */public class QueryResultsRegionImpl extends TransactionalDataRegionAdapter implements QueryResultsRegion {    public static final String QUERY_CACHE_LOCAL_ONLY_PROP = "hibernate.cache.region.jbc2.query.localonly";    public static final String TYPE = "QUERY";        /**     * Whether we should set an option to disable propagation of changes around     * cluster.     */    private boolean localOnly;    /**     * Create a new QueryResultsRegionImpl.     *      * @param jbcCache The JBC cache instance to use to store the query results     * @param regionName The name of the region (within the JBC cache)     * @param regionPrefix Any region prefix to apply	 * @param properties The configuration properties.     */    public QueryResultsRegionImpl(Cache jbcCache, String regionName, String regionPrefix, Properties properties) {        super(jbcCache, regionName, regionPrefix, null);        // If JBC is using INVALIDATION, we don't want to propagate changes.        // We use the Timestamps cache to manage invalidation        localOnly = CacheHelper.isClusteredInvalidation(jbcCache);        if (!localOnly) {            // We don't want to waste effort setting an option if JBC is            // already in LOCAL mode. If JBC is REPL_(A)SYNC then check            // if they passed an config option to disable query replication            localOnly = CacheHelper.isClusteredReplication(jbcCache)                    && PropertiesHelper.getBoolean(QUERY_CACHE_LOCAL_ONLY_PROP, properties, false);        }    }    public void evict(Object key) throws CacheException {               ensureRegionRootExists();                Option opt = getNonLockingDataVersionOption(false);        if (localOnly)            opt.setCacheModeLocal(true);        CacheHelper.removeNode(getCacheInstance(), getRegionFqn(), key, opt);    }    public void evictAll() throws CacheException {        Option opt = getNonLockingDataVersionOption(false);        if (localOnly)            opt.setCacheModeLocal(true);        CacheHelper.removeAll(getCacheInstance(), getRegionFqn(), opt);    }    public Object get(Object key) throws CacheException {               ensureRegionRootExists();        // Don't hold the JBC node lock throughout the tx, as that        // prevents updates        // Add a zero (or low) timeout option so we don't block        // waiting for tx's that did a put to commit        Option opt = new Option();        opt.setLockAcquisitionTimeout(0);        return suspendAndGet(key, opt, true);    }    public void put(Object key, Object value) throws CacheException {               ensureRegionRootExists();        // Here we don't want to suspend the tx. If we do:        // 1) We might be caching query results that reflect uncommitted        // changes. No tx == no WL on cache node, so other threads        // can prematurely see those query results        // 2) No tx == immediate replication. More overhead, plus we        // spread issue #1 above around the cluster        // Add a zero (or quite low) timeout option so we don't block.        // Ignore any TimeoutException. Basically we forego caching the        // query result in order to avoid blocking.        // Reads are done with suspended tx, so they should not hold the        // lock for long.  Not caching the query result is OK, since        // any subsequent read will just see the old result with its        // out-of-date timestamp; that result will be discarded and the        // db query performed again.        Option opt = getNonLockingDataVersionOption(false);        opt.setLockAcquisitionTimeout(2);        if (localOnly)            opt.setCacheModeLocal(true);        CacheHelper.putAllowingTimeout(getCacheInstance(), getRegionFqn(), key, value, opt);    }    @Override    protected Fqn<String> createRegionFqn(String regionName, String regionPrefix) {        return getTypeLastRegionFqn(regionName, regionPrefix, TYPE);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -