blob: 0f8ec0bc74348ef274079b7e020cb8b12a4558a5 [file] [log] [blame]
/*
* Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.config;
/**
* Cache type persistence property values.
* The cache type defines the type of cache usage for the entities.
* Its usage depends on the memory and caching requirements of the entity.
* If no caching is desired at all the PersistenceUnitProperties.CACHE_SHARED_ should
* instead be used.
*
* <p>JPA persistence property Usage:
*
* <p>for all entities append DEFAULT suffix to CACHE_TYPE_ prefix:
* <p><code>properties.add(PersistenceUnitProperties.CACHE_TYPE_DEFAULT, CacheType.Weak);</code>
*
* <p>for a single entity append either entity name or a full class name to CACHE_TYPE_ prefix:
* <p><code>properties.add(PersistenceUnitProperties.CACHE_TYPE_ + "Employee", CacheType.Weak);</code>
* <p><code>properties.add(PersistenceUnitProperties.CACHE_TYPE_ + "my.test.Employee", CacheType.Weak);</code>
*
* <p>Values are case-insensitive.
* "" could be used instead of default value CacheType.DEFAULT.
*
* @see PersistenceUnitProperties#CACHE_SHARED_
* @see PersistenceUnitProperties#CACHE_TYPE_
*/
public class CacheType {
/**
* A Weak cache holds all objects in use by the application,
* but allows any un-referenced objects to be free to garbage collection.
* This guarantees object identity, allows optimal garbage collection, but provides little caching benefit.
*/
public static final String Weak = "Weak";
/**
* A Soft cache holds all objects read by the application,
* but allows any un-referenced objects to be free to garbage collection only when the JVM decides memory is low.
* This guarantees object identity, allows garbage collection when memory is low, and provides optimal caching benefit.
*/
public static final String Soft = "Soft";
/**
* A SoftWeak cache holds all objects in use by the application,
* and a fixed size sub-cache of MRU objects using Soft references.
* It allows any un-referenced objects not in the sub-cache to be free to garbage collection,
* and the objects in the sub-cache are free to garbage collect only when the JVM decides memory is low.
* This guarantees object identity, allows configurable garbage collection, and provides configurable caching benefit.
*/
public static final String SoftWeak = "SoftWeak";
/**
* A HardWeak cache holds all objects in use by the application,
* and a fixed size sub-cache of MRU objects using normal (hard) references.
* It allows any un-referenced objects not in the sub-cache to be free to garbage collection,
* but not objects in the sub-cache.
* This guarantees object identity, allows configurable garbage collection, and provides configurable caching benefit.
*/
public static final String HardWeak = "HardWeak";
/**
* A Soft cache holds all objects read by the application.
* It does not allow any garbage collection. *
* This guarantees object identity, allows no garbage collection, and provides complete caching benefit.
* <p>WARNING: This cache type should only be used for a fixed sized number of objects,
* otherwise it will lead to an eventual memory leak.
*/
public static final String Full = "Full";
/**
* NONE does not cache any objects.
* It allows any un-referenced objects to be free to garbage collection.
* This provides no object identity, allows complete garbage collection, and provides no caching benefit.
* <p>WARNING: This cache type should normally not be used. Instead disable the share cache through PersistenceUnitProperties.CACHE_SHARED_.
* Lack of object identity can lead to infinite loops for objects that have circular references and no indirection.
* @see PersistenceUnitProperties#CACHE_SHARED_
*/
public static final String NONE = "NONE";
/**
* The default cache type is SoftWeak.
*/
public static final String DEFAULT = SoftWeak;
}