/******************************************************************************* * Copyright (c) 1998, 2015 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 v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Gordon Yorke - ER 214661 - VM Managed Entity Detachment ******************************************************************************/ package org.eclipse.persistence.config; /** * <b>Purpose:</b> This class is a configuration property used to specify * What type of Referenes EclipseLink will use when referencing Entities * within the Persistence Context / UnitOfWork. Depending on the configured * ReferenceMode some Entities may be garbage collected. * * @author Gordon * */ public enum ReferenceMode { /** * References to Objects will be through hard references. These objects will not be available for * garbage collection until the referencing artifact (usually a Persistence Context or UnitOfWork) * released or closed. */ HARD, /** * References to Objects that support active attribute change tracking * (enabled through weaving or by the developer)will be held by weak * references. This means any of afore mentioned objects no longer referenced directly or * indirectly will be available for garbage collection. If the object is * gc'd before the EM/UnitOfWork flushes to the database then this object * and any others like it will not be checked for changes. When a change is * made to a change tracked object that object is moved to a hard reference * and will not be available for GC until flushed. New and removed objects * are also held by hard references. Non change tracked objects will always * be held by "hard" references and are not available for GC. This is the * default mode for EclipsLink. See: * {@link java.lang.ref.WeakReference} * {@link org.eclipse.persistence.descriptors.changetracking.AttributeChangeTrackingPolicy} */ WEAK, /** * Same as weak reference except Objects that can not be changed * tracked (Deferred Change Detection) will not be prevented from being * garbage collected. This may result in a loss of changes if a changed object * is removed before being flushed to the database. * When a change is made to a change tracked object that object * is moved to a hard reference and will not be available for GC until * flushed. New and removed objects are also held by hard references until * flush.. */ FORCE_WEAK }