All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hibernate.cfg.Environment Maven / Gradle / Ivy

There is a newer version: 6.6.2.Final
Show newest version
/*
 * 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 .
 */
package org.hibernate.cfg;

import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import java.util.Properties;

import org.hibernate.HibernateException;
import org.hibernate.Version;
import org.hibernate.bytecode.spi.BytecodeProvider;
import org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator;
import org.hibernate.internal.CoreMessageLogger;
import org.hibernate.internal.log.UnsupportedLogger;
import org.hibernate.internal.util.ConfigHelper;
import org.hibernate.internal.util.config.ConfigurationHelper;

import org.jboss.logging.Logger;


/**
 * Provides access to configuration info passed in Properties objects.
 * 

* Hibernate has two property scopes: *
    *
  • Factory-level properties may be passed to the SessionFactory when it * is instantiated. Each instance might have different property values. If no * properties are specified, the factory calls Environment.getProperties(). *
  • System-level properties are shared by all factory instances and are always * determined by the Environment properties. *
* The only system-level properties are *
    *
  • hibernate.jdbc.use_streams_for_binary *
  • hibernate.cglib.use_reflection_optimizer *
* Environment properties are populated by calling System.getProperties() * and then from a resource named /hibernate.properties if it exists. System * properties override properties specified in hibernate.properties.
*
* The SessionFactory is controlled by the following properties. * Properties may be either be System properties, properties * defined in a resource named /hibernate.properties or an instance of * java.util.Properties passed to * Configuration.build()
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
propertymeaning
hibernate.dialectclassname of org.hibernate.dialect.Dialect subclass
hibernate.connection.provider_classclassname of ConnectionProvider * subclass (if not specified heuristics are used)
hibernate.connection.usernamedatabase username
hibernate.connection.passworddatabase password
hibernate.connection.urlJDBC URL (when using java.sql.DriverManager)
hibernate.connection.driver_classclassname of JDBC driver
hibernate.connection.isolationJDBC transaction isolation level (only when using * java.sql.DriverManager) *
hibernate.connection.pool_sizethe maximum size of the connection pool (only when using * java.sql.DriverManager) *
hibernate.connection.datasourcedatasource JNDI name (when using javax.sql.Datasource)
hibernate.jndi.urlJNDI InitialContext URL
hibernate.jndi.classJNDI InitialContext classname
hibernate.max_fetch_depthmaximum depth of outer join fetching
hibernate.jdbc.batch_sizeenable use of JDBC2 batch API for drivers which support it
hibernate.jdbc.fetch_sizeset the JDBC fetch size
hibernate.jdbc.use_scrollable_resultsetenable use of JDBC2 scrollable resultsets (you only need to specify * this property when using user supplied connections)
hibernate.jdbc.use_getGeneratedKeysenable use of JDBC3 PreparedStatement.getGeneratedKeys() to retrieve * natively generated keys after insert. Requires JDBC3+ driver and JRE1.4+
hibernate.hbm2ddl.autoenable auto DDL export
hibernate.default_schemause given schema name for unqualified tables (always optional)
hibernate.default_cataloguse given catalog name for unqualified tables (always optional)
hibernate.session_factory_nameIf set, the factory attempts to bind this name to itself in the * JNDI context. This name is also used to support cross JVM * Session (de)serialization.
hibernate.transaction.jta.platformclassname of org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform * implementor
hibernate.transaction.factory_classthe factory to use for instantiating Transactions. * (Defaults to JdbcTransactionFactory.)
hibernate.query.substitutionsquery language token substitutions
* * @see org.hibernate.SessionFactory * @author Gavin King */ public final class Environment implements AvailableSettings { private static final CoreMessageLogger LOG = Logger.getMessageLogger( CoreMessageLogger.class, Environment.class.getName()); private static final BytecodeProvider BYTECODE_PROVIDER_INSTANCE; private static final boolean ENABLE_BINARY_STREAMS; private static final boolean ENABLE_REFLECTION_OPTIMIZER; private static final boolean ENABLE_LEGACY_PROXY_CLASSNAMES; private static final Properties GLOBAL_PROPERTIES; /** * No longer effective. * * @param configurationValues The specified properties. * @deprecated without replacement. Such verification is best done ad hoc, case by case. */ @Deprecated public static void verifyProperties(Map configurationValues) { //Obsolete and Renamed properties are no longer handled here } static { Version.logVersion(); GLOBAL_PROPERTIES = new Properties(); //Set USE_REFLECTION_OPTIMIZER to false to fix HHH-227 GLOBAL_PROPERTIES.setProperty( USE_REFLECTION_OPTIMIZER, Boolean.FALSE.toString() ); try { InputStream stream = ConfigHelper.getResourceAsStream( "/hibernate.properties" ); try { GLOBAL_PROPERTIES.load(stream); LOG.propertiesLoaded( ConfigurationHelper.maskOut( GLOBAL_PROPERTIES, PASS ) ); } catch (Exception e) { LOG.unableToLoadProperties(); } finally { try{ stream.close(); } catch (IOException ioe){ LOG.unableToCloseStreamError( ioe ); } } } catch (HibernateException he) { LOG.propertiesNotFound(); } try { Properties systemProperties = System.getProperties(); // Must be thread-safe in case an application changes System properties during Hibernate initialization. // See HHH-8383. synchronized (systemProperties) { GLOBAL_PROPERTIES.putAll(systemProperties); } } catch (SecurityException se) { LOG.unableToCopySystemProperties(); } ENABLE_BINARY_STREAMS = ConfigurationHelper.getBoolean(USE_STREAMS_FOR_BINARY, GLOBAL_PROPERTIES); if ( ENABLE_BINARY_STREAMS ) { LOG.usingStreams(); } ENABLE_REFLECTION_OPTIMIZER = ConfigurationHelper.getBoolean(USE_REFLECTION_OPTIMIZER, GLOBAL_PROPERTIES); if ( ENABLE_REFLECTION_OPTIMIZER ) { LOG.usingReflectionOptimizer(); } ENABLE_LEGACY_PROXY_CLASSNAMES = ConfigurationHelper.getBoolean( ENFORCE_LEGACY_PROXY_CLASSNAMES, GLOBAL_PROPERTIES ); if ( ENABLE_LEGACY_PROXY_CLASSNAMES ) { final UnsupportedLogger unsupportedLogger = Logger.getMessageLogger( UnsupportedLogger.class, Environment.class.getName() ); unsupportedLogger.usingLegacyClassnamesForProxies(); } BYTECODE_PROVIDER_INSTANCE = buildBytecodeProvider( GLOBAL_PROPERTIES ); } /** * This will be removed soon; currently just returns false as no known JVM exhibits this bug * and is also able to run this version of Hibernate ORM. * @deprecated removed as unnecessary * @return false */ @Deprecated public static boolean jvmHasTimestampBug() { return false; } /** * Should we use streams to bind binary types to JDBC IN parameters? * * @return True if streams should be used for binary data handling; false otherwise. * * @see #USE_STREAMS_FOR_BINARY * * @deprecated Deprecated to indicate that the method will be moved to * {@link org.hibernate.boot.spi.SessionFactoryOptions} / * {@link org.hibernate.boot.SessionFactoryBuilder} - probably in 6.0. * See HHH-12194 and * HHH-12193 for details */ @Deprecated public static boolean useStreamsForBinary() { return ENABLE_BINARY_STREAMS; } /** * Should we use reflection optimization? * * @return True if reflection optimization should be used; false otherwise. * * @see #USE_REFLECTION_OPTIMIZER * @see #getBytecodeProvider() * @see BytecodeProvider#getReflectionOptimizer * * @deprecated Deprecated to indicate that the method will be moved to * {@link org.hibernate.boot.spi.SessionFactoryOptions} / * {@link org.hibernate.boot.SessionFactoryBuilder} - probably in 6.0. * See HHH-12194 and * HHH-12193 for details */ @Deprecated public static boolean useReflectionOptimizer() { return ENABLE_REFLECTION_OPTIMIZER; } /** * @deprecated Deprecated to indicate that the method will be moved to * {@link org.hibernate.boot.spi.SessionFactoryOptions} / * {@link org.hibernate.boot.SessionFactoryBuilder} - probably in 6.0. * See HHH-12194 and * HHH-12193 for details */ @Deprecated public static BytecodeProvider getBytecodeProvider() { return BYTECODE_PROVIDER_INSTANCE; } /** * @return True if global option org.hibernate.cfg.AvailableSettings#ENFORCE_LEGACY_PROXY_CLASSNAMES was enabled * @deprecated This option will be removed soon and should not be relied on. */ @Deprecated public static boolean useLegacyProxyClassnames() { return ENABLE_LEGACY_PROXY_CLASSNAMES; } /** * Disallow instantiation */ private Environment() { throw new UnsupportedOperationException(); } /** * Return System properties, extended by any properties specified * in hibernate.properties. * @return Properties */ public static Properties getProperties() { Properties copy = new Properties(); copy.putAll(GLOBAL_PROPERTIES); return copy; } /** * @deprecated Use {@link ConnectionProviderInitiator#toIsolationNiceName} instead */ @Deprecated public static String isolationLevelToString(int isolation) { return ConnectionProviderInitiator.toIsolationNiceName( isolation ); } public static final String BYTECODE_PROVIDER_NAME_JAVASSIST = "javassist"; public static final String BYTECODE_PROVIDER_NAME_BYTEBUDDY = "bytebuddy"; public static final String BYTECODE_PROVIDER_NAME_NONE = "none"; public static final String BYTECODE_PROVIDER_NAME_DEFAULT = BYTECODE_PROVIDER_NAME_BYTEBUDDY; public static BytecodeProvider buildBytecodeProvider(Properties properties) { String provider = ConfigurationHelper.getString( BYTECODE_PROVIDER, properties, BYTECODE_PROVIDER_NAME_DEFAULT ); return buildBytecodeProvider( provider ); } private static BytecodeProvider buildBytecodeProvider(String providerName) { if ( BYTECODE_PROVIDER_NAME_NONE.equals( providerName ) ) { return new org.hibernate.bytecode.internal.none.BytecodeProviderImpl(); } if ( BYTECODE_PROVIDER_NAME_BYTEBUDDY.equals( providerName ) ) { return new org.hibernate.bytecode.internal.bytebuddy.BytecodeProviderImpl(); } if ( BYTECODE_PROVIDER_NAME_JAVASSIST.equals( providerName ) ) { LOG.warnUsingJavassistBytecodeProviderIsDeprecated(); return new org.hibernate.bytecode.internal.javassist.BytecodeProviderImpl(); } LOG.bytecodeProvider( providerName ); // there is no need to support plugging in a custom BytecodeProvider via FQCN: // - the static helper methods on this class are deprecated // - it's possible to plug a custom BytecodeProvider directly into the ServiceRegistry // // This also allows integrators to inject a BytecodeProvider instance which has some // state; particularly useful to inject proxy definitions which have been prepared in // advance. // See also https://hibernate.atlassian.net/browse/HHH-13804 and how this was solved in // Quarkus. LOG.unknownBytecodeProvider( providerName, BYTECODE_PROVIDER_NAME_DEFAULT ); return new org.hibernate.bytecode.internal.bytebuddy.BytecodeProviderImpl(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy