/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
*/
package org.hibernate.cache.spi;
import java.util.Map;
import org.hibernate.boot.spi.SessionFactoryOptions;
import org.hibernate.cache.CacheException;
import org.hibernate.cache.cfg.spi.DomainDataRegionBuildingContext;
import org.hibernate.cache.cfg.spi.DomainDataRegionConfig;
import org.hibernate.cache.spi.access.AccessType;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.service.Service;
import org.hibernate.service.spi.Stoppable;
Contract for building second level cache regions.
Implementors should define a constructor in one of two forms:
- MyRegionFactoryImpl(
Properties
)
- MyRegionFactoryImpl()
Use the first when we need to read config properties prior to start
being called. Author: Steve Ebersole
/**
* Contract for building second level cache regions.
* <p/>
* Implementors should define a constructor in one of two forms:<ul>
* <li>MyRegionFactoryImpl({@link java.util.Properties})</li>
* <li>MyRegionFactoryImpl()</li>
* </ul>
* Use the first when we need to read config properties prior to
* {@link #start} being called.
*
* @author Steve Ebersole
*/
public interface RegionFactory extends Service, Stoppable {
Lifecycle callback to perform any necessary initialization of the underlying cache provider. Called exactly once during the construction of a SessionFactoryImpl
. Params: - settings – The settings in effect.
- configValues – The available config values
Throws: - CacheException – Indicates problems starting the L2 cache impl; considered as a sign to stop
SessionFactory
building.
/**
* Lifecycle callback to perform any necessary initialization of the
* underlying cache provider. Called exactly once during the
* construction of a {@link org.hibernate.internal.SessionFactoryImpl}.
*
* @param settings The settings in effect.
* @param configValues The available config values
*
* @throws org.hibernate.cache.CacheException Indicates problems starting the L2 cache impl;
* considered as a sign to stop {@link org.hibernate.SessionFactory}
* building.
*/
void start(SessionFactoryOptions settings, Map configValues) throws CacheException;
By default should we perform "minimal puts" when using this second
level cache implementation?
Returns: True if "minimal puts" should be performed by default; false
otherwise.
/**
* By default should we perform "minimal puts" when using this second
* level cache implementation?
*
* @return True if "minimal puts" should be performed by default; false
* otherwise.
*/
boolean isMinimalPutsEnabledByDefault();
Get the default access type for any "user model" data
/**
* Get the default access type for any "user model" data
*/
AccessType getDefaultAccessType();
String qualify(String regionName);
default CacheTransactionSynchronization createTransactionContext(SharedSessionContractImplementor session) {
return new StandardCacheTransactionSynchronization( this );
}
Generate a timestamp. This value is generally used for purpose of locking/unlocking cache content depending upon the access-strategy being used. The intended consumer of this method is the Session to manage its SharedSessionContractImplementor.getTransactionStartTimestamp
value. It is also expected that this be the value used for this's RegionFactory's CacheTransactionContext API Note: This "timestamp" need not be related to timestamp in the Java Date/millisecond
sense. It just needs to be an incrementing value
/**
* Generate a timestamp. This value is generally used for purpose of
* locking/unlocking cache content depending upon the access-strategy being
* used. The intended consumer of this method is the Session to manage
* its {@link SharedSessionContractImplementor#getTransactionStartTimestamp} value.
*
* It is also expected that this be the value used for this's RegionFactory's
* CacheTransactionContext
*
* @apiNote This "timestamp" need not be related to timestamp in the Java Date/millisecond
* sense. It just needs to be an incrementing value
*/
long nextTimestamp();
default long getTimeout() {
// most existing providers defined this as 60 seconds.
return 60000;
}
Create a named Region for holding domain model data
Params: - regionConfig – The user requested caching configuration for this Region
- buildingContext – Access to delegates useful in building the Region
/**
* Create a named Region for holding domain model data
*
* @param regionConfig The user requested caching configuration for this Region
* @param buildingContext Access to delegates useful in building the Region
*/
DomainDataRegion buildDomainDataRegion(
DomainDataRegionConfig regionConfig,
DomainDataRegionBuildingContext buildingContext);
QueryResultsRegion buildQueryResultsRegion(String regionName, SessionFactoryImplementor sessionFactory);
TimestampsRegion buildTimestampsRegion(String regionName, SessionFactoryImplementor sessionFactory);
}