/*
 * 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.id.enhanced;

import org.hibernate.internal.util.StringHelper;

import org.jboss.logging.Logger;

Enumeration of the standard Hibernate id generation optimizers.
Author:Steve Ebersole
/** * Enumeration of the standard Hibernate id generation optimizers. * * @author Steve Ebersole */
public enum StandardOptimizerDescriptor {
Describes the optimizer for no optimization
/** * Describes the optimizer for no optimization */
NONE( "none", NoopOptimizer.class ),
Describes the optimizer for using a custom "hilo" algorithm optimization
/** * Describes the optimizer for using a custom "hilo" algorithm optimization */
HILO( "hilo", HiLoOptimizer.class ),
Describes the optimizer for using a custom "hilo" algorithm optimization, following the legacy Hibernate hilo algorithm
/** * Describes the optimizer for using a custom "hilo" algorithm optimization, following the legacy * Hibernate hilo algorithm */
LEGACY_HILO( "legacy-hilo", LegacyHiLoAlgorithmOptimizer.class ),
Describes the optimizer for use with tables/sequences that store the chunk information. Here, specifically the hi value is stored in the database.
/** * Describes the optimizer for use with tables/sequences that store the chunk information. Here, specifically the * hi value is stored in the database. */
POOLED( "pooled", PooledOptimizer.class, true ),
Describes the optimizer for use with tables/sequences that store the chunk information. Here, specifically the lo value is stored in the database.
/** * Describes the optimizer for use with tables/sequences that store the chunk information. Here, specifically the * lo value is stored in the database. */
POOLED_LO( "pooled-lo", PooledLoOptimizer.class, true ),
Describes the optimizer for use with tables/sequences that store the chunk information. Here, specifically the lo value is stored in the database and ThreadLocal used to cache the generation state.
/** * Describes the optimizer for use with tables/sequences that store the chunk information. Here, specifically the * lo value is stored in the database and ThreadLocal used to cache the generation state. */
POOLED_LOTL( "pooled-lotl", PooledLoThreadLocalOptimizer.class, true ); private static final Logger log = Logger.getLogger( StandardOptimizerDescriptor.class ); private final String externalName; private final Class<? extends Optimizer> optimizerClass; private final boolean isPooled; StandardOptimizerDescriptor(String externalName, Class<? extends Optimizer> optimizerClass) { this( externalName, optimizerClass, false ); } StandardOptimizerDescriptor(String externalName, Class<? extends Optimizer> optimizerClass, boolean pooled) { this.externalName = externalName; this.optimizerClass = optimizerClass; this.isPooled = pooled; } public String getExternalName() { return externalName; } public Class<? extends Optimizer> getOptimizerClass() { return optimizerClass; } public boolean isPooled() { return isPooled; }
Interpret the incoming external name into the appropriate enum value
Params:
  • externalName – The external name
Returns:The corresponding enum value; if no external name is supplied, NONE is returned; if an unrecognized external name is supplied, null is returned
/** * Interpret the incoming external name into the appropriate enum value * * @param externalName The external name * * @return The corresponding enum value; if no external name is supplied, {@link #NONE} is returned; if an * unrecognized external name is supplied, {@code null} is returned */
public static StandardOptimizerDescriptor fromExternalName(String externalName) { if ( StringHelper.isEmpty( externalName ) ) { log.debug( "No optimizer specified, using NONE as default" ); return NONE; } else if ( NONE.externalName.equals( externalName ) ) { return NONE; } else if ( HILO.externalName.equals( externalName ) ) { return HILO; } else if ( LEGACY_HILO.externalName.equals( externalName ) ) { return LEGACY_HILO; } else if ( POOLED.externalName.equals( externalName ) ) { return POOLED; } else if ( POOLED_LO.externalName.equals( externalName ) ) { return POOLED_LO; } else if ( POOLED_LOTL.externalName.equals( externalName ) ) { return POOLED_LOTL; } else { log.debugf( "Unknown optimizer key [%s]; returning null assuming Optimizer impl class name", externalName ); return null; } } }