⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 settingsfactory.java

📁 一个Java持久层类库
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
//$Id: SettingsFactory.java 11402 2007-04-11 14:24:35Z steve.ebersole@jboss.com $package org.hibernate.cfg;import java.io.Serializable;import java.lang.reflect.Method;import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Map;import java.util.Properties;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.hibernate.ConnectionReleaseMode;import org.hibernate.EntityMode;import org.hibernate.HibernateException;import org.hibernate.bytecode.BytecodeProvider;import org.hibernate.cache.QueryCacheFactory;import org.hibernate.cache.RegionFactory;import org.hibernate.cache.impl.NoCachingRegionFactory;import org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge;import org.hibernate.connection.ConnectionProvider;import org.hibernate.connection.ConnectionProviderFactory;import org.hibernate.dialect.Dialect;import org.hibernate.dialect.DialectFactory;import org.hibernate.exception.SQLExceptionConverter;import org.hibernate.exception.SQLExceptionConverterFactory;import org.hibernate.hql.QueryTranslatorFactory;import org.hibernate.jdbc.BatcherFactory;import org.hibernate.jdbc.BatchingBatcherFactory;import org.hibernate.jdbc.NonBatchingBatcherFactory;import org.hibernate.jdbc.util.SQLStatementLogger;import org.hibernate.transaction.TransactionFactory;import org.hibernate.transaction.TransactionFactoryFactory;import org.hibernate.transaction.TransactionManagerLookup;import org.hibernate.transaction.TransactionManagerLookupFactory;import org.hibernate.util.PropertiesHelper;import org.hibernate.util.ReflectHelper;import org.hibernate.util.StringHelper;/** * Reads configuration properties and configures a <tt>Settings</tt> instance. * * @author Gavin King */public class SettingsFactory implements Serializable {	public static final String DEF_CACHE_REG_FACTORY = NoCachingRegionFactory.class.getName();	private static final Logger log = LoggerFactory.getLogger(SettingsFactory.class);	protected SettingsFactory() {	}		public Settings buildSettings(Properties props) {		Settings settings = new Settings();				//SessionFactory name:				String sessionFactoryName = props.getProperty(Environment.SESSION_FACTORY_NAME);		settings.setSessionFactoryName(sessionFactoryName);		//JDBC and connection settings:		ConnectionProvider connections = createConnectionProvider(props);		settings.setConnectionProvider(connections);		//Interrogate JDBC metadata		String databaseName = null;		int databaseMajorVersion = 0;		boolean metaSupportsScrollable = false;		boolean metaSupportsGetGeneratedKeys = false;		boolean metaSupportsBatchUpdates = false;		boolean metaReportsDDLCausesTxnCommit = false;		boolean metaReportsDDLInTxnSupported = true;		// 'hibernate.temp.use_jdbc_metadata_defaults' is a temporary magic value.		// The need for it is intended to be alleviated with 3.3 developement, thus it is		// not defined as an Environment constant...		// it is used to control whether we should consult the JDBC metadata to determine		// certain Settings default values; it is useful to *not* do this when the database		// may not be available (mainly in tools usage).		boolean useJdbcMetadata = PropertiesHelper.getBoolean( "hibernate.temp.use_jdbc_metadata_defaults", props, true );		if ( useJdbcMetadata ) {			try {				Connection conn = connections.getConnection();				try {					DatabaseMetaData meta = conn.getMetaData();					databaseName = meta.getDatabaseProductName();					databaseMajorVersion = getDatabaseMajorVersion(meta);					log.info("RDBMS: " + databaseName + ", version: " + meta.getDatabaseProductVersion() );					log.info("JDBC driver: " + meta.getDriverName() + ", version: " + meta.getDriverVersion() );					metaSupportsScrollable = meta.supportsResultSetType(ResultSet.TYPE_SCROLL_INSENSITIVE);					metaSupportsBatchUpdates = meta.supportsBatchUpdates();					metaReportsDDLCausesTxnCommit = meta.dataDefinitionCausesTransactionCommit();					metaReportsDDLInTxnSupported = !meta.dataDefinitionIgnoredInTransactions();					if ( Environment.jvmSupportsGetGeneratedKeys() ) {						try {							Boolean result = (Boolean) DatabaseMetaData.class.getMethod("supportsGetGeneratedKeys", null)								.invoke(meta, null);							metaSupportsGetGeneratedKeys = result.booleanValue();						}						catch (AbstractMethodError ame) {							metaSupportsGetGeneratedKeys = false;						}						catch (Exception e) {							metaSupportsGetGeneratedKeys = false;						}					}				}				finally {					connections.closeConnection(conn);				}			}			catch (SQLException sqle) {				log.warn("Could not obtain connection metadata", sqle);			}			catch (UnsupportedOperationException uoe) {				// user supplied JDBC connections			}		}		settings.setDataDefinitionImplicitCommit( metaReportsDDLCausesTxnCommit );		settings.setDataDefinitionInTransactionSupported( metaReportsDDLInTxnSupported );		//SQL Dialect:		Dialect dialect = determineDialect( props, databaseName, databaseMajorVersion );		settings.setDialect(dialect);				//use dialect default properties		final Properties properties = new Properties();		properties.putAll( dialect.getDefaultProperties() );		properties.putAll(props);				// Transaction settings:				TransactionFactory transactionFactory = createTransactionFactory(properties);		settings.setTransactionFactory(transactionFactory);		settings.setTransactionManagerLookup( createTransactionManagerLookup(properties) );		boolean flushBeforeCompletion = PropertiesHelper.getBoolean(Environment.FLUSH_BEFORE_COMPLETION, properties);		log.info("Automatic flush during beforeCompletion(): " + enabledDisabled(flushBeforeCompletion) );		settings.setFlushBeforeCompletionEnabled(flushBeforeCompletion);		boolean autoCloseSession = PropertiesHelper.getBoolean(Environment.AUTO_CLOSE_SESSION, properties);		log.info("Automatic session close at end of transaction: " + enabledDisabled(autoCloseSession) );		settings.setAutoCloseSessionEnabled(autoCloseSession);		//JDBC and connection settings:		int batchSize = PropertiesHelper.getInt(Environment.STATEMENT_BATCH_SIZE, properties, 0);		if ( !metaSupportsBatchUpdates ) batchSize = 0;		if (batchSize>0) log.info("JDBC batch size: " + batchSize);		settings.setJdbcBatchSize(batchSize);		boolean jdbcBatchVersionedData = PropertiesHelper.getBoolean(Environment.BATCH_VERSIONED_DATA, properties, false);		if (batchSize>0) log.info("JDBC batch updates for versioned data: " + enabledDisabled(jdbcBatchVersionedData) );		settings.setJdbcBatchVersionedData(jdbcBatchVersionedData);		settings.setBatcherFactory( createBatcherFactory(properties, batchSize) );				boolean useScrollableResultSets = PropertiesHelper.getBoolean(Environment.USE_SCROLLABLE_RESULTSET, properties, metaSupportsScrollable);		log.info("Scrollable result sets: " + enabledDisabled(useScrollableResultSets) );		settings.setScrollableResultSetsEnabled(useScrollableResultSets);		boolean wrapResultSets = PropertiesHelper.getBoolean(Environment.WRAP_RESULT_SETS, properties, false);		log.debug( "Wrap result sets: " + enabledDisabled(wrapResultSets) );		settings.setWrapResultSetsEnabled(wrapResultSets);		boolean useGetGeneratedKeys = PropertiesHelper.getBoolean(Environment.USE_GET_GENERATED_KEYS, properties, metaSupportsGetGeneratedKeys);		log.info("JDBC3 getGeneratedKeys(): " + enabledDisabled(useGetGeneratedKeys) );		settings.setGetGeneratedKeysEnabled(useGetGeneratedKeys);		Integer statementFetchSize = PropertiesHelper.getInteger(Environment.STATEMENT_FETCH_SIZE, properties);		if (statementFetchSize!=null) log.info("JDBC result set fetch size: " + statementFetchSize);		settings.setJdbcFetchSize(statementFetchSize);		String releaseModeName = PropertiesHelper.getString( Environment.RELEASE_CONNECTIONS, properties, "auto" );		log.info( "Connection release mode: " + releaseModeName );		ConnectionReleaseMode releaseMode;		if ( "auto".equals(releaseModeName) ) {			releaseMode = transactionFactory.getDefaultReleaseMode();		}		else {			releaseMode = ConnectionReleaseMode.parse( releaseModeName );			if ( releaseMode == ConnectionReleaseMode.AFTER_STATEMENT && !connections.supportsAggressiveRelease() ) {				log.warn( "Overriding release mode as connection provider does not support 'after_statement'" );				releaseMode = ConnectionReleaseMode.AFTER_TRANSACTION;			}		}		settings.setConnectionReleaseMode( releaseMode );		//SQL Generation settings:		String defaultSchema = properties.getProperty(Environment.DEFAULT_SCHEMA);		String defaultCatalog = properties.getProperty(Environment.DEFAULT_CATALOG);		if (defaultSchema!=null) log.info("Default schema: " + defaultSchema);		if (defaultCatalog!=null) log.info("Default catalog: " + defaultCatalog);		settings.setDefaultSchemaName(defaultSchema);		settings.setDefaultCatalogName(defaultCatalog);		Integer maxFetchDepth = PropertiesHelper.getInteger(Environment.MAX_FETCH_DEPTH, properties);		if (maxFetchDepth!=null) log.info("Maximum outer join fetch depth: " + maxFetchDepth);		settings.setMaximumFetchDepth(maxFetchDepth);		int batchFetchSize = PropertiesHelper.getInt(Environment.DEFAULT_BATCH_FETCH_SIZE, properties, 1);		log.info("Default batch fetch size: " + batchFetchSize);		settings.setDefaultBatchFetchSize(batchFetchSize);		boolean comments = PropertiesHelper.getBoolean(Environment.USE_SQL_COMMENTS, properties);		log.info( "Generate SQL with comments: " + enabledDisabled(comments) );		settings.setCommentsEnabled(comments);				boolean orderUpdates = PropertiesHelper.getBoolean(Environment.ORDER_UPDATES, properties);		log.info( "Order SQL updates by primary key: " + enabledDisabled(orderUpdates) );		settings.setOrderUpdatesEnabled(orderUpdates);		boolean orderInserts = PropertiesHelper.getBoolean(Environment.ORDER_INSERTS, properties);		log.info( "Order SQL inserts for batching: " + enabledDisabled( orderInserts ) );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -