HHH-5331 - Remove reflection calls on SessionFactory for JDK 1.5 detection in relation to Statistics
git-svn-id: https://svn.jboss.org/repos/hibernate/core/trunk@20017 1b8cb986-b30d-0410-93ca-fae66ebed9b2
This commit is contained in:
parent
f0bda99d68
commit
4f34ef6907
|
@ -1,10 +1,10 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
|
||||
* Copyright (c) 2010, Red Hat Inc. or third-party contributors as
|
||||
* indicated by the @author tags or express copyright attribution
|
||||
* statements applied by the authors. All third-party contributions are
|
||||
* distributed under license by Red Hat Middleware LLC.
|
||||
* distributed under license by Red Hat Inc.
|
||||
*
|
||||
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||
|
@ -20,7 +20,6 @@
|
|||
* Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor
|
||||
* Boston, MA 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
package org.hibernate.impl;
|
||||
|
||||
|
@ -30,17 +29,16 @@ import java.io.ObjectInputStream;
|
|||
import java.io.ObjectOutputStream;
|
||||
import java.io.ObjectStreamException;
|
||||
import java.io.Serializable;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.sql.Connection;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
import java.util.LinkedHashSet;
|
||||
import javax.naming.NamingException;
|
||||
import javax.naming.Reference;
|
||||
import javax.naming.StringRefAddr;
|
||||
|
@ -50,20 +48,19 @@ import org.slf4j.Logger;
|
|||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import org.hibernate.AssertionFailure;
|
||||
import org.hibernate.Cache;
|
||||
import org.hibernate.ConnectionReleaseMode;
|
||||
import org.hibernate.EntityMode;
|
||||
import org.hibernate.EntityNameResolver;
|
||||
import org.hibernate.HibernateException;
|
||||
import org.hibernate.Interceptor;
|
||||
import org.hibernate.MappingException;
|
||||
import org.hibernate.ObjectNotFoundException;
|
||||
import org.hibernate.QueryException;
|
||||
import org.hibernate.SessionFactory;
|
||||
import org.hibernate.StatelessSession;
|
||||
import org.hibernate.SessionFactoryObserver;
|
||||
import org.hibernate.EntityNameResolver;
|
||||
import org.hibernate.Cache;
|
||||
import org.hibernate.StatelessSession;
|
||||
import org.hibernate.TypeHelper;
|
||||
import org.hibernate.tuple.entity.EntityTuplizer;
|
||||
import org.hibernate.cache.CacheKey;
|
||||
import org.hibernate.cache.CollectionRegion;
|
||||
import org.hibernate.cache.EntityRegion;
|
||||
|
@ -90,9 +87,9 @@ import org.hibernate.engine.NamedQueryDefinition;
|
|||
import org.hibernate.engine.NamedSQLQueryDefinition;
|
||||
import org.hibernate.engine.ResultSetMappingDefinition;
|
||||
import org.hibernate.engine.SessionFactoryImplementor;
|
||||
import org.hibernate.engine.profile.FetchProfile;
|
||||
import org.hibernate.engine.profile.Fetch;
|
||||
import org.hibernate.engine.profile.Association;
|
||||
import org.hibernate.engine.profile.Fetch;
|
||||
import org.hibernate.engine.profile.FetchProfile;
|
||||
import org.hibernate.engine.query.QueryPlanCache;
|
||||
import org.hibernate.engine.query.sql.NativeSQLQuerySpecification;
|
||||
import org.hibernate.event.EventListeners;
|
||||
|
@ -109,23 +106,24 @@ import org.hibernate.metadata.CollectionMetadata;
|
|||
import org.hibernate.persister.PersisterFactory;
|
||||
import org.hibernate.persister.collection.CollectionPersister;
|
||||
import org.hibernate.persister.entity.EntityPersister;
|
||||
import org.hibernate.persister.entity.Queryable;
|
||||
import org.hibernate.persister.entity.Loadable;
|
||||
import org.hibernate.persister.entity.Queryable;
|
||||
import org.hibernate.pretty.MessageHelper;
|
||||
import org.hibernate.proxy.EntityNotFoundDelegate;
|
||||
import org.hibernate.stat.ConcurrentStatisticsImpl;
|
||||
import org.hibernate.stat.Statistics;
|
||||
import org.hibernate.stat.StatisticsImpl;
|
||||
import org.hibernate.stat.StatisticsImplementor;
|
||||
import org.hibernate.tool.hbm2ddl.SchemaExport;
|
||||
import org.hibernate.tool.hbm2ddl.SchemaUpdate;
|
||||
import org.hibernate.tool.hbm2ddl.SchemaValidator;
|
||||
import org.hibernate.transaction.TransactionFactory;
|
||||
import org.hibernate.tuple.entity.EntityTuplizer;
|
||||
import org.hibernate.type.AssociationType;
|
||||
import org.hibernate.type.Type;
|
||||
import org.hibernate.type.TypeResolver;
|
||||
import org.hibernate.util.CollectionHelper;
|
||||
import org.hibernate.util.ReflectHelper;
|
||||
import org.hibernate.util.EmptyIterator;
|
||||
import org.hibernate.util.ReflectHelper;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -201,27 +199,9 @@ public final class SessionFactoryImpl implements SessionFactory, SessionFactoryI
|
|||
SessionFactoryObserver observer) throws HibernateException {
|
||||
log.info("building session factory");
|
||||
|
||||
Statistics concurrentStatistics = null;
|
||||
try {
|
||||
Class concurrentStatsClass = ReflectHelper.classForName("org.hibernate.stat.ConcurrentStatisticsImpl");
|
||||
Constructor constructor = concurrentStatsClass.getConstructor(new Class[]{SessionFactoryImplementor.class});
|
||||
concurrentStatistics = (Statistics) constructor.newInstance(new Object[]{this});
|
||||
log.trace("JDK 1.5 concurrent classes present");
|
||||
} catch ( NoClassDefFoundError noJava5 ) {
|
||||
log.trace("JDK 1.5 concurrent classes missing");
|
||||
} catch (Exception noJava5) {
|
||||
log.trace("JDK 1.5 concurrent classes missing");
|
||||
}
|
||||
|
||||
if (concurrentStatistics != null) {
|
||||
this.statistics = concurrentStatistics;
|
||||
} else {
|
||||
this.statistics = new StatisticsImpl(this);
|
||||
}
|
||||
|
||||
if ( log.isTraceEnabled() ) {
|
||||
log.trace("Statistics initialized with " + statistics.getClass().getName());
|
||||
}
|
||||
this.statistics = new ConcurrentStatisticsImpl( this );
|
||||
getStatistics().setStatisticsEnabled( settings.isStatisticsEnabled() );
|
||||
log.debug( "Statistics initialized [enabled={}]}", settings.isStatisticsEnabled() );
|
||||
|
||||
this.properties = new Properties();
|
||||
this.properties.putAll( cfg.getProperties() );
|
||||
|
@ -444,9 +424,6 @@ public final class SessionFactoryImpl implements SessionFactory, SessionFactoryI
|
|||
}
|
||||
}
|
||||
|
||||
//stats
|
||||
getStatistics().setStatisticsEnabled( settings.isStatisticsEnabled() );
|
||||
|
||||
// EntityNotFoundDelegate
|
||||
EntityNotFoundDelegate entityNotFoundDelegate = cfg.getEntityNotFoundDelegate();
|
||||
if ( entityNotFoundDelegate == null ) {
|
||||
|
|
|
@ -36,7 +36,10 @@ import org.hibernate.util.ArrayHelper;
|
|||
* @see org.hibernate.stat.Statistics
|
||||
*
|
||||
* @author Gavin King
|
||||
*
|
||||
* @deprecated Use {@link org.hibernate.stat.ConcurrentStatisticsImpl} instead
|
||||
*/
|
||||
@Deprecated
|
||||
public class StatisticsImpl implements Statistics, StatisticsImplementor {
|
||||
|
||||
//TODO: we should provide some way to get keys of collection of statistics to make it easier to retrieve from a GUI perspective
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
|
||||
* Copyright (c) 2010, Red Hat Inc. or third-party contributors as
|
||||
* indicated by the @author tags or express copyright attribution
|
||||
* statements applied by the authors. All third-party contributions are
|
||||
* distributed under license by Red Hat Middleware LLC.
|
||||
* distributed under license by Red Hat Inc.
|
||||
*
|
||||
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||
|
@ -20,39 +20,185 @@
|
|||
* Free Software Foundation, Inc.
|
||||
* 51 Franklin Street, Fifth Floor
|
||||
* Boston, MA 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
package org.hibernate.stat;
|
||||
|
||||
/**
|
||||
* Statistics SPI for the Hibernate core
|
||||
* Statistics SPI for the Hibernate core. This is essentially the "statistic collector" API, its the contract
|
||||
* called to collect various stats.
|
||||
*
|
||||
* @author Emmanuel Bernard
|
||||
*/
|
||||
public interface StatisticsImplementor {
|
||||
/**
|
||||
* Callback about a session being opened.
|
||||
*/
|
||||
public void openSession();
|
||||
|
||||
/**
|
||||
* Callback about a session being closed.
|
||||
*/
|
||||
public void closeSession();
|
||||
|
||||
/**
|
||||
* Callback about a flush occurring
|
||||
*/
|
||||
public void flush();
|
||||
|
||||
/**
|
||||
* Callback about a connection being obtained from {@link org.hibernate.connection.ConnectionProvider}
|
||||
*/
|
||||
public void connect();
|
||||
public void loadEntity(String entityName);
|
||||
public void fetchEntity(String entityName);
|
||||
public void updateEntity(String entityName);
|
||||
public void insertEntity(String entityName);
|
||||
public void deleteEntity(String entityName);
|
||||
public void loadCollection(String role);
|
||||
public void fetchCollection(String role);
|
||||
public void updateCollection(String role);
|
||||
public void recreateCollection(String role);
|
||||
public void removeCollection(String role);
|
||||
public void secondLevelCachePut(String regionName);
|
||||
public void secondLevelCacheHit(String regionName);
|
||||
public void secondLevelCacheMiss(String regionName);
|
||||
public void queryExecuted(String hql, int rows, long time);
|
||||
public void queryCacheHit(String hql, String regionName);
|
||||
public void queryCacheMiss(String hql, String regionName);
|
||||
public void queryCachePut(String hql, String regionName);
|
||||
public void endTransaction(boolean success);
|
||||
public void closeStatement();
|
||||
|
||||
/**
|
||||
* Callback about a statement being prepared.
|
||||
*/
|
||||
public void prepareStatement();
|
||||
|
||||
/**
|
||||
* Callback about a statement being closed.
|
||||
*/
|
||||
public void closeStatement();
|
||||
|
||||
/**
|
||||
* Callback about a transaction completing.
|
||||
*
|
||||
* @param success Was the transaction successful?
|
||||
*/
|
||||
public void endTransaction(boolean success);
|
||||
|
||||
/**
|
||||
* Callback about an entity being loaded. This might indicate a proxy or a fully initialized entity, but in either
|
||||
* case it means without a separate SQL query being needed.
|
||||
*
|
||||
* @param entityName The name of the entity loaded.
|
||||
*/
|
||||
public void loadEntity(String entityName);
|
||||
|
||||
/**
|
||||
* Callback about an entity being fetched. Unlike {@link #loadEntity} this indicates a separate query being
|
||||
* performed.
|
||||
*
|
||||
* @param entityName The name of the entity fetched.
|
||||
*/
|
||||
public void fetchEntity(String entityName);
|
||||
|
||||
/**
|
||||
* Callback about an entity being updated.
|
||||
*
|
||||
* @param entityName The name of the entity updated.
|
||||
*/
|
||||
public void updateEntity(String entityName);
|
||||
|
||||
/**
|
||||
* Callback about an entity being inserted
|
||||
*
|
||||
* @param entityName The name of the entity inserted
|
||||
*/
|
||||
public void insertEntity(String entityName);
|
||||
|
||||
/**
|
||||
* Callback about an entity being deleted.
|
||||
*
|
||||
* @param entityName The name of the entity deleted.
|
||||
*/
|
||||
public void deleteEntity(String entityName);
|
||||
|
||||
/**
|
||||
* Callback about an optimistic lock failure on an entity
|
||||
*
|
||||
* @param entityName The name of the entity.
|
||||
*/
|
||||
public void optimisticFailure(String entityName);
|
||||
|
||||
/**
|
||||
* Callback about a collection loading. This might indicate a lazy collection or an initialized collection being
|
||||
* created, but in either case it means without a separate SQL query being needed.
|
||||
*
|
||||
* @param role The collection role.
|
||||
*/
|
||||
public void loadCollection(String role);
|
||||
|
||||
/**
|
||||
* Callback to indicate a collection being fetched. Unlike {@link #loadCollection}, this indicates a separate
|
||||
* query was needed.
|
||||
*
|
||||
* @param role The collection role.
|
||||
*/
|
||||
public void fetchCollection(String role);
|
||||
|
||||
/**
|
||||
* Callback indicating a collection was updated.
|
||||
*
|
||||
* @param role The collection role.
|
||||
*/
|
||||
public void updateCollection(String role);
|
||||
|
||||
/**
|
||||
* Callback indicating a collection recreation (full deletion + full (re-)insertion).
|
||||
*
|
||||
* @param role The collection role.
|
||||
*/
|
||||
public void recreateCollection(String role);
|
||||
|
||||
/**
|
||||
* Callback indicating a collection removal.
|
||||
*
|
||||
* @param role The collection role.
|
||||
*/
|
||||
public void removeCollection(String role);
|
||||
|
||||
/**
|
||||
* Callback indicating a put into second level cache.
|
||||
*
|
||||
* @param regionName The name of the cache region
|
||||
*/
|
||||
public void secondLevelCachePut(String regionName);
|
||||
|
||||
/**
|
||||
* Callback indicating a get from second level cache resulted in a hit.
|
||||
*
|
||||
* @param regionName The name of the cache region
|
||||
*/
|
||||
public void secondLevelCacheHit(String regionName);
|
||||
|
||||
/**
|
||||
* Callback indicating a get from second level cache resulted in a miss.
|
||||
*
|
||||
* @param regionName The name of the cache region
|
||||
*/
|
||||
public void secondLevelCacheMiss(String regionName);
|
||||
|
||||
/**
|
||||
* Callback indicating a put into the query cache.
|
||||
*
|
||||
* @param hql The query
|
||||
* @param regionName The cache region
|
||||
*/
|
||||
public void queryCachePut(String hql, String regionName);
|
||||
|
||||
/**
|
||||
* Callback indicating a get from the query cache resulted in a hit.
|
||||
*
|
||||
* @param hql The query
|
||||
* @param regionName The name of the cache region
|
||||
*/
|
||||
public void queryCacheHit(String hql, String regionName);
|
||||
|
||||
/**
|
||||
* Callback indicating a get from the query cache resulted in a miss.
|
||||
*
|
||||
* @param hql The query
|
||||
* @param regionName The name of the cache region
|
||||
*/
|
||||
public void queryCacheMiss(String hql, String regionName);
|
||||
|
||||
/**
|
||||
* Callback indicating execution of a sql/hql query
|
||||
*
|
||||
* @param hql The query
|
||||
* @param rows Number of rows returned
|
||||
* @param time execution time
|
||||
*/
|
||||
public void queryExecuted(String hql, int rows, long time);
|
||||
}
|
Loading…
Reference in New Issue