HHH-5765 : Wire in connection provider from service registry
This commit is contained in:
parent
de1d2a6247
commit
88543c7a58
|
@ -929,7 +929,7 @@ public interface Session extends Serializable {
|
||||||
* <p/>
|
* <p/>
|
||||||
* Note that disconnect() called on a session where the connection was
|
* Note that disconnect() called on a session where the connection was
|
||||||
* retrieved by Hibernate through its configured
|
* retrieved by Hibernate through its configured
|
||||||
* {@link org.hibernate.connection.ConnectionProvider} has no effect,
|
* {@link org.hibernate.service.jdbc.connections.spi.ConnectionProvider} has no effect,
|
||||||
* provided {@link ConnectionReleaseMode#ON_CLOSE} is not in effect.
|
* provided {@link ConnectionReleaseMode#ON_CLOSE} is not in effect.
|
||||||
*
|
*
|
||||||
* @return the application-supplied connection or <tt>null</tt>
|
* @return the application-supplied connection or <tt>null</tt>
|
||||||
|
|
|
@ -57,7 +57,7 @@ public interface SessionFactory extends Referenceable, Serializable {
|
||||||
* Open a {@link Session}.
|
* Open a {@link Session}.
|
||||||
* <p/>
|
* <p/>
|
||||||
* JDBC {@link Connection connection(s} will be obtained from the
|
* JDBC {@link Connection connection(s} will be obtained from the
|
||||||
* configured {@link org.hibernate.connection.ConnectionProvider} as needed
|
* configured {@link org.hibernate.service.jdbc.connections.spi.ConnectionProvider} as needed
|
||||||
* to perform requested work.
|
* to perform requested work.
|
||||||
*
|
*
|
||||||
* @return The created session.
|
* @return The created session.
|
||||||
|
@ -70,7 +70,7 @@ public interface SessionFactory extends Referenceable, Serializable {
|
||||||
* Open a {@link Session}, utilizing the specified {@link Interceptor}.
|
* Open a {@link Session}, utilizing the specified {@link Interceptor}.
|
||||||
* <p/>
|
* <p/>
|
||||||
* JDBC {@link Connection connection(s} will be obtained from the
|
* JDBC {@link Connection connection(s} will be obtained from the
|
||||||
* configured {@link org.hibernate.connection.ConnectionProvider} as needed
|
* configured {@link org.hibernate.service.jdbc.connections.spi.ConnectionProvider} as needed
|
||||||
* to perform requested work.
|
* to perform requested work.
|
||||||
*
|
*
|
||||||
* @param interceptor a session-scoped interceptor
|
* @param interceptor a session-scoped interceptor
|
||||||
|
@ -87,7 +87,7 @@ public interface SessionFactory extends Referenceable, Serializable {
|
||||||
* Note that the second-level cache will be disabled if you supply a JDBC
|
* Note that the second-level cache will be disabled if you supply a JDBC
|
||||||
* connection. Hibernate will not be able to track any statements you might
|
* connection. Hibernate will not be able to track any statements you might
|
||||||
* have executed in the same transaction. Consider implementing your own
|
* have executed in the same transaction. Consider implementing your own
|
||||||
* {@link org.hibernate.connection.ConnectionProvider} instead as a highly
|
* {@link org.hibernate.service.jdbc.connections.spi.ConnectionProvider} instead as a highly
|
||||||
* recommended alternative.
|
* recommended alternative.
|
||||||
*
|
*
|
||||||
* @param connection a connection provided by the application.
|
* @param connection a connection provided by the application.
|
||||||
|
@ -103,7 +103,7 @@ public interface SessionFactory extends Referenceable, Serializable {
|
||||||
* Note that the second-level cache will be disabled if you supply a JDBC
|
* Note that the second-level cache will be disabled if you supply a JDBC
|
||||||
* connection. Hibernate will not be able to track any statements you might
|
* connection. Hibernate will not be able to track any statements you might
|
||||||
* have executed in the same transaction. Consider implementing your own
|
* have executed in the same transaction. Consider implementing your own
|
||||||
* {@link org.hibernate.connection.ConnectionProvider} instead as a highly
|
* {@link org.hibernate.service.jdbc.connections.spi.ConnectionProvider} instead as a highly
|
||||||
* recommended alternative.
|
* recommended alternative.
|
||||||
*
|
*
|
||||||
* @param connection a connection provided by the application.
|
* @param connection a connection provided by the application.
|
||||||
|
|
|
@ -74,10 +74,6 @@ public class AnnotationConfiguration extends Configuration {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public AnnotationConfiguration(SettingsFactory sf) {
|
|
||||||
super( sf );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -94,6 +94,7 @@ import org.hibernate.engine.Mapping;
|
||||||
import org.hibernate.engine.NamedQueryDefinition;
|
import org.hibernate.engine.NamedQueryDefinition;
|
||||||
import org.hibernate.engine.NamedSQLQueryDefinition;
|
import org.hibernate.engine.NamedSQLQueryDefinition;
|
||||||
import org.hibernate.engine.ResultSetMappingDefinition;
|
import org.hibernate.engine.ResultSetMappingDefinition;
|
||||||
|
import org.hibernate.engine.jdbc.spi.JdbcServices;
|
||||||
import org.hibernate.event.AutoFlushEventListener;
|
import org.hibernate.event.AutoFlushEventListener;
|
||||||
import org.hibernate.event.DeleteEventListener;
|
import org.hibernate.event.DeleteEventListener;
|
||||||
import org.hibernate.event.DirtyCheckEventListener;
|
import org.hibernate.event.DirtyCheckEventListener;
|
||||||
|
@ -151,6 +152,8 @@ import org.hibernate.mapping.TypeDef;
|
||||||
import org.hibernate.mapping.UniqueKey;
|
import org.hibernate.mapping.UniqueKey;
|
||||||
import org.hibernate.proxy.EntityNotFoundDelegate;
|
import org.hibernate.proxy.EntityNotFoundDelegate;
|
||||||
import org.hibernate.secure.JACCConfiguration;
|
import org.hibernate.secure.JACCConfiguration;
|
||||||
|
import org.hibernate.service.spi.ServicesRegistry;
|
||||||
|
import org.hibernate.service.jdbc.connections.spi.ConnectionProvider;
|
||||||
import org.hibernate.tool.hbm2ddl.DatabaseMetadata;
|
import org.hibernate.tool.hbm2ddl.DatabaseMetadata;
|
||||||
import org.hibernate.tool.hbm2ddl.IndexMetadata;
|
import org.hibernate.tool.hbm2ddl.IndexMetadata;
|
||||||
import org.hibernate.tool.hbm2ddl.TableMetadata;
|
import org.hibernate.tool.hbm2ddl.TableMetadata;
|
||||||
|
@ -1820,7 +1823,7 @@ public class Configuration implements Serializable {
|
||||||
*
|
*
|
||||||
* @throws HibernateException usually indicates an invalid configuration or invalid mapping information
|
* @throws HibernateException usually indicates an invalid configuration or invalid mapping information
|
||||||
*/
|
*/
|
||||||
public SessionFactory buildSessionFactory() throws HibernateException {
|
public SessionFactory buildSessionFactory(ServicesRegistry serviceRegistry) throws HibernateException {
|
||||||
log.debug( "Preparing to build session factory with filters : " + filterDefinitions );
|
log.debug( "Preparing to build session factory with filters : " + filterDefinitions );
|
||||||
|
|
||||||
secondPassCompile();
|
secondPassCompile();
|
||||||
|
@ -1837,11 +1840,12 @@ public class Configuration implements Serializable {
|
||||||
Properties copy = new Properties();
|
Properties copy = new Properties();
|
||||||
copy.putAll( properties );
|
copy.putAll( properties );
|
||||||
ConfigurationHelper.resolvePlaceHolders( copy );
|
ConfigurationHelper.resolvePlaceHolders( copy );
|
||||||
Settings settings = buildSettings( copy );
|
Settings settings = buildSettings( copy, serviceRegistry.getService( JdbcServices.class ).getConnectionProvider() );
|
||||||
|
|
||||||
return new SessionFactoryImpl(
|
return new SessionFactoryImpl(
|
||||||
this,
|
this,
|
||||||
mapping,
|
mapping,
|
||||||
|
serviceRegistry,
|
||||||
settings,
|
settings,
|
||||||
getInitializedEventListeners(),
|
getInitializedEventListeners(),
|
||||||
sessionFactoryObserver
|
sessionFactoryObserver
|
||||||
|
@ -2819,18 +2823,18 @@ public class Configuration implements Serializable {
|
||||||
*
|
*
|
||||||
* @return The build settings
|
* @return The build settings
|
||||||
*/
|
*/
|
||||||
public Settings buildSettings() {
|
public Settings buildSettings(ConnectionProvider connectionProvider) {
|
||||||
Properties clone = ( Properties ) properties.clone();
|
Properties clone = ( Properties ) properties.clone();
|
||||||
ConfigurationHelper.resolvePlaceHolders( clone );
|
ConfigurationHelper.resolvePlaceHolders( clone );
|
||||||
return buildSettingsInternal( clone );
|
return buildSettingsInternal( clone, connectionProvider );
|
||||||
}
|
}
|
||||||
|
|
||||||
public Settings buildSettings(Properties props) throws HibernateException {
|
public Settings buildSettings(Properties props, ConnectionProvider connectionProvider) throws HibernateException {
|
||||||
return buildSettingsInternal( props );
|
return buildSettingsInternal( props, connectionProvider );
|
||||||
}
|
}
|
||||||
|
|
||||||
private Settings buildSettingsInternal(Properties props) {
|
private Settings buildSettingsInternal(Properties props, ConnectionProvider connectionProvider) {
|
||||||
final Settings settings = settingsFactory.buildSettings( props );
|
final Settings settings = settingsFactory.buildSettings( props, connectionProvider );
|
||||||
settings.setEntityTuplizerFactory( this.getEntityTuplizerFactory() );
|
settings.setEntityTuplizerFactory( this.getEntityTuplizerFactory() );
|
||||||
// settings.setComponentTuplizerFactory( this.getComponentTuplizerFactory() );
|
// settings.setComponentTuplizerFactory( this.getComponentTuplizerFactory() );
|
||||||
return settings;
|
return settings;
|
||||||
|
|
|
@ -82,7 +82,7 @@ import org.hibernate.util.ConfigHelper;
|
||||||
* </tr>
|
* </tr>
|
||||||
* <tr>
|
* <tr>
|
||||||
* <td><tt>hibernate.connection.provider_class</tt></td>
|
* <td><tt>hibernate.connection.provider_class</tt></td>
|
||||||
* <td>classname of <tt>org.hibernate.connection.ConnectionProvider</tt>
|
* <td>classname of <tt>org.hibernate.service.jdbc.connections.spi.ConnectionProvider</tt>
|
||||||
* subclass (if not specified hueristics are used)</td>
|
* subclass (if not specified hueristics are used)</td>
|
||||||
* </tr>
|
* </tr>
|
||||||
* <tr><td><tt>hibernate.connection.username</tt></td><td>database username</td></tr>
|
* <tr><td><tt>hibernate.connection.username</tt></td><td>database username</td></tr>
|
||||||
|
|
|
@ -29,7 +29,7 @@ import org.hibernate.ConnectionReleaseMode;
|
||||||
import org.hibernate.EntityMode;
|
import org.hibernate.EntityMode;
|
||||||
import org.hibernate.cache.QueryCacheFactory;
|
import org.hibernate.cache.QueryCacheFactory;
|
||||||
import org.hibernate.cache.RegionFactory;
|
import org.hibernate.cache.RegionFactory;
|
||||||
import org.hibernate.connection.ConnectionProvider;
|
import org.hibernate.service.jdbc.connections.spi.ConnectionProvider;
|
||||||
import org.hibernate.dialect.Dialect;
|
import org.hibernate.dialect.Dialect;
|
||||||
import org.hibernate.engine.jdbc.JdbcSupport;
|
import org.hibernate.engine.jdbc.JdbcSupport;
|
||||||
import org.hibernate.exception.SQLExceptionConverter;
|
import org.hibernate.exception.SQLExceptionConverter;
|
||||||
|
@ -172,10 +172,6 @@ public final class Settings {
|
||||||
return jdbcFetchSize;
|
return jdbcFetchSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ConnectionProvider getConnectionProvider() {
|
|
||||||
return connectionProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TransactionFactory getTransactionFactory() {
|
public TransactionFactory getTransactionFactory() {
|
||||||
return transactionFactory;
|
return transactionFactory;
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,8 +43,7 @@ import org.hibernate.cache.QueryCacheFactory;
|
||||||
import org.hibernate.cache.RegionFactory;
|
import org.hibernate.cache.RegionFactory;
|
||||||
import org.hibernate.cache.impl.NoCachingRegionFactory;
|
import org.hibernate.cache.impl.NoCachingRegionFactory;
|
||||||
import org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge;
|
import org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge;
|
||||||
import org.hibernate.connection.ConnectionProvider;
|
import org.hibernate.service.jdbc.connections.spi.ConnectionProvider;
|
||||||
import org.hibernate.connection.ConnectionProviderFactory;
|
|
||||||
import org.hibernate.dialect.Dialect;
|
import org.hibernate.dialect.Dialect;
|
||||||
import org.hibernate.dialect.resolver.DialectFactory;
|
import org.hibernate.dialect.resolver.DialectFactory;
|
||||||
import org.hibernate.exception.SQLExceptionConverter;
|
import org.hibernate.exception.SQLExceptionConverter;
|
||||||
|
@ -76,7 +75,7 @@ public class SettingsFactory implements Serializable {
|
||||||
protected SettingsFactory() {
|
protected SettingsFactory() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Settings buildSettings(Properties props) {
|
public Settings buildSettings(Properties props, ConnectionProvider connections) {
|
||||||
Settings settings = new Settings();
|
Settings settings = new Settings();
|
||||||
|
|
||||||
//SessionFactory name:
|
//SessionFactory name:
|
||||||
|
@ -86,9 +85,6 @@ public class SettingsFactory implements Serializable {
|
||||||
|
|
||||||
//JDBC and connection settings:
|
//JDBC and connection settings:
|
||||||
|
|
||||||
ConnectionProvider connections = createConnectionProvider(props);
|
|
||||||
settings.setConnectionProvider(connections);
|
|
||||||
|
|
||||||
//Interrogate JDBC metadata
|
//Interrogate JDBC metadata
|
||||||
|
|
||||||
boolean metaSupportsScrollable = false;
|
boolean metaSupportsScrollable = false;
|
||||||
|
@ -449,10 +445,6 @@ public class SettingsFactory implements Serializable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ConnectionProvider createConnectionProvider(Properties properties) {
|
|
||||||
return ConnectionProviderFactory.newConnectionProvider(properties);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected TransactionFactory createTransactionFactory(Properties properties) {
|
protected TransactionFactory createTransactionFactory(Properties properties) {
|
||||||
return TransactionFactoryFactory.buildTransactionFactory(properties);
|
return TransactionFactoryFactory.buildTransactionFactory(properties);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,94 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* Copyright (c) 2008, Red Hat Middleware LLC 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.
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
* Lesser General Public License, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
||||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
|
||||||
* for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
|
||||||
* along with this distribution; if not, write to:
|
|
||||||
* Free Software Foundation, Inc.
|
|
||||||
* 51 Franklin Street, Fifth Floor
|
|
||||||
* Boston, MA 02110-1301 USA
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
package org.hibernate.connection;
|
|
||||||
import java.sql.Connection;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.Properties;
|
|
||||||
|
|
||||||
import org.hibernate.HibernateException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A strategy for obtaining JDBC connections.
|
|
||||||
* <br><br>
|
|
||||||
* Implementors might also implement connection pooling.<br>
|
|
||||||
* <br>
|
|
||||||
* The <tt>ConnectionProvider</tt> interface is not intended to be
|
|
||||||
* exposed to the application. Instead it is used internally by
|
|
||||||
* Hibernate to obtain connections.<br>
|
|
||||||
* <br>
|
|
||||||
* Implementors should provide a public default constructor.
|
|
||||||
*
|
|
||||||
* @see ConnectionProviderFactory
|
|
||||||
* @author Gavin King
|
|
||||||
*/
|
|
||||||
public interface ConnectionProvider {
|
|
||||||
/**
|
|
||||||
* Initialize the connection provider from given properties.
|
|
||||||
* @param props <tt>SessionFactory</tt> properties
|
|
||||||
*/
|
|
||||||
public void configure(Properties props) throws HibernateException;
|
|
||||||
/**
|
|
||||||
* Grab a connection, with the autocommit mode specified by
|
|
||||||
* <tt>hibernate.connection.autocommit</tt>.
|
|
||||||
* @return a JDBC connection
|
|
||||||
* @throws SQLException
|
|
||||||
*/
|
|
||||||
public Connection getConnection() throws SQLException;
|
|
||||||
/**
|
|
||||||
* Dispose of a used connection.
|
|
||||||
* @param conn a JDBC connection
|
|
||||||
* @throws SQLException
|
|
||||||
*/
|
|
||||||
public void closeConnection(Connection conn) throws SQLException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Release all resources held by this provider. JavaDoc requires a second sentence.
|
|
||||||
* @throws HibernateException
|
|
||||||
*/
|
|
||||||
public void close() throws HibernateException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Does this connection provider support aggressive release of JDBC
|
|
||||||
* connections and re-acquistion of those connections (if need be) later?
|
|
||||||
* <p/>
|
|
||||||
* This is used in conjunction with {@link org.hibernate.cfg.Environment.RELEASE_CONNECTIONS}
|
|
||||||
* to aggressively release JDBC connections. However, the configured ConnectionProvider
|
|
||||||
* must support re-acquisition of the same underlying connection for that semantic to work.
|
|
||||||
* <p/>
|
|
||||||
* Typically, this is only true in managed environments where a container
|
|
||||||
* tracks connections by transaction or thread.
|
|
||||||
*
|
|
||||||
* Note that JTA semantic depends on the fact that the underlying connection provider does
|
|
||||||
* support aggressive release.
|
|
||||||
*/
|
|
||||||
public boolean supportsAggressiveRelease();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,235 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* 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 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
|
|
||||||
* Lesser General Public License, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
||||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
|
||||||
* for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
|
||||||
* along with this distribution; if not, write to:
|
|
||||||
* Free Software Foundation, Inc.
|
|
||||||
* 51 Franklin Street, Fifth Floor
|
|
||||||
* Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
package org.hibernate.connection;
|
|
||||||
|
|
||||||
import java.beans.BeanInfo;
|
|
||||||
import java.beans.IntrospectionException;
|
|
||||||
import java.beans.Introspector;
|
|
||||||
import java.beans.PropertyDescriptor;
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Properties;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import org.hibernate.HibernateException;
|
|
||||||
import org.hibernate.cfg.Environment;
|
|
||||||
import org.hibernate.util.ReflectHelper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instantiates a connection provider given either <tt>System</tt> properties or
|
|
||||||
* a <tt>java.util.Properties</tt> instance. The <tt>ConnectionProviderFactory</tt>
|
|
||||||
* first attempts to find a name of a <tt>ConnectionProvider</tt> subclass in the
|
|
||||||
* property <tt>hibernate.connection.provider_class</tt>. If missing, heuristics are used
|
|
||||||
* to choose either <tt>DriverManagerConnectionProvider</tt>,
|
|
||||||
* <tt>DatasourceConnectionProvider</tt>, <tt>C3P0ConnectionProvider</tt> or
|
|
||||||
* <tt>DBCPConnectionProvider</tt>.
|
|
||||||
*
|
|
||||||
* @author Gavin King
|
|
||||||
* @see ConnectionProvider
|
|
||||||
*/
|
|
||||||
|
|
||||||
public final class ConnectionProviderFactory {
|
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger( ConnectionProviderFactory.class );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instantiate a <tt>ConnectionProvider</tt> using <tt>System</tt> properties.
|
|
||||||
*
|
|
||||||
* @return The created connection provider.
|
|
||||||
*
|
|
||||||
* @throws HibernateException
|
|
||||||
*/
|
|
||||||
public static ConnectionProvider newConnectionProvider() throws HibernateException {
|
|
||||||
return newConnectionProvider( Environment.getProperties() );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instantiate a <tt>ConnectionProvider</tt> using given properties.
|
|
||||||
* Method newConnectionProvider.
|
|
||||||
*
|
|
||||||
* @param properties hibernate <tt>SessionFactory</tt> properties
|
|
||||||
*
|
|
||||||
* @return ConnectionProvider
|
|
||||||
*
|
|
||||||
* @throws HibernateException
|
|
||||||
*/
|
|
||||||
public static ConnectionProvider newConnectionProvider(Properties properties) throws HibernateException {
|
|
||||||
return newConnectionProvider( properties, null );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a connection provider based on the given information.
|
|
||||||
*
|
|
||||||
* @param properties Properties being used to build the {@link org.hibernate.SessionFactory}.
|
|
||||||
* @param connectionProviderInjectionData Something to be injected in the connection provided
|
|
||||||
*
|
|
||||||
* @return The created connection provider
|
|
||||||
*
|
|
||||||
* @throws HibernateException
|
|
||||||
*/
|
|
||||||
public static ConnectionProvider newConnectionProvider(Properties properties, Map connectionProviderInjectionData)
|
|
||||||
throws HibernateException {
|
|
||||||
ConnectionProvider connections;
|
|
||||||
String providerClass = properties.getProperty( Environment.CONNECTION_PROVIDER );
|
|
||||||
if ( providerClass != null ) {
|
|
||||||
connections = initializeConnectionProviderFromConfig( providerClass );
|
|
||||||
}
|
|
||||||
else if ( c3p0ConfigDefined( properties ) && c3p0ProviderPresent() ) {
|
|
||||||
connections = initializeConnectionProviderFromConfig("org.hibernate.connection.C3P0ConnectionProvider");
|
|
||||||
}
|
|
||||||
else if ( properties.getProperty( Environment.DATASOURCE ) != null ) {
|
|
||||||
connections = new DatasourceConnectionProvider();
|
|
||||||
}
|
|
||||||
else if ( properties.getProperty( Environment.URL ) != null ) {
|
|
||||||
connections = new DriverManagerConnectionProvider();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
connections = new UserSuppliedConnectionProvider();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( connectionProviderInjectionData != null && connectionProviderInjectionData.size() != 0 ) {
|
|
||||||
//inject the data
|
|
||||||
try {
|
|
||||||
BeanInfo info = Introspector.getBeanInfo( connections.getClass() );
|
|
||||||
PropertyDescriptor[] descritors = info.getPropertyDescriptors();
|
|
||||||
int size = descritors.length;
|
|
||||||
for ( int index = 0; index < size; index++ ) {
|
|
||||||
String propertyName = descritors[index].getName();
|
|
||||||
if ( connectionProviderInjectionData.containsKey( propertyName ) ) {
|
|
||||||
Method method = descritors[index].getWriteMethod();
|
|
||||||
method.invoke(
|
|
||||||
connections, new Object[] { connectionProviderInjectionData.get( propertyName ) }
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch ( IntrospectionException e ) {
|
|
||||||
throw new HibernateException( "Unable to inject objects into the connection provider", e );
|
|
||||||
}
|
|
||||||
catch ( IllegalAccessException e ) {
|
|
||||||
throw new HibernateException( "Unable to inject objects into the connection provider", e );
|
|
||||||
}
|
|
||||||
catch ( InvocationTargetException e ) {
|
|
||||||
throw new HibernateException( "Unable to inject objects into the connection provider", e );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
connections.configure( properties );
|
|
||||||
return connections;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean c3p0ProviderPresent() {
|
|
||||||
try {
|
|
||||||
ReflectHelper.classForName( "org.hibernate.connection.C3P0ConnectionProvider" );
|
|
||||||
}
|
|
||||||
catch ( ClassNotFoundException e ) {
|
|
||||||
log.warn( "c3p0 properties is specificed, but could not find org.hibernate.connection.C3P0ConnectionProvider from the classpath, " +
|
|
||||||
"these properties are going to be ignored." );
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean c3p0ConfigDefined(Properties properties) {
|
|
||||||
Iterator iter = properties.keySet().iterator();
|
|
||||||
while ( iter.hasNext() ) {
|
|
||||||
String property = (String) iter.next();
|
|
||||||
if ( property.startsWith( "hibernate.c3p0" ) ) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static ConnectionProvider initializeConnectionProviderFromConfig(String providerClass) {
|
|
||||||
ConnectionProvider connections;
|
|
||||||
try {
|
|
||||||
log.info( "Initializing connection provider: " + providerClass );
|
|
||||||
connections = (ConnectionProvider) ReflectHelper.classForName( providerClass ).newInstance();
|
|
||||||
}
|
|
||||||
catch ( Exception e ) {
|
|
||||||
log.error( "Could not instantiate connection provider", e );
|
|
||||||
throw new HibernateException( "Could not instantiate connection provider: " + providerClass );
|
|
||||||
}
|
|
||||||
return connections;
|
|
||||||
}
|
|
||||||
|
|
||||||
// cannot be instantiated
|
|
||||||
|
|
||||||
private ConnectionProviderFactory() {
|
|
||||||
throw new UnsupportedOperationException();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Transform JDBC connection properties.
|
|
||||||
*
|
|
||||||
* Passed in the form <tt>hibernate.connection.*</tt> to the
|
|
||||||
* format accepted by <tt>DriverManager</tt> by trimming the leading "<tt>hibernate.connection</tt>".
|
|
||||||
*/
|
|
||||||
public static Properties getConnectionProperties(Properties properties) {
|
|
||||||
|
|
||||||
Iterator iter = properties.keySet().iterator();
|
|
||||||
Properties result = new Properties();
|
|
||||||
while ( iter.hasNext() ) {
|
|
||||||
String prop = (String) iter.next();
|
|
||||||
if ( prop.startsWith( Environment.CONNECTION_PREFIX ) && !SPECIAL_PROPERTIES.contains( prop ) ) {
|
|
||||||
result.setProperty(
|
|
||||||
prop.substring( Environment.CONNECTION_PREFIX.length() + 1 ),
|
|
||||||
properties.getProperty( prop )
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
String userName = properties.getProperty( Environment.USER );
|
|
||||||
if ( userName != null ) {
|
|
||||||
result.setProperty( "user", userName );
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final Set SPECIAL_PROPERTIES;
|
|
||||||
|
|
||||||
static {
|
|
||||||
SPECIAL_PROPERTIES = new HashSet();
|
|
||||||
SPECIAL_PROPERTIES.add( Environment.DATASOURCE );
|
|
||||||
SPECIAL_PROPERTIES.add( Environment.URL );
|
|
||||||
SPECIAL_PROPERTIES.add( Environment.CONNECTION_PROVIDER );
|
|
||||||
SPECIAL_PROPERTIES.add( Environment.POOL_SIZE );
|
|
||||||
SPECIAL_PROPERTIES.add( Environment.ISOLATION );
|
|
||||||
SPECIAL_PROPERTIES.add( Environment.DRIVER );
|
|
||||||
SPECIAL_PROPERTIES.add( Environment.USER );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,116 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* Copyright (c) 2008, Red Hat Middleware LLC 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.
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
* Lesser General Public License, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
||||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
|
||||||
* for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
|
||||||
* along with this distribution; if not, write to:
|
|
||||||
* Free Software Foundation, Inc.
|
|
||||||
* 51 Franklin Street, Fifth Floor
|
|
||||||
* Boston, MA 02110-1301 USA
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
package org.hibernate.connection;
|
|
||||||
|
|
||||||
import java.sql.Connection;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.Properties;
|
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
|
||||||
|
|
||||||
import org.hibernate.HibernateException;
|
|
||||||
import org.hibernate.cfg.Environment;
|
|
||||||
import org.hibernate.internal.util.jndi.JndiHelper;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A connection provider that uses a <tt>DataSource</tt> registered with JNDI.
|
|
||||||
* Hibernate will use this <tt>ConnectionProvider</tt> by default if the
|
|
||||||
* property <tt>hibernate.connection.datasource</tt> is set.
|
|
||||||
* @see ConnectionProvider
|
|
||||||
* @author Gavin King
|
|
||||||
*/
|
|
||||||
public class DatasourceConnectionProvider implements ConnectionProvider {
|
|
||||||
private DataSource ds;
|
|
||||||
private String user;
|
|
||||||
private String pass;
|
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(DatasourceConnectionProvider.class);
|
|
||||||
|
|
||||||
public DataSource getDataSource() {
|
|
||||||
return ds;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDataSource(DataSource ds) {
|
|
||||||
this.ds = ds;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void configure(Properties props) throws HibernateException {
|
|
||||||
|
|
||||||
String jndiName = props.getProperty( Environment.DATASOURCE );
|
|
||||||
if ( jndiName == null ) {
|
|
||||||
String msg = "datasource JNDI name was not specified by property " + Environment.DATASOURCE;
|
|
||||||
log.error( msg );
|
|
||||||
throw new HibernateException( msg );
|
|
||||||
}
|
|
||||||
|
|
||||||
user = props.getProperty( Environment.USER );
|
|
||||||
pass = props.getProperty( Environment.PASS );
|
|
||||||
|
|
||||||
try {
|
|
||||||
ds = ( DataSource ) JndiHelper.getInitialContext( props ).lookup( jndiName );
|
|
||||||
}
|
|
||||||
catch ( Exception e ) {
|
|
||||||
log.error( "Could not find datasource: " + jndiName, e );
|
|
||||||
throw new HibernateException( "Could not find datasource", e );
|
|
||||||
}
|
|
||||||
if ( ds == null ) {
|
|
||||||
throw new HibernateException( "Could not find datasource: " + jndiName );
|
|
||||||
}
|
|
||||||
log.info( "Using datasource: " + jndiName );
|
|
||||||
}
|
|
||||||
|
|
||||||
public Connection getConnection() throws SQLException {
|
|
||||||
if (user != null || pass != null) {
|
|
||||||
return ds.getConnection(user, pass);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return ds.getConnection();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void closeConnection(Connection conn) throws SQLException {
|
|
||||||
conn.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void close() {}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @see ConnectionProvider#supportsAggressiveRelease()
|
|
||||||
*/
|
|
||||||
public boolean supportsAggressiveRelease() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,199 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* Copyright (c) 2008, Red Hat Middleware LLC 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.
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
* Lesser General Public License, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
||||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
|
||||||
* for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
|
||||||
* along with this distribution; if not, write to:
|
|
||||||
* Free Software Foundation, Inc.
|
|
||||||
* 51 Franklin Street, Fifth Floor
|
|
||||||
* Boston, MA 02110-1301 USA
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
package org.hibernate.connection;
|
|
||||||
|
|
||||||
import java.sql.Connection;
|
|
||||||
import java.sql.DriverManager;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Properties;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.hibernate.HibernateException;
|
|
||||||
import org.hibernate.cfg.Environment;
|
|
||||||
import org.hibernate.internal.util.config.ConfigurationHelper;
|
|
||||||
import org.hibernate.util.ReflectHelper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A connection provider that uses <tt>java.sql.DriverManager</tt>. This provider
|
|
||||||
* also implements a very rudimentary connection pool.
|
|
||||||
* @see ConnectionProvider
|
|
||||||
* @author Gavin King
|
|
||||||
*/
|
|
||||||
public class DriverManagerConnectionProvider implements ConnectionProvider {
|
|
||||||
|
|
||||||
private String url;
|
|
||||||
private Properties connectionProps;
|
|
||||||
private Integer isolation;
|
|
||||||
private final ArrayList pool = new ArrayList();
|
|
||||||
private int poolSize;
|
|
||||||
private int checkedOut = 0;
|
|
||||||
private boolean autocommit;
|
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(DriverManagerConnectionProvider.class);
|
|
||||||
|
|
||||||
public void configure(Properties props) throws HibernateException {
|
|
||||||
|
|
||||||
String driverClass = props.getProperty(Environment.DRIVER);
|
|
||||||
|
|
||||||
poolSize = ConfigurationHelper.getInt(Environment.POOL_SIZE, props, 20); //default pool size 20
|
|
||||||
log.info("Using Hibernate built-in connection pool (not for production use!)");
|
|
||||||
log.info("Hibernate connection pool size: " + poolSize);
|
|
||||||
|
|
||||||
autocommit = ConfigurationHelper.getBoolean(Environment.AUTOCOMMIT, props);
|
|
||||||
log.info("autocommit mode: " + autocommit);
|
|
||||||
|
|
||||||
isolation = ConfigurationHelper.getInteger(Environment.ISOLATION, props);
|
|
||||||
if (isolation!=null)
|
|
||||||
log.info( "JDBC isolation level: " + Environment.isolationLevelToString( isolation.intValue() ) );
|
|
||||||
|
|
||||||
if (driverClass==null) {
|
|
||||||
log.warn("no JDBC Driver class was specified by property " + Environment.DRIVER);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
try {
|
|
||||||
// trying via forName() first to be as close to DriverManager's semantics
|
|
||||||
Class.forName(driverClass);
|
|
||||||
}
|
|
||||||
catch (ClassNotFoundException cnfe) {
|
|
||||||
try {
|
|
||||||
ReflectHelper.classForName(driverClass);
|
|
||||||
}
|
|
||||||
catch (ClassNotFoundException e) {
|
|
||||||
String msg = "JDBC Driver class not found: " + driverClass;
|
|
||||||
log.error( msg, e );
|
|
||||||
throw new HibernateException(msg, e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
url = props.getProperty( Environment.URL );
|
|
||||||
if ( url == null ) {
|
|
||||||
String msg = "JDBC URL was not specified by property " + Environment.URL;
|
|
||||||
log.error( msg );
|
|
||||||
throw new HibernateException( msg );
|
|
||||||
}
|
|
||||||
|
|
||||||
connectionProps = ConnectionProviderFactory.getConnectionProperties( props );
|
|
||||||
|
|
||||||
log.info( "using driver: " + driverClass + " at URL: " + url );
|
|
||||||
// if debug level is enabled, then log the password, otherwise mask it
|
|
||||||
if ( log.isDebugEnabled() ) {
|
|
||||||
log.info( "connection properties: " + connectionProps );
|
|
||||||
}
|
|
||||||
else if ( log.isInfoEnabled() ) {
|
|
||||||
log.info( "connection properties: " + ConfigurationHelper.maskOut(connectionProps, "password") );
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public Connection getConnection() throws SQLException {
|
|
||||||
|
|
||||||
if ( log.isTraceEnabled() ) log.trace( "total checked-out connections: " + checkedOut );
|
|
||||||
|
|
||||||
synchronized (pool) {
|
|
||||||
if ( !pool.isEmpty() ) {
|
|
||||||
int last = pool.size() - 1;
|
|
||||||
if ( log.isTraceEnabled() ) {
|
|
||||||
log.trace("using pooled JDBC connection, pool size: " + last);
|
|
||||||
checkedOut++;
|
|
||||||
}
|
|
||||||
Connection pooled = (Connection) pool.remove(last);
|
|
||||||
if (isolation!=null) pooled.setTransactionIsolation( isolation.intValue() );
|
|
||||||
if ( pooled.getAutoCommit()!=autocommit ) pooled.setAutoCommit(autocommit);
|
|
||||||
return pooled;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
log.debug("opening new JDBC connection");
|
|
||||||
Connection conn = DriverManager.getConnection(url, connectionProps);
|
|
||||||
if (isolation!=null) conn.setTransactionIsolation( isolation.intValue() );
|
|
||||||
if ( conn.getAutoCommit()!=autocommit ) conn.setAutoCommit(autocommit);
|
|
||||||
|
|
||||||
if ( log.isDebugEnabled() ) {
|
|
||||||
log.debug( "created connection to: " + url + ", Isolation Level: " + conn.getTransactionIsolation() );
|
|
||||||
}
|
|
||||||
if ( log.isTraceEnabled() ) checkedOut++;
|
|
||||||
|
|
||||||
return conn;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void closeConnection(Connection conn) throws SQLException {
|
|
||||||
|
|
||||||
if ( log.isDebugEnabled() ) checkedOut--;
|
|
||||||
|
|
||||||
synchronized (pool) {
|
|
||||||
int currentSize = pool.size();
|
|
||||||
if ( currentSize < poolSize ) {
|
|
||||||
if ( log.isTraceEnabled() ) log.trace("returning connection to pool, pool size: " + (currentSize + 1) );
|
|
||||||
pool.add(conn);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
log.debug("closing JDBC connection");
|
|
||||||
|
|
||||||
conn.close();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void finalize() {
|
|
||||||
close();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void close() {
|
|
||||||
|
|
||||||
log.info("cleaning up connection pool: " + url);
|
|
||||||
|
|
||||||
Iterator iter = pool.iterator();
|
|
||||||
while ( iter.hasNext() ) {
|
|
||||||
try {
|
|
||||||
( (Connection) iter.next() ).close();
|
|
||||||
}
|
|
||||||
catch (SQLException sqle) {
|
|
||||||
log.warn("problem closing pooled connection", sqle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pool.clear();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @see ConnectionProvider#supportsAggressiveRelease()
|
|
||||||
*/
|
|
||||||
public boolean supportsAggressiveRelease() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,80 +0,0 @@
|
||||||
/*
|
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
*
|
|
||||||
* Copyright (c) 2008, Red Hat Middleware LLC 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.
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
* Lesser General Public License, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
||||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
|
||||||
* for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
|
||||||
* along with this distribution; if not, write to:
|
|
||||||
* Free Software Foundation, Inc.
|
|
||||||
* 51 Franklin Street, Fifth Floor
|
|
||||||
* Boston, MA 02110-1301 USA
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
package org.hibernate.connection;
|
|
||||||
|
|
||||||
import java.sql.Connection;
|
|
||||||
import java.util.Properties;
|
|
||||||
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.hibernate.HibernateException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An implementation of the <literal>ConnectionProvider</literal> interface that
|
|
||||||
* simply throws an exception when a connection is requested. This implementation
|
|
||||||
* indicates that the user is expected to supply a JDBC connection.
|
|
||||||
* @see ConnectionProvider
|
|
||||||
* @author Gavin King
|
|
||||||
*/
|
|
||||||
public class UserSuppliedConnectionProvider implements ConnectionProvider {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @see org.hibernate.connection.ConnectionProvider#configure(Properties)
|
|
||||||
*/
|
|
||||||
public void configure(Properties props) throws HibernateException {
|
|
||||||
LoggerFactory.getLogger( UserSuppliedConnectionProvider.class )
|
|
||||||
.warn( "No connection properties specified - the user must supply JDBC connections" );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @see org.hibernate.connection.ConnectionProvider#getConnection()
|
|
||||||
*/
|
|
||||||
public Connection getConnection() {
|
|
||||||
throw new UnsupportedOperationException("The user must supply a JDBC connection");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @see org.hibernate.connection.ConnectionProvider#closeConnection(Connection)
|
|
||||||
*/
|
|
||||||
public void closeConnection(Connection conn) {
|
|
||||||
throw new UnsupportedOperationException("The user must supply a JDBC connection");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void close() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @see ConnectionProvider#supportsAggressiveRelease()
|
|
||||||
*/
|
|
||||||
public boolean supportsAggressiveRelease() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
<!--
|
|
||||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
|
||||||
~
|
|
||||||
~ Copyright (c) 2008, Red Hat Middleware LLC 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.
|
|
||||||
~
|
|
||||||
~ 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
|
|
||||||
~ Lesser General Public License, as published by the Free Software Foundation.
|
|
||||||
~
|
|
||||||
~ This program is distributed in the hope that it will be useful,
|
|
||||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
||||||
~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
|
||||||
~ for more details.
|
|
||||||
~
|
|
||||||
~ You should have received a copy of the GNU Lesser General Public License
|
|
||||||
~ along with this distribution; if not, write to:
|
|
||||||
~ Free Software Foundation, Inc.
|
|
||||||
~ 51 Franklin Street, Fifth Floor
|
|
||||||
~ Boston, MA 02110-1301 USA
|
|
||||||
~
|
|
||||||
-->
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<head></head>
|
|
||||||
<body>
|
|
||||||
<p>
|
|
||||||
This package abstracts the mechanism for obtaining
|
|
||||||
a JDBC connection.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
A concrete implementation of <tt>ConnectionProvider</tt> may be
|
|
||||||
selected by specifying <tt>hibernate.connection.provider_class</tt>.
|
|
||||||
</p>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -45,7 +45,7 @@ import org.hibernate.cache.QueryCache;
|
||||||
import org.hibernate.cache.UpdateTimestampsCache;
|
import org.hibernate.cache.UpdateTimestampsCache;
|
||||||
import org.hibernate.cache.Region;
|
import org.hibernate.cache.Region;
|
||||||
import org.hibernate.cfg.Settings;
|
import org.hibernate.cfg.Settings;
|
||||||
import org.hibernate.connection.ConnectionProvider;
|
import org.hibernate.service.jdbc.connections.spi.ConnectionProvider;
|
||||||
import org.hibernate.dialect.Dialect;
|
import org.hibernate.dialect.Dialect;
|
||||||
import org.hibernate.dialect.function.SQLFunctionRegistry;
|
import org.hibernate.dialect.function.SQLFunctionRegistry;
|
||||||
import org.hibernate.exception.SQLExceptionConverter;
|
import org.hibernate.exception.SQLExceptionConverter;
|
||||||
|
|
|
@ -74,7 +74,8 @@ import org.hibernate.cache.impl.CacheDataDescriptionImpl;
|
||||||
import org.hibernate.cfg.Configuration;
|
import org.hibernate.cfg.Configuration;
|
||||||
import org.hibernate.cfg.Environment;
|
import org.hibernate.cfg.Environment;
|
||||||
import org.hibernate.cfg.Settings;
|
import org.hibernate.cfg.Settings;
|
||||||
import org.hibernate.connection.ConnectionProvider;
|
import org.hibernate.engine.jdbc.spi.JdbcServices;
|
||||||
|
import org.hibernate.service.jdbc.connections.spi.ConnectionProvider;
|
||||||
import org.hibernate.context.CurrentSessionContext;
|
import org.hibernate.context.CurrentSessionContext;
|
||||||
import org.hibernate.context.JTASessionContext;
|
import org.hibernate.context.JTASessionContext;
|
||||||
import org.hibernate.context.ManagedSessionContext;
|
import org.hibernate.context.ManagedSessionContext;
|
||||||
|
@ -110,6 +111,7 @@ import org.hibernate.persister.entity.Loadable;
|
||||||
import org.hibernate.persister.entity.Queryable;
|
import org.hibernate.persister.entity.Queryable;
|
||||||
import org.hibernate.pretty.MessageHelper;
|
import org.hibernate.pretty.MessageHelper;
|
||||||
import org.hibernate.proxy.EntityNotFoundDelegate;
|
import org.hibernate.proxy.EntityNotFoundDelegate;
|
||||||
|
import org.hibernate.service.spi.ServicesRegistry;
|
||||||
import org.hibernate.stat.ConcurrentStatisticsImpl;
|
import org.hibernate.stat.ConcurrentStatisticsImpl;
|
||||||
import org.hibernate.stat.Statistics;
|
import org.hibernate.stat.Statistics;
|
||||||
import org.hibernate.stat.StatisticsImplementor;
|
import org.hibernate.stat.StatisticsImplementor;
|
||||||
|
@ -142,7 +144,7 @@ import org.hibernate.util.ReflectHelper;
|
||||||
* and pooling under the covers. It is crucial that the class is not only thread
|
* and pooling under the covers. It is crucial that the class is not only thread
|
||||||
* safe, but also highly concurrent. Synchronization must be used extremely sparingly.
|
* safe, but also highly concurrent. Synchronization must be used extremely sparingly.
|
||||||
*
|
*
|
||||||
* @see org.hibernate.connection.ConnectionProvider
|
* @see org.hibernate.service.jdbc.connections.spi.ConnectionProvider
|
||||||
* @see org.hibernate.classic.Session
|
* @see org.hibernate.classic.Session
|
||||||
* @see org.hibernate.hql.QueryTranslator
|
* @see org.hibernate.hql.QueryTranslator
|
||||||
* @see org.hibernate.persister.entity.EntityPersister
|
* @see org.hibernate.persister.entity.EntityPersister
|
||||||
|
@ -170,6 +172,7 @@ public final class SessionFactoryImpl implements SessionFactory, SessionFactoryI
|
||||||
private final transient Map fetchProfiles;
|
private final transient Map fetchProfiles;
|
||||||
private final transient Map imports;
|
private final transient Map imports;
|
||||||
private final transient Interceptor interceptor;
|
private final transient Interceptor interceptor;
|
||||||
|
private final transient ServicesRegistry serviceRegistry;
|
||||||
private final transient Settings settings;
|
private final transient Settings settings;
|
||||||
private final transient Properties properties;
|
private final transient Properties properties;
|
||||||
private transient SchemaExport schemaExport;
|
private transient SchemaExport schemaExport;
|
||||||
|
@ -194,6 +197,7 @@ public final class SessionFactoryImpl implements SessionFactory, SessionFactoryI
|
||||||
public SessionFactoryImpl(
|
public SessionFactoryImpl(
|
||||||
Configuration cfg,
|
Configuration cfg,
|
||||||
Mapping mapping,
|
Mapping mapping,
|
||||||
|
ServicesRegistry serviceRegistry,
|
||||||
Settings settings,
|
Settings settings,
|
||||||
EventListeners listeners,
|
EventListeners listeners,
|
||||||
SessionFactoryObserver observer) throws HibernateException {
|
SessionFactoryObserver observer) throws HibernateException {
|
||||||
|
@ -206,6 +210,7 @@ public final class SessionFactoryImpl implements SessionFactory, SessionFactoryI
|
||||||
this.properties = new Properties();
|
this.properties = new Properties();
|
||||||
this.properties.putAll( cfg.getProperties() );
|
this.properties.putAll( cfg.getProperties() );
|
||||||
this.interceptor = cfg.getInterceptor();
|
this.interceptor = cfg.getInterceptor();
|
||||||
|
this.serviceRegistry = serviceRegistry;
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
this.sqlFunctionRegistry = new SQLFunctionRegistry(settings.getDialect(), cfg.getSqlFunctions());
|
this.sqlFunctionRegistry = new SQLFunctionRegistry(settings.getDialect(), cfg.getSqlFunctions());
|
||||||
this.eventListeners = listeners;
|
this.eventListeners = listeners;
|
||||||
|
@ -367,16 +372,16 @@ public final class SessionFactoryImpl implements SessionFactory, SessionFactoryI
|
||||||
log.debug("instantiated session factory");
|
log.debug("instantiated session factory");
|
||||||
|
|
||||||
if ( settings.isAutoCreateSchema() ) {
|
if ( settings.isAutoCreateSchema() ) {
|
||||||
new SchemaExport( cfg, settings ).create( false, true );
|
new SchemaExport( getJdbcServices(), cfg ).create( false, true );
|
||||||
}
|
}
|
||||||
if ( settings.isAutoUpdateSchema() ) {
|
if ( settings.isAutoUpdateSchema() ) {
|
||||||
new SchemaUpdate( cfg, settings ).execute( false, true );
|
new SchemaUpdate( getJdbcServices(), cfg ).execute( false, true );
|
||||||
}
|
}
|
||||||
if ( settings.isAutoValidateSchema() ) {
|
if ( settings.isAutoValidateSchema() ) {
|
||||||
new SchemaValidator( cfg, settings ).validate();
|
new SchemaValidator( getJdbcServices(), cfg ).validate();
|
||||||
}
|
}
|
||||||
if ( settings.isAutoDropSchema() ) {
|
if ( settings.isAutoDropSchema() ) {
|
||||||
schemaExport = new SchemaExport( cfg, settings );
|
schemaExport = new SchemaExport( getJdbcServices(), cfg );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( settings.getTransactionManagerLookup()!=null ) {
|
if ( settings.getTransactionManagerLookup()!=null ) {
|
||||||
|
@ -897,8 +902,12 @@ public final class SessionFactoryImpl implements SessionFactory, SessionFactoryI
|
||||||
return getEntityPersister(className).getPropertyType(propertyName);
|
return getEntityPersister(className).getPropertyType(propertyName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private JdbcServices getJdbcServices() {
|
||||||
|
return serviceRegistry.getService( JdbcServices.class );
|
||||||
|
}
|
||||||
|
|
||||||
public ConnectionProvider getConnectionProvider() {
|
public ConnectionProvider getConnectionProvider() {
|
||||||
return settings.getConnectionProvider();
|
return serviceRegistry.getService( JdbcServices.class ).getConnectionProvider();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -959,12 +968,7 @@ public final class SessionFactoryImpl implements SessionFactory, SessionFactoryI
|
||||||
schemaExport.drop( false, true );
|
schemaExport.drop( false, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
|
||||||
settings.getConnectionProvider().close();
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
SessionFactoryObjectFactory.removeInstance(uuid, name, properties);
|
SessionFactoryObjectFactory.removeInstance(uuid, name, properties);
|
||||||
}
|
|
||||||
|
|
||||||
observer.sessionFactoryClosed( this );
|
observer.sessionFactoryClosed( this );
|
||||||
eventListeners.destroyListeners();
|
eventListeners.destroyListeners();
|
||||||
|
|
|
@ -12,6 +12,8 @@ import org.slf4j.LoggerFactory;
|
||||||
import org.hibernate.HibernateException;
|
import org.hibernate.HibernateException;
|
||||||
import org.hibernate.SessionFactory;
|
import org.hibernate.SessionFactory;
|
||||||
import org.hibernate.cfg.Environment;
|
import org.hibernate.cfg.Environment;
|
||||||
|
import org.hibernate.cfg.internal.ServicesRegistryBootstrap;
|
||||||
|
import org.hibernate.service.spi.ServicesRegistry;
|
||||||
import org.hibernate.tool.hbm2ddl.SchemaExport;
|
import org.hibernate.tool.hbm2ddl.SchemaExport;
|
||||||
import org.hibernate.internal.util.jndi.JndiHelper;
|
import org.hibernate.internal.util.jndi.JndiHelper;
|
||||||
import org.hibernate.util.ExternalSessionFactoryConfig;
|
import org.hibernate.util.ExternalSessionFactoryConfig;
|
||||||
|
@ -33,7 +35,6 @@ public class HibernateService extends ExternalSessionFactoryConfig implements Hi
|
||||||
private String boundName;
|
private String boundName;
|
||||||
private Properties properties = new Properties();
|
private Properties properties = new Properties();
|
||||||
|
|
||||||
|
|
||||||
public void start() throws HibernateException {
|
public void start() throws HibernateException {
|
||||||
boundName = getJndiName();
|
boundName = getJndiName();
|
||||||
try {
|
try {
|
||||||
|
@ -61,7 +62,9 @@ public class HibernateService extends ExternalSessionFactoryConfig implements Hi
|
||||||
SessionFactory buildSessionFactory() throws HibernateException {
|
SessionFactory buildSessionFactory() throws HibernateException {
|
||||||
log.info( "starting service at JNDI name: " + boundName );
|
log.info( "starting service at JNDI name: " + boundName );
|
||||||
log.info( "service properties: " + properties );
|
log.info( "service properties: " + properties );
|
||||||
return buildConfiguration().buildSessionFactory();
|
return buildConfiguration().buildSessionFactory(
|
||||||
|
new ServicesRegistryBootstrap().initiateServicesRegistry( properties )
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Map getExtraProperties() {
|
protected Map getExtraProperties() {
|
||||||
|
|
|
@ -255,7 +255,7 @@ public class ConnectionProviderInitiator implements ServiceInitiator<ConnectionP
|
||||||
public static Properties getConnectionProperties(Map<?,?> properties) {
|
public static Properties getConnectionProperties(Map<?,?> properties) {
|
||||||
Properties result = new Properties();
|
Properties result = new Properties();
|
||||||
for ( Map.Entry entry : properties.entrySet() ) {
|
for ( Map.Entry entry : properties.entrySet() ) {
|
||||||
if ( ! ( String.class.isInstance( entry.getKey() ) ) && String.class.isInstance( entry.getValue() ) ) {
|
if ( ! ( String.class.isInstance( entry.getKey() ) ) || ! String.class.isInstance( entry.getValue() ) ) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
final String key = (String) entry.getKey();
|
final String key = (String) entry.getKey();
|
||||||
|
|
|
@ -46,7 +46,7 @@ public interface StatisticsImplementor {
|
||||||
public void flush();
|
public void flush();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Callback about a connection being obtained from {@link org.hibernate.connection.ConnectionProvider}
|
* Callback about a connection being obtained from {@link org.hibernate.service.jdbc.connections.spi.ConnectionProvider}
|
||||||
*/
|
*/
|
||||||
public void connect();
|
public void connect();
|
||||||
|
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.tool.hbm2ddl;
|
package org.hibernate.tool.hbm2ddl;
|
||||||
|
|
||||||
import org.hibernate.connection.ConnectionProvider;
|
import org.hibernate.service.jdbc.connections.spi.ConnectionProvider;
|
||||||
import org.hibernate.connection.ConnectionProviderFactory;
|
import org.hibernate.service.spi.Stoppable;
|
||||||
import org.hibernate.util.JDBCExceptionReporter;
|
import org.hibernate.util.JDBCExceptionReporter;
|
||||||
|
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
@ -48,12 +48,14 @@ class ManagedProviderConnectionHelper implements ConnectionHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void prepare(boolean needsAutoCommit) throws SQLException {
|
public void prepare(boolean needsAutoCommit) throws SQLException {
|
||||||
connectionProvider = ConnectionProviderFactory.newConnectionProvider( cfgProperties );
|
/* TEMP TEMP TEMP
|
||||||
|
connectionProvider = ConnectionProviderBuilder.buildConnectionProvider();
|
||||||
connection = connectionProvider.getConnection();
|
connection = connectionProvider.getConnection();
|
||||||
if ( needsAutoCommit && !connection.getAutoCommit() ) {
|
if ( needsAutoCommit && !connection.getAutoCommit() ) {
|
||||||
connection.commit();
|
connection.commit();
|
||||||
connection.setAutoCommit( true );
|
connection.setAutoCommit( true );
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
public Connection getConnection() throws SQLException {
|
public Connection getConnection() throws SQLException {
|
||||||
|
@ -67,7 +69,10 @@ class ManagedProviderConnectionHelper implements ConnectionHelper {
|
||||||
connectionProvider.closeConnection( connection );
|
connectionProvider.closeConnection( connection );
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
connectionProvider.close();
|
if ( connectionProvider instanceof Stoppable ) {
|
||||||
|
( ( Stoppable ) connectionProvider ).stop();
|
||||||
|
}
|
||||||
|
connectionProvider = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
connection = null;
|
connection = null;
|
||||||
|
|
|
@ -49,12 +49,12 @@ import org.hibernate.JDBCException;
|
||||||
import org.hibernate.cfg.Configuration;
|
import org.hibernate.cfg.Configuration;
|
||||||
import org.hibernate.cfg.Environment;
|
import org.hibernate.cfg.Environment;
|
||||||
import org.hibernate.cfg.NamingStrategy;
|
import org.hibernate.cfg.NamingStrategy;
|
||||||
import org.hibernate.cfg.Settings;
|
|
||||||
import org.hibernate.dialect.Dialect;
|
import org.hibernate.dialect.Dialect;
|
||||||
|
import org.hibernate.engine.jdbc.spi.JdbcServices;
|
||||||
|
import org.hibernate.engine.jdbc.spi.SQLStatementLogger;
|
||||||
import org.hibernate.internal.util.config.ConfigurationHelper;
|
import org.hibernate.internal.util.config.ConfigurationHelper;
|
||||||
import org.hibernate.jdbc.util.FormatStyle;
|
import org.hibernate.jdbc.util.FormatStyle;
|
||||||
import org.hibernate.jdbc.util.Formatter;
|
import org.hibernate.jdbc.util.Formatter;
|
||||||
import org.hibernate.jdbc.util.SQLStatementLogger;
|
|
||||||
import org.hibernate.util.ConfigHelper;
|
import org.hibernate.util.ConfigHelper;
|
||||||
import org.hibernate.util.JDBCExceptionReporter;
|
import org.hibernate.util.JDBCExceptionReporter;
|
||||||
import org.hibernate.util.ReflectHelper;
|
import org.hibernate.util.ReflectHelper;
|
||||||
|
@ -99,14 +99,17 @@ public class SchemaExport {
|
||||||
* @param settings The 'parsed' settings.
|
* @param settings The 'parsed' settings.
|
||||||
* @throws HibernateException Indicates problem preparing for schema export.
|
* @throws HibernateException Indicates problem preparing for schema export.
|
||||||
*/
|
*/
|
||||||
public SchemaExport(Configuration cfg, Settings settings) throws HibernateException {
|
public SchemaExport(JdbcServices jdbcServices, Configuration cfg) throws HibernateException {
|
||||||
dialect = settings.getDialect();
|
dialect = jdbcServices.getDialect();
|
||||||
connectionHelper = new SuppliedConnectionProviderConnectionHelper( settings.getConnectionProvider() );
|
connectionHelper = new SuppliedConnectionProviderConnectionHelper( jdbcServices.getConnectionProvider() );
|
||||||
dropSQL = cfg.generateDropSchemaScript( dialect );
|
dropSQL = cfg.generateDropSchemaScript( dialect );
|
||||||
createSQL = cfg.generateSchemaCreationScript( dialect );
|
createSQL = cfg.generateSchemaCreationScript( dialect );
|
||||||
sqlStatementLogger = settings.getSqlStatementLogger();
|
sqlStatementLogger = jdbcServices.getSqlStatementLogger();
|
||||||
formatter = ( sqlStatementLogger.isFormatSql() ? FormatStyle.DDL : FormatStyle.NONE ).getFormatter();
|
formatter = ( sqlStatementLogger.isFormat() ? FormatStyle.DDL : FormatStyle.NONE ).getFormatter();
|
||||||
importFiles = settings.getImportFiles() != null ? settings.getImportFiles() : DEFAULT_IMPORT_FILE;
|
importFiles = ConfigurationHelper.getString(
|
||||||
|
Environment.HBM2DDL_IMPORT_FILES, cfg.getProperties(),
|
||||||
|
DEFAULT_IMPORT_FILE
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -41,9 +41,10 @@ import org.hibernate.cfg.Environment;
|
||||||
import org.hibernate.cfg.NamingStrategy;
|
import org.hibernate.cfg.NamingStrategy;
|
||||||
import org.hibernate.cfg.Settings;
|
import org.hibernate.cfg.Settings;
|
||||||
import org.hibernate.dialect.Dialect;
|
import org.hibernate.dialect.Dialect;
|
||||||
|
import org.hibernate.engine.jdbc.spi.JdbcServices;
|
||||||
import org.hibernate.jdbc.util.FormatStyle;
|
import org.hibernate.jdbc.util.FormatStyle;
|
||||||
import org.hibernate.jdbc.util.Formatter;
|
import org.hibernate.jdbc.util.Formatter;
|
||||||
import org.hibernate.jdbc.util.SQLStatementLogger;
|
import org.hibernate.engine.jdbc.spi.SQLStatementLogger;
|
||||||
import org.hibernate.internal.util.config.ConfigurationHelper;
|
import org.hibernate.internal.util.config.ConfigurationHelper;
|
||||||
import org.hibernate.util.ReflectHelper;
|
import org.hibernate.util.ReflectHelper;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
@ -84,15 +85,15 @@ public class SchemaUpdate {
|
||||||
formatter = ( ConfigurationHelper.getBoolean( Environment.FORMAT_SQL, props ) ? FormatStyle.DDL : FormatStyle.NONE ).getFormatter();
|
formatter = ( ConfigurationHelper.getBoolean( Environment.FORMAT_SQL, props ) ? FormatStyle.DDL : FormatStyle.NONE ).getFormatter();
|
||||||
}
|
}
|
||||||
|
|
||||||
public SchemaUpdate(Configuration cfg, Settings settings) throws HibernateException {
|
public SchemaUpdate(JdbcServices jdbcServices, Configuration cfg) throws HibernateException {
|
||||||
this.configuration = cfg;
|
this.configuration = cfg;
|
||||||
dialect = settings.getDialect();
|
dialect = jdbcServices.getDialect();
|
||||||
connectionHelper = new SuppliedConnectionProviderConnectionHelper(
|
connectionHelper = new SuppliedConnectionProviderConnectionHelper(
|
||||||
settings.getConnectionProvider()
|
jdbcServices.getConnectionProvider()
|
||||||
);
|
);
|
||||||
exceptions = new ArrayList();
|
exceptions = new ArrayList();
|
||||||
sqlStatementLogger = settings.getSqlStatementLogger();
|
sqlStatementLogger = jdbcServices.getSqlStatementLogger();
|
||||||
formatter = ( sqlStatementLogger.isFormatSql() ? FormatStyle.DDL : FormatStyle.NONE ).getFormatter();
|
formatter = ( sqlStatementLogger.isFormat() ? FormatStyle.DDL : FormatStyle.NONE ).getFormatter();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
|
|
@ -36,6 +36,7 @@ import org.hibernate.cfg.Configuration;
|
||||||
import org.hibernate.cfg.NamingStrategy;
|
import org.hibernate.cfg.NamingStrategy;
|
||||||
import org.hibernate.cfg.Settings;
|
import org.hibernate.cfg.Settings;
|
||||||
import org.hibernate.dialect.Dialect;
|
import org.hibernate.dialect.Dialect;
|
||||||
|
import org.hibernate.engine.jdbc.spi.JdbcServices;
|
||||||
import org.hibernate.util.ReflectHelper;
|
import org.hibernate.util.ReflectHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -64,11 +65,11 @@ public class SchemaValidator {
|
||||||
connectionHelper = new ManagedProviderConnectionHelper( props );
|
connectionHelper = new ManagedProviderConnectionHelper( props );
|
||||||
}
|
}
|
||||||
|
|
||||||
public SchemaValidator(Configuration cfg, Settings settings) throws HibernateException {
|
public SchemaValidator(JdbcServices jdbcServices, Configuration cfg ) throws HibernateException {
|
||||||
this.configuration = cfg;
|
this.configuration = cfg;
|
||||||
dialect = settings.getDialect();
|
dialect = jdbcServices.getDialect();
|
||||||
connectionHelper = new SuppliedConnectionProviderConnectionHelper(
|
connectionHelper = new SuppliedConnectionProviderConnectionHelper(
|
||||||
settings.getConnectionProvider()
|
jdbcServices.getConnectionProvider()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.tool.hbm2ddl;
|
package org.hibernate.tool.hbm2ddl;
|
||||||
|
|
||||||
import org.hibernate.connection.ConnectionProvider;
|
import org.hibernate.service.jdbc.connections.spi.ConnectionProvider;
|
||||||
import org.hibernate.util.JDBCExceptionReporter;
|
import org.hibernate.util.JDBCExceptionReporter;
|
||||||
|
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
|
|
|
@ -24,8 +24,10 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.util;
|
package org.hibernate.util;
|
||||||
|
|
||||||
|
import org.hibernate.SessionFactory;
|
||||||
import org.hibernate.cfg.Configuration;
|
import org.hibernate.cfg.Configuration;
|
||||||
import org.hibernate.cfg.Environment;
|
import org.hibernate.cfg.Environment;
|
||||||
|
import org.hibernate.cfg.internal.ServicesRegistryBootstrap;
|
||||||
import org.hibernate.internal.util.config.ConfigurationHelper;
|
import org.hibernate.internal.util.config.ConfigurationHelper;
|
||||||
|
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
|
@ -40,7 +40,7 @@ Note that there is a large degree of crossover between the notion of extension p
|
||||||
Hibernate provides a number of SPIs intended to integrate itself with various third party frameworks or application code to provide
|
Hibernate provides a number of SPIs intended to integrate itself with various third party frameworks or application code to provide
|
||||||
additional capabilities. The SPIs fall mainly into 2 categories:<ul>
|
additional capabilities. The SPIs fall mainly into 2 categories:<ul>
|
||||||
<li>Caching - {@link org.hibernate.cache.RegionFactory}</li>
|
<li>Caching - {@link org.hibernate.cache.RegionFactory}</li>
|
||||||
<li>JDBC Connection management - {@link org.hibernate.connection.ConnectionProvider}
|
<li>JDBC Connection management - {@link org.hibernate.service.jdbc.connections.spi.ConnectionProvider}
|
||||||
</ul>
|
</ul>
|
||||||
Certainly {@link org.hibernate.dialect.Dialect} could fit in here as well, though we chose to list it under extensions since application
|
Certainly {@link org.hibernate.dialect.Dialect} could fit in here as well, though we chose to list it under extensions since application
|
||||||
developers tend to provide extended dialects rather frequently for various reasons.
|
developers tend to provide extended dialects rather frequently for various reasons.
|
||||||
|
|
|
@ -28,6 +28,8 @@ import java.util.Properties;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
import org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Undocumented
|
* Undocumented
|
||||||
*
|
*
|
||||||
|
@ -46,7 +48,7 @@ public class PropertiesTest extends TestCase {
|
||||||
props.put("rpt.6.hibernate.connection.password_enc", "76f271db3661fd50082e68d4b953fbee");
|
props.put("rpt.6.hibernate.connection.password_enc", "76f271db3661fd50082e68d4b953fbee");
|
||||||
props.put("hibernate.connection.create", "true");
|
props.put("hibernate.connection.create", "true");
|
||||||
|
|
||||||
final Properties outputProps = ConnectionProviderFactory.getConnectionProperties(props);
|
final Properties outputProps = ConnectionProviderInitiator.getConnectionProperties( props );
|
||||||
assertEquals(1, outputProps.size());
|
assertEquals(1, outputProps.size());
|
||||||
assertEquals("true", outputProps.get("create"));
|
assertEquals("true", outputProps.get("create"));
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,7 @@ import org.hibernate.impl.SessionImpl;
|
||||||
import org.hibernate.jdbc.Work;
|
import org.hibernate.jdbc.Work;
|
||||||
import org.hibernate.mapping.SimpleAuxiliaryDatabaseObject;
|
import org.hibernate.mapping.SimpleAuxiliaryDatabaseObject;
|
||||||
import org.hibernate.TestingDatabaseInfo;
|
import org.hibernate.TestingDatabaseInfo;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* I went back to 3.3 source and grabbed the code/logic as it existed back then and crafted this
|
* I went back to 3.3 source and grabbed the code/logic as it existed back then and crafted this
|
||||||
|
@ -56,6 +57,7 @@ public class SequenceHiLoGeneratorNoIncrementTest extends TestCase {
|
||||||
private static final String TEST_SEQUENCE = "test_sequence";
|
private static final String TEST_SEQUENCE = "test_sequence";
|
||||||
|
|
||||||
private Configuration cfg;
|
private Configuration cfg;
|
||||||
|
ServiceRegistryHolder serviceRegistryHolder;
|
||||||
private SessionFactoryImplementor sessionFactory;
|
private SessionFactoryImplementor sessionFactory;
|
||||||
private SequenceHiLoGenerator generator;
|
private SequenceHiLoGenerator generator;
|
||||||
|
|
||||||
|
@ -95,7 +97,8 @@ public class SequenceHiLoGeneratorNoIncrementTest extends TestCase {
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
sessionFactory = (SessionFactoryImplementor) cfg.buildSessionFactory();
|
serviceRegistryHolder = new ServiceRegistryHolder( cfg.getProperties() );
|
||||||
|
sessionFactory = (SessionFactoryImplementor) cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -103,7 +106,9 @@ public class SequenceHiLoGeneratorNoIncrementTest extends TestCase {
|
||||||
if ( sessionFactory != null ) {
|
if ( sessionFactory != null ) {
|
||||||
sessionFactory.close();
|
sessionFactory.close();
|
||||||
}
|
}
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
}
|
||||||
super.tearDown();
|
super.tearDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,7 @@ import org.hibernate.engine.SessionFactoryImplementor;
|
||||||
import org.hibernate.impl.SessionImpl;
|
import org.hibernate.impl.SessionImpl;
|
||||||
import org.hibernate.jdbc.Work;
|
import org.hibernate.jdbc.Work;
|
||||||
import org.hibernate.mapping.SimpleAuxiliaryDatabaseObject;
|
import org.hibernate.mapping.SimpleAuxiliaryDatabaseObject;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* I went back to 3.3 source and grabbed the code/logic as it existed back then and crafted this
|
* I went back to 3.3 source and grabbed the code/logic as it existed back then and crafted this
|
||||||
|
@ -56,6 +57,7 @@ public class SequenceHiLoGeneratorTest extends TestCase {
|
||||||
private static final String TEST_SEQUENCE = "test_sequence";
|
private static final String TEST_SEQUENCE = "test_sequence";
|
||||||
|
|
||||||
private Configuration cfg;
|
private Configuration cfg;
|
||||||
|
private ServiceRegistryHolder serviceRegistryHolder;
|
||||||
private SessionFactoryImplementor sessionFactory;
|
private SessionFactoryImplementor sessionFactory;
|
||||||
private SequenceHiLoGenerator generator;
|
private SequenceHiLoGenerator generator;
|
||||||
|
|
||||||
|
@ -94,8 +96,10 @@ public class SequenceHiLoGeneratorTest extends TestCase {
|
||||||
generator.sqlDropStrings( dialect )[0]
|
generator.sqlDropStrings( dialect )[0]
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
serviceRegistryHolder = new ServiceRegistryHolder( cfg.getProperties() );
|
||||||
|
|
||||||
sessionFactory = (SessionFactoryImplementor) cfg.buildSessionFactory();
|
sessionFactory =
|
||||||
|
(SessionFactoryImplementor) cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -103,7 +107,9 @@ public class SequenceHiLoGeneratorTest extends TestCase {
|
||||||
if ( sessionFactory != null ) {
|
if ( sessionFactory != null ) {
|
||||||
sessionFactory.close();
|
sessionFactory.close();
|
||||||
}
|
}
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
}
|
||||||
super.tearDown();
|
super.tearDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,7 @@ import org.hibernate.engine.SessionFactoryImplementor;
|
||||||
import org.hibernate.impl.SessionImpl;
|
import org.hibernate.impl.SessionImpl;
|
||||||
import org.hibernate.jdbc.Work;
|
import org.hibernate.jdbc.Work;
|
||||||
import org.hibernate.mapping.SimpleAuxiliaryDatabaseObject;
|
import org.hibernate.mapping.SimpleAuxiliaryDatabaseObject;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* I went back to 3.3 source and grabbed the code/logic as it existed back then and crafted this
|
* I went back to 3.3 source and grabbed the code/logic as it existed back then and crafted this
|
||||||
|
@ -57,6 +58,7 @@ public class TableHiLoGeneratorTest extends TestCase {
|
||||||
private static final String GEN_COLUMN = TableHiLoGenerator.DEFAULT_COLUMN_NAME;
|
private static final String GEN_COLUMN = TableHiLoGenerator.DEFAULT_COLUMN_NAME;
|
||||||
|
|
||||||
private Configuration cfg;
|
private Configuration cfg;
|
||||||
|
private ServiceRegistryHolder serviceRegistryHolder;
|
||||||
private SessionFactoryImplementor sessionFactory;
|
private SessionFactoryImplementor sessionFactory;
|
||||||
private TableHiLoGenerator generator;
|
private TableHiLoGenerator generator;
|
||||||
|
|
||||||
|
@ -104,7 +106,9 @@ public class TableHiLoGeneratorTest extends TestCase {
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
sessionFactory = (SessionFactoryImplementor) cfg.buildSessionFactory();
|
serviceRegistryHolder = new ServiceRegistryHolder( cfg.getProperties() );
|
||||||
|
sessionFactory =
|
||||||
|
(SessionFactoryImplementor) cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -112,6 +116,9 @@ public class TableHiLoGeneratorTest extends TestCase {
|
||||||
if ( sessionFactory != null ) {
|
if ( sessionFactory != null ) {
|
||||||
sessionFactory.close();
|
sessionFactory.close();
|
||||||
}
|
}
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
super.tearDown();
|
super.tearDown();
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ import junit.framework.TestCase;
|
||||||
import org.hibernate.cfg.Configuration;
|
import org.hibernate.cfg.Configuration;
|
||||||
import org.hibernate.cfg.Environment;
|
import org.hibernate.cfg.Environment;
|
||||||
import org.hibernate.dialect.H2Dialect;
|
import org.hibernate.dialect.H2Dialect;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO : javadoc
|
* TODO : javadoc
|
||||||
|
@ -39,6 +40,8 @@ public class SubclassProxyInterfaceTest extends TestCase {
|
||||||
final Configuration cfg = new Configuration()
|
final Configuration cfg = new Configuration()
|
||||||
.setProperty( Environment.DIALECT, H2Dialect.class.getName() );
|
.setProperty( Environment.DIALECT, H2Dialect.class.getName() );
|
||||||
cfg.addClass( Person.class );
|
cfg.addClass( Person.class );
|
||||||
cfg.buildSessionFactory().close();
|
ServiceRegistryHolder serviceRegistryHolder = new ServiceRegistryHolder( cfg.getProperties() );
|
||||||
|
cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() ).close();
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,16 +10,29 @@ import org.hibernate.Transaction;
|
||||||
import org.hibernate.cfg.AnnotationConfiguration;
|
import org.hibernate.cfg.AnnotationConfiguration;
|
||||||
import org.hibernate.cfg.Configuration;
|
import org.hibernate.cfg.Configuration;
|
||||||
import org.hibernate.cfg.Environment;
|
import org.hibernate.cfg.Environment;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Emmanuel Bernard
|
* @author Emmanuel Bernard
|
||||||
*/
|
*/
|
||||||
public class ConfigurationTest extends junit.framework.TestCase {
|
public class ConfigurationTest extends junit.framework.TestCase {
|
||||||
|
private ServiceRegistryHolder serviceRegistryHolder;
|
||||||
|
|
||||||
|
protected void setUp() {
|
||||||
|
serviceRegistryHolder = new ServiceRegistryHolder( Environment.getProperties() );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void tearDown() {
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void testDeclarativeMix() throws Exception {
|
public void testDeclarativeMix() throws Exception {
|
||||||
AnnotationConfiguration cfg = new AnnotationConfiguration();
|
AnnotationConfiguration cfg = new AnnotationConfiguration();
|
||||||
cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
|
cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
|
||||||
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
|
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
|
||||||
SessionFactory sf = cfg.buildSessionFactory();
|
SessionFactory sf = cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
assertNotNull( sf );
|
assertNotNull( sf );
|
||||||
Session s = sf.openSession();
|
Session s = sf.openSession();
|
||||||
Transaction tx = s.beginTransaction();
|
Transaction tx = s.beginTransaction();
|
||||||
|
@ -37,7 +50,7 @@ public class ConfigurationTest extends junit.framework.TestCase {
|
||||||
cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
|
cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
|
||||||
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
|
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
|
||||||
cfg.setProperty( AnnotationConfiguration.ARTEFACT_PROCESSING_ORDER, "class" );
|
cfg.setProperty( AnnotationConfiguration.ARTEFACT_PROCESSING_ORDER, "class" );
|
||||||
SessionFactory sf = cfg.buildSessionFactory();
|
SessionFactory sf = cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
assertNotNull( sf );
|
assertNotNull( sf );
|
||||||
Session s = sf.openSession();
|
Session s = sf.openSession();
|
||||||
Transaction tx = s.beginTransaction();
|
Transaction tx = s.beginTransaction();
|
||||||
|
@ -61,7 +74,7 @@ public class ConfigurationTest extends junit.framework.TestCase {
|
||||||
cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
|
cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
|
||||||
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
|
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
|
||||||
cfg.addAnnotatedClass( Boat.class );
|
cfg.addAnnotatedClass( Boat.class );
|
||||||
SessionFactory sf = cfg.buildSessionFactory();
|
SessionFactory sf = cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
assertNotNull( sf );
|
assertNotNull( sf );
|
||||||
Session s = sf.openSession();
|
Session s = sf.openSession();
|
||||||
s.getTransaction().begin();
|
s.getTransaction().begin();
|
||||||
|
@ -87,7 +100,7 @@ public class ConfigurationTest extends junit.framework.TestCase {
|
||||||
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
|
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
|
||||||
cfg.setProperty( AnnotationConfiguration.ARTEFACT_PROCESSING_ORDER, "class, hbm" );
|
cfg.setProperty( AnnotationConfiguration.ARTEFACT_PROCESSING_ORDER, "class, hbm" );
|
||||||
cfg.addAnnotatedClass( Boat.class );
|
cfg.addAnnotatedClass( Boat.class );
|
||||||
SessionFactory sf = cfg.buildSessionFactory();
|
SessionFactory sf = cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
assertNotNull( sf );
|
assertNotNull( sf );
|
||||||
Session s = sf.openSession();
|
Session s = sf.openSession();
|
||||||
s.getTransaction().begin();
|
s.getTransaction().begin();
|
||||||
|
@ -111,7 +124,7 @@ public class ConfigurationTest extends junit.framework.TestCase {
|
||||||
cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
|
cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
|
||||||
cfg.addClass( Ferry.class );
|
cfg.addClass( Ferry.class );
|
||||||
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
|
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
|
||||||
SessionFactory sf = cfg.buildSessionFactory();
|
SessionFactory sf = cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
assertNotNull( sf );
|
assertNotNull( sf );
|
||||||
Session s = sf.openSession();
|
Session s = sf.openSession();
|
||||||
Transaction tx = s.beginTransaction();
|
Transaction tx = s.beginTransaction();
|
||||||
|
@ -129,7 +142,7 @@ public class ConfigurationTest extends junit.framework.TestCase {
|
||||||
cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
|
cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
|
||||||
cfg.addAnnotatedClass( Port.class );
|
cfg.addAnnotatedClass( Port.class );
|
||||||
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
|
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
|
||||||
SessionFactory sf = cfg.buildSessionFactory();
|
SessionFactory sf = cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
assertNotNull( sf );
|
assertNotNull( sf );
|
||||||
Session s = sf.openSession();
|
Session s = sf.openSession();
|
||||||
Transaction tx = s.beginTransaction();
|
Transaction tx = s.beginTransaction();
|
||||||
|
|
|
@ -5,6 +5,7 @@ import org.hibernate.AnnotationException;
|
||||||
import org.hibernate.SessionFactory;
|
import org.hibernate.SessionFactory;
|
||||||
import org.hibernate.cfg.AnnotationConfiguration;
|
import org.hibernate.cfg.AnnotationConfiguration;
|
||||||
import org.hibernate.cfg.Environment;
|
import org.hibernate.cfg.Environment;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Emmanuel Bernard
|
* @author Emmanuel Bernard
|
||||||
|
@ -14,12 +15,19 @@ public class SafeMappingTest extends junit.framework.TestCase {
|
||||||
AnnotationConfiguration cfg = new AnnotationConfiguration();
|
AnnotationConfiguration cfg = new AnnotationConfiguration();
|
||||||
cfg.addAnnotatedClass( IncorrectEntity.class );
|
cfg.addAnnotatedClass( IncorrectEntity.class );
|
||||||
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
|
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
|
||||||
|
ServiceRegistryHolder serviceRegistryHolder = null;
|
||||||
try {
|
try {
|
||||||
SessionFactory sf = cfg.buildSessionFactory();
|
serviceRegistryHolder = new ServiceRegistryHolder( cfg.getProperties() );
|
||||||
|
SessionFactory sf = cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
fail( "Entity wo id should fail" );
|
fail( "Entity wo id should fail" );
|
||||||
}
|
}
|
||||||
catch (AnnotationException e) {
|
catch (AnnotationException e) {
|
||||||
//success
|
//success
|
||||||
}
|
}
|
||||||
|
finally {
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ import org.hibernate.HibernateException;
|
||||||
import org.hibernate.SessionFactory;
|
import org.hibernate.SessionFactory;
|
||||||
import org.hibernate.cfg.AnnotationConfiguration;
|
import org.hibernate.cfg.AnnotationConfiguration;
|
||||||
import org.hibernate.cfg.Environment;
|
import org.hibernate.cfg.Environment;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Emmanuel Bernard
|
* @author Emmanuel Bernard
|
||||||
|
@ -30,14 +31,21 @@ public class SecuredBindingTest extends TestCase {
|
||||||
ac.setProperties( p );
|
ac.setProperties( p );
|
||||||
ac.addAnnotatedClass( Plane.class );
|
ac.addAnnotatedClass( Plane.class );
|
||||||
SessionFactory sf;
|
SessionFactory sf;
|
||||||
|
ServiceRegistryHolder serviceRegistryHolder = null;
|
||||||
try {
|
try {
|
||||||
sf = ac.buildSessionFactory();
|
serviceRegistryHolder = new ServiceRegistryHolder( p );
|
||||||
|
sf = ac.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
fail( "Driver property overriding should work" );
|
fail( "Driver property overriding should work" );
|
||||||
sf.close();
|
sf.close();
|
||||||
}
|
}
|
||||||
catch (HibernateException he) {
|
catch (HibernateException he) {
|
||||||
//success
|
//success
|
||||||
}
|
}
|
||||||
|
finally {
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,7 @@ import org.hibernate.SessionFactory;
|
||||||
import org.hibernate.cfg.AnnotationConfiguration;
|
import org.hibernate.cfg.AnnotationConfiguration;
|
||||||
import org.hibernate.cfg.Environment;
|
import org.hibernate.cfg.Environment;
|
||||||
import org.hibernate.engine.SessionFactoryImplementor;
|
import org.hibernate.engine.SessionFactoryImplementor;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
import org.hibernate.testing.junit.functional.annotations.HibernateTestCase;
|
import org.hibernate.testing.junit.functional.annotations.HibernateTestCase;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -103,7 +104,7 @@ public abstract class TestCase extends HibernateTestCase {
|
||||||
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream( xmlFile );
|
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream( xmlFile );
|
||||||
getCfg().addInputStream( is );
|
getCfg().addInputStream( is );
|
||||||
}
|
}
|
||||||
sessions = getCfg().buildSessionFactory();
|
sessions = getCfg().buildSessionFactory( getServiceRegistry() );
|
||||||
}
|
}
|
||||||
catch ( Exception e ) {
|
catch ( Exception e ) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -146,5 +147,6 @@ public abstract class TestCase extends HibernateTestCase {
|
||||||
}
|
}
|
||||||
catch ( Exception ignore ) {
|
catch ( Exception ignore ) {
|
||||||
}
|
}
|
||||||
|
super.closeResources();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,9 +29,11 @@ import junit.framework.TestCase;
|
||||||
import org.hibernate.EntityMode;
|
import org.hibernate.EntityMode;
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.cfg.AnnotationConfiguration;
|
import org.hibernate.cfg.AnnotationConfiguration;
|
||||||
|
import org.hibernate.cfg.Environment;
|
||||||
import org.hibernate.engine.SessionFactoryImplementor;
|
import org.hibernate.engine.SessionFactoryImplementor;
|
||||||
import org.hibernate.property.BasicPropertyAccessor;
|
import org.hibernate.property.BasicPropertyAccessor;
|
||||||
import org.hibernate.property.DirectPropertyAccessor;
|
import org.hibernate.property.DirectPropertyAccessor;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
import org.hibernate.tuple.entity.EntityMetamodel;
|
import org.hibernate.tuple.entity.EntityMetamodel;
|
||||||
import org.hibernate.tuple.entity.PojoEntityTuplizer;
|
import org.hibernate.tuple.entity.PojoEntityTuplizer;
|
||||||
|
|
||||||
|
@ -43,12 +45,24 @@ import org.hibernate.tuple.entity.PojoEntityTuplizer;
|
||||||
*/
|
*/
|
||||||
public class AccessMappingTest extends TestCase {
|
public class AccessMappingTest extends TestCase {
|
||||||
|
|
||||||
|
private ServiceRegistryHolder serviceRegistryHolder;
|
||||||
|
|
||||||
|
protected void setUp() {
|
||||||
|
serviceRegistryHolder = new ServiceRegistryHolder( Environment.getProperties() );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void tearDown() {
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void testInconsistentAnnotationPlacement() throws Exception {
|
public void testInconsistentAnnotationPlacement() throws Exception {
|
||||||
AnnotationConfiguration cfg = new AnnotationConfiguration();
|
AnnotationConfiguration cfg = new AnnotationConfiguration();
|
||||||
cfg.addAnnotatedClass( Course1.class );
|
cfg.addAnnotatedClass( Course1.class );
|
||||||
cfg.addAnnotatedClass( Student.class );
|
cfg.addAnnotatedClass( Student.class );
|
||||||
try {
|
try {
|
||||||
cfg.buildSessionFactory();
|
cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
fail( "@Id and @OneToMany are not placed consistently in test entities. SessionFactory creation should fail." );
|
fail( "@Id and @OneToMany are not placed consistently in test entities. SessionFactory creation should fail." );
|
||||||
}
|
}
|
||||||
catch ( MappingException e ) {
|
catch ( MappingException e ) {
|
||||||
|
@ -61,7 +75,7 @@ public class AccessMappingTest extends TestCase {
|
||||||
Class<?> classUnderTest = Course6.class;
|
Class<?> classUnderTest = Course6.class;
|
||||||
cfg.addAnnotatedClass( classUnderTest );
|
cfg.addAnnotatedClass( classUnderTest );
|
||||||
cfg.addAnnotatedClass( Student.class );
|
cfg.addAnnotatedClass( Student.class );
|
||||||
SessionFactoryImplementor factory = ( SessionFactoryImplementor ) cfg.buildSessionFactory();
|
SessionFactoryImplementor factory = ( SessionFactoryImplementor ) cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
EntityMetamodel metaModel = factory.getEntityPersister( classUnderTest.getName() )
|
EntityMetamodel metaModel = factory.getEntityPersister( classUnderTest.getName() )
|
||||||
.getEntityMetamodel();
|
.getEntityMetamodel();
|
||||||
PojoEntityTuplizer tuplizer = ( PojoEntityTuplizer ) metaModel.getTuplizer( EntityMode.POJO );
|
PojoEntityTuplizer tuplizer = ( PojoEntityTuplizer ) metaModel.getTuplizer( EntityMode.POJO );
|
||||||
|
@ -76,7 +90,7 @@ public class AccessMappingTest extends TestCase {
|
||||||
Class<?> classUnderTest = Course7.class;
|
Class<?> classUnderTest = Course7.class;
|
||||||
cfg.addAnnotatedClass( classUnderTest );
|
cfg.addAnnotatedClass( classUnderTest );
|
||||||
cfg.addAnnotatedClass( Student.class );
|
cfg.addAnnotatedClass( Student.class );
|
||||||
SessionFactoryImplementor factory = ( SessionFactoryImplementor ) cfg.buildSessionFactory();
|
SessionFactoryImplementor factory = ( SessionFactoryImplementor ) cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
EntityMetamodel metaModel = factory.getEntityPersister( classUnderTest.getName() )
|
EntityMetamodel metaModel = factory.getEntityPersister( classUnderTest.getName() )
|
||||||
.getEntityMetamodel();
|
.getEntityMetamodel();
|
||||||
PojoEntityTuplizer tuplizer = ( PojoEntityTuplizer ) metaModel.getTuplizer( EntityMode.POJO );
|
PojoEntityTuplizer tuplizer = ( PojoEntityTuplizer ) metaModel.getTuplizer( EntityMode.POJO );
|
||||||
|
@ -91,7 +105,7 @@ public class AccessMappingTest extends TestCase {
|
||||||
Class<?> classUnderTest = Course2.class;
|
Class<?> classUnderTest = Course2.class;
|
||||||
cfg.addAnnotatedClass( classUnderTest );
|
cfg.addAnnotatedClass( classUnderTest );
|
||||||
cfg.addAnnotatedClass( Student.class );
|
cfg.addAnnotatedClass( Student.class );
|
||||||
SessionFactoryImplementor factory = ( SessionFactoryImplementor ) cfg.buildSessionFactory();
|
SessionFactoryImplementor factory = ( SessionFactoryImplementor ) cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
EntityMetamodel metaModel = factory.getEntityPersister( classUnderTest.getName() )
|
EntityMetamodel metaModel = factory.getEntityPersister( classUnderTest.getName() )
|
||||||
.getEntityMetamodel();
|
.getEntityMetamodel();
|
||||||
PojoEntityTuplizer tuplizer = ( PojoEntityTuplizer ) metaModel.getTuplizer( EntityMode.POJO );
|
PojoEntityTuplizer tuplizer = ( PojoEntityTuplizer ) metaModel.getTuplizer( EntityMode.POJO );
|
||||||
|
@ -106,7 +120,7 @@ public class AccessMappingTest extends TestCase {
|
||||||
cfg.addAnnotatedClass( Course4.class );
|
cfg.addAnnotatedClass( Course4.class );
|
||||||
cfg.addAnnotatedClass( Student.class );
|
cfg.addAnnotatedClass( Student.class );
|
||||||
try {
|
try {
|
||||||
cfg.buildSessionFactory();
|
cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
fail( "@Id and @OneToMany are not placed consistently in test entities. SessionFactory creation should fail." );
|
fail( "@Id and @OneToMany are not placed consistently in test entities. SessionFactory creation should fail." );
|
||||||
}
|
}
|
||||||
catch ( MappingException e ) {
|
catch ( MappingException e ) {
|
||||||
|
@ -119,7 +133,7 @@ public class AccessMappingTest extends TestCase {
|
||||||
Class<?> classUnderTest = Course3.class;
|
Class<?> classUnderTest = Course3.class;
|
||||||
cfg.addAnnotatedClass( classUnderTest );
|
cfg.addAnnotatedClass( classUnderTest );
|
||||||
cfg.addAnnotatedClass( Student.class );
|
cfg.addAnnotatedClass( Student.class );
|
||||||
SessionFactoryImplementor factory = ( SessionFactoryImplementor ) cfg.buildSessionFactory();
|
SessionFactoryImplementor factory = ( SessionFactoryImplementor ) cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
EntityMetamodel metaModel = factory.getEntityPersister( classUnderTest.getName() )
|
EntityMetamodel metaModel = factory.getEntityPersister( classUnderTest.getName() )
|
||||||
.getEntityMetamodel();
|
.getEntityMetamodel();
|
||||||
PojoEntityTuplizer tuplizer = ( PojoEntityTuplizer ) metaModel.getTuplizer( EntityMode.POJO );
|
PojoEntityTuplizer tuplizer = ( PojoEntityTuplizer ) metaModel.getTuplizer( EntityMode.POJO );
|
||||||
|
@ -139,7 +153,7 @@ public class AccessMappingTest extends TestCase {
|
||||||
Class<?> classUnderTest = Course5.class;
|
Class<?> classUnderTest = Course5.class;
|
||||||
cfg.addAnnotatedClass( classUnderTest );
|
cfg.addAnnotatedClass( classUnderTest );
|
||||||
cfg.addAnnotatedClass( Student.class );
|
cfg.addAnnotatedClass( Student.class );
|
||||||
SessionFactoryImplementor factory = ( SessionFactoryImplementor ) cfg.buildSessionFactory();
|
SessionFactoryImplementor factory = ( SessionFactoryImplementor ) cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
EntityMetamodel metaModel = factory.getEntityPersister( classUnderTest.getName() )
|
EntityMetamodel metaModel = factory.getEntityPersister( classUnderTest.getName() )
|
||||||
.getEntityMetamodel();
|
.getEntityMetamodel();
|
||||||
PojoEntityTuplizer tuplizer = ( PojoEntityTuplizer ) metaModel.getTuplizer( EntityMode.POJO );
|
PojoEntityTuplizer tuplizer = ( PojoEntityTuplizer ) metaModel.getTuplizer( EntityMode.POJO );
|
||||||
|
@ -160,7 +174,7 @@ public class AccessMappingTest extends TestCase {
|
||||||
cfg.addAnnotatedClass( classUnderTest );
|
cfg.addAnnotatedClass( classUnderTest );
|
||||||
cfg.addAnnotatedClass( Person.class );
|
cfg.addAnnotatedClass( Person.class );
|
||||||
cfg.addAnnotatedClass( Being.class );
|
cfg.addAnnotatedClass( Being.class );
|
||||||
SessionFactoryImplementor factory = ( SessionFactoryImplementor ) cfg.buildSessionFactory();
|
SessionFactoryImplementor factory = ( SessionFactoryImplementor ) cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
EntityMetamodel metaModel = factory.getEntityPersister( classUnderTest.getName() )
|
EntityMetamodel metaModel = factory.getEntityPersister( classUnderTest.getName() )
|
||||||
.getEntityMetamodel();
|
.getEntityMetamodel();
|
||||||
PojoEntityTuplizer tuplizer = ( PojoEntityTuplizer ) metaModel.getTuplizer( EntityMode.POJO );
|
PojoEntityTuplizer tuplizer = ( PojoEntityTuplizer ) metaModel.getTuplizer( EntityMode.POJO );
|
||||||
|
@ -175,7 +189,7 @@ public class AccessMappingTest extends TestCase {
|
||||||
cfg.addAnnotatedClass( Horse.class );
|
cfg.addAnnotatedClass( Horse.class );
|
||||||
cfg.addAnnotatedClass( Animal.class );
|
cfg.addAnnotatedClass( Animal.class );
|
||||||
|
|
||||||
SessionFactoryImplementor factory = ( SessionFactoryImplementor ) cfg.buildSessionFactory();
|
SessionFactoryImplementor factory = ( SessionFactoryImplementor ) cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
EntityMetamodel metaModel = factory.getEntityPersister( Animal.class.getName() )
|
EntityMetamodel metaModel = factory.getEntityPersister( Animal.class.getName() )
|
||||||
.getEntityMetamodel();
|
.getEntityMetamodel();
|
||||||
PojoEntityTuplizer tuplizer = ( PojoEntityTuplizer ) metaModel.getTuplizer( EntityMode.POJO );
|
PojoEntityTuplizer tuplizer = ( PojoEntityTuplizer ) metaModel.getTuplizer( EntityMode.POJO );
|
||||||
|
@ -200,6 +214,6 @@ public class AccessMappingTest extends TestCase {
|
||||||
AnnotationConfiguration cfg = new AnnotationConfiguration();
|
AnnotationConfiguration cfg = new AnnotationConfiguration();
|
||||||
cfg.addAnnotatedClass( Course8.class );
|
cfg.addAnnotatedClass( Course8.class );
|
||||||
cfg.addAnnotatedClass( Student.class );
|
cfg.addAnnotatedClass( Student.class );
|
||||||
cfg.buildSessionFactory();
|
cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -34,9 +34,11 @@ import junit.framework.TestCase;
|
||||||
|
|
||||||
import org.hibernate.EntityMode;
|
import org.hibernate.EntityMode;
|
||||||
import org.hibernate.cfg.AnnotationConfiguration;
|
import org.hibernate.cfg.AnnotationConfiguration;
|
||||||
|
import org.hibernate.cfg.Environment;
|
||||||
import org.hibernate.engine.SessionFactoryImplementor;
|
import org.hibernate.engine.SessionFactoryImplementor;
|
||||||
import org.hibernate.property.BasicPropertyAccessor;
|
import org.hibernate.property.BasicPropertyAccessor;
|
||||||
import org.hibernate.property.DirectPropertyAccessor;
|
import org.hibernate.property.DirectPropertyAccessor;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
import org.hibernate.tuple.entity.EntityMetamodel;
|
import org.hibernate.tuple.entity.EntityMetamodel;
|
||||||
import org.hibernate.tuple.entity.PojoEntityTuplizer;
|
import org.hibernate.tuple.entity.PojoEntityTuplizer;
|
||||||
|
|
||||||
|
@ -48,6 +50,18 @@ import org.hibernate.tuple.entity.PojoEntityTuplizer;
|
||||||
*/
|
*/
|
||||||
public class XmlAccessTest extends TestCase {
|
public class XmlAccessTest extends TestCase {
|
||||||
|
|
||||||
|
private ServiceRegistryHolder serviceRegistryHolder;
|
||||||
|
|
||||||
|
protected void setUp() {
|
||||||
|
serviceRegistryHolder = new ServiceRegistryHolder( Environment.getProperties() );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void tearDown() {
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void testAccessOnBasicXmlElement() throws Exception {
|
public void testAccessOnBasicXmlElement() throws Exception {
|
||||||
Class<?> classUnderTest = Tourist.class;
|
Class<?> classUnderTest = Tourist.class;
|
||||||
List<Class<?>> classes = new ArrayList<Class<?>>();
|
List<Class<?>> classes = new ArrayList<Class<?>>();
|
||||||
|
@ -170,7 +184,7 @@ public class XmlAccessTest extends TestCase {
|
||||||
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream( configFile );
|
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream( configFile );
|
||||||
cfg.addInputStream( is );
|
cfg.addInputStream( is );
|
||||||
}
|
}
|
||||||
return ( SessionFactoryImplementor ) cfg.buildSessionFactory();
|
return ( SessionFactoryImplementor ) cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
}
|
}
|
||||||
|
|
||||||
// uses the first getter of the tupelizer for the assertions
|
// uses the first getter of the tupelizer for the assertions
|
||||||
|
|
|
@ -8,6 +8,9 @@ import junit.framework.TestCase;
|
||||||
|
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.cfg.AnnotationConfiguration;
|
import org.hibernate.cfg.AnnotationConfiguration;
|
||||||
|
import org.hibernate.cfg.Environment;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
@ -21,12 +24,24 @@ public class BackquoteTest extends TestCase {
|
||||||
|
|
||||||
private Logger log = LoggerFactory.getLogger(BackquoteTest.class);
|
private Logger log = LoggerFactory.getLogger(BackquoteTest.class);
|
||||||
|
|
||||||
|
private ServiceRegistryHolder serviceRegistryHolder;
|
||||||
|
|
||||||
|
protected void setUp() {
|
||||||
|
serviceRegistryHolder = new ServiceRegistryHolder( Environment.getProperties() );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void tearDown() {
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void testBackquotes() {
|
public void testBackquotes() {
|
||||||
try {
|
try {
|
||||||
AnnotationConfiguration config = new AnnotationConfiguration();
|
AnnotationConfiguration config = new AnnotationConfiguration();
|
||||||
config.addAnnotatedClass(Bug.class);
|
config.addAnnotatedClass(Bug.class);
|
||||||
config.addAnnotatedClass(Category.class);
|
config.addAnnotatedClass(Category.class);
|
||||||
config.buildSessionFactory();
|
config.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
}
|
}
|
||||||
catch( Exception e ) {
|
catch( Exception e ) {
|
||||||
StringWriter writer = new StringWriter();
|
StringWriter writer = new StringWriter();
|
||||||
|
@ -48,7 +63,7 @@ public class BackquoteTest extends TestCase {
|
||||||
AnnotationConfiguration config = new AnnotationConfiguration();
|
AnnotationConfiguration config = new AnnotationConfiguration();
|
||||||
config.addAnnotatedClass(Printer.class);
|
config.addAnnotatedClass(Printer.class);
|
||||||
config.addAnnotatedClass(PrinterCable.class);
|
config.addAnnotatedClass(PrinterCable.class);
|
||||||
config.buildSessionFactory();
|
config.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
fail("expected MappingException to be thrown");
|
fail("expected MappingException to be thrown");
|
||||||
}
|
}
|
||||||
//we WANT MappingException to be thrown
|
//we WANT MappingException to be thrown
|
||||||
|
|
|
@ -5,6 +5,7 @@ import junit.framework.TestCase;
|
||||||
import org.hibernate.AnnotationException;
|
import org.hibernate.AnnotationException;
|
||||||
import org.hibernate.cfg.AnnotationConfiguration;
|
import org.hibernate.cfg.AnnotationConfiguration;
|
||||||
import org.hibernate.cfg.Environment;
|
import org.hibernate.cfg.Environment;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Emmanuel Bernard
|
* @author Emmanuel Bernard
|
||||||
|
@ -13,16 +14,23 @@ public class DuplicateTest extends TestCase {
|
||||||
public void testDuplicateEntityName() throws Exception {
|
public void testDuplicateEntityName() throws Exception {
|
||||||
AnnotationConfiguration cfg = new AnnotationConfiguration();
|
AnnotationConfiguration cfg = new AnnotationConfiguration();
|
||||||
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
|
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
|
||||||
|
ServiceRegistryHolder serviceRegistryHolder = null;
|
||||||
try {
|
try {
|
||||||
cfg.addAnnotatedClass( Flight.class );
|
cfg.addAnnotatedClass( Flight.class );
|
||||||
cfg.addAnnotatedClass( org.hibernate.test.annotations.Flight.class );
|
cfg.addAnnotatedClass( org.hibernate.test.annotations.Flight.class );
|
||||||
cfg.addResource( "org/hibernate/test/annotations/orm.xml" );
|
cfg.addResource( "org/hibernate/test/annotations/orm.xml" );
|
||||||
cfg.addResource( "org/hibernate/test/annotations/duplicatedgenerator/orm.xml" );
|
cfg.addResource( "org/hibernate/test/annotations/duplicatedgenerator/orm.xml" );
|
||||||
cfg.buildSessionFactory();
|
serviceRegistryHolder = new ServiceRegistryHolder( cfg.getProperties() );
|
||||||
|
cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
fail( "Should not be able to map the same entity name twice" );
|
fail( "Should not be able to map the same entity name twice" );
|
||||||
}
|
}
|
||||||
catch (AnnotationException ae) {
|
catch (AnnotationException ae) {
|
||||||
//success
|
//success
|
||||||
}
|
}
|
||||||
|
finally {
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -637,7 +637,7 @@ public class BasicHibernateAnnotationsTest extends TestCase {
|
||||||
try {
|
try {
|
||||||
AnnotationConfiguration config = new AnnotationConfiguration();
|
AnnotationConfiguration config = new AnnotationConfiguration();
|
||||||
config.addAnnotatedClass(LocalContactDetails.class);
|
config.addAnnotatedClass(LocalContactDetails.class);
|
||||||
config.buildSessionFactory();
|
config.buildSessionFactory( getServiceRegistry() );
|
||||||
fail("Did not throw expected exception");
|
fail("Did not throw expected exception");
|
||||||
}
|
}
|
||||||
catch( AnnotationException ex ) {
|
catch( AnnotationException ex ) {
|
||||||
|
|
|
@ -33,7 +33,9 @@ import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.cfg.AnnotationConfiguration;
|
import org.hibernate.cfg.AnnotationConfiguration;
|
||||||
|
import org.hibernate.cfg.Environment;
|
||||||
import org.hibernate.engine.SessionFactoryImplementor;
|
import org.hibernate.engine.SessionFactoryImplementor;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test case for HHH-4812
|
* Test case for HHH-4812
|
||||||
|
@ -44,13 +46,27 @@ public class FetchProfileTest extends TestCase {
|
||||||
|
|
||||||
private Logger log = LoggerFactory.getLogger( FetchProfileTest.class );
|
private Logger log = LoggerFactory.getLogger( FetchProfileTest.class );
|
||||||
|
|
||||||
|
private ServiceRegistryHolder serviceRegistryHolder;
|
||||||
|
|
||||||
|
protected void setUp() {
|
||||||
|
serviceRegistryHolder = new ServiceRegistryHolder( Environment.getProperties() );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void tearDown() {
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void testFetchProfileConfigured() {
|
public void testFetchProfileConfigured() {
|
||||||
AnnotationConfiguration config = new AnnotationConfiguration();
|
AnnotationConfiguration config = new AnnotationConfiguration();
|
||||||
config.addAnnotatedClass( Customer.class );
|
config.addAnnotatedClass( Customer.class );
|
||||||
config.addAnnotatedClass( Order.class );
|
config.addAnnotatedClass( Order.class );
|
||||||
config.addAnnotatedClass( SupportTickets.class );
|
config.addAnnotatedClass( SupportTickets.class );
|
||||||
config.addAnnotatedClass( Country.class );
|
config.addAnnotatedClass( Country.class );
|
||||||
SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory();
|
SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory(
|
||||||
|
serviceRegistryHolder.getServiceRegistry()
|
||||||
|
);
|
||||||
|
|
||||||
assertTrue(
|
assertTrue(
|
||||||
"fetch profile not parsed properly",
|
"fetch profile not parsed properly",
|
||||||
|
@ -69,7 +85,7 @@ public class FetchProfileTest extends TestCase {
|
||||||
config.addAnnotatedClass( Country.class );
|
config.addAnnotatedClass( Country.class );
|
||||||
|
|
||||||
try {
|
try {
|
||||||
config.buildSessionFactory();
|
config.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
fail();
|
fail();
|
||||||
}
|
}
|
||||||
catch ( MappingException e ) {
|
catch ( MappingException e ) {
|
||||||
|
@ -84,7 +100,7 @@ public class FetchProfileTest extends TestCase {
|
||||||
config.addAnnotatedClass( Country.class );
|
config.addAnnotatedClass( Country.class );
|
||||||
|
|
||||||
try {
|
try {
|
||||||
config.buildSessionFactory();
|
config.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
fail();
|
fail();
|
||||||
}
|
}
|
||||||
catch ( MappingException e ) {
|
catch ( MappingException e ) {
|
||||||
|
@ -99,7 +115,7 @@ public class FetchProfileTest extends TestCase {
|
||||||
config.addAnnotatedClass( Country.class );
|
config.addAnnotatedClass( Country.class );
|
||||||
|
|
||||||
try {
|
try {
|
||||||
config.buildSessionFactory();
|
config.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
fail();
|
fail();
|
||||||
}
|
}
|
||||||
catch ( MappingException e ) {
|
catch ( MappingException e ) {
|
||||||
|
@ -116,7 +132,9 @@ public class FetchProfileTest extends TestCase {
|
||||||
.getContextClassLoader()
|
.getContextClassLoader()
|
||||||
.getResourceAsStream( "org/hibernate/test/annotations/fetchprofile/mappings.hbm.xml" );
|
.getResourceAsStream( "org/hibernate/test/annotations/fetchprofile/mappings.hbm.xml" );
|
||||||
config.addInputStream( is );
|
config.addInputStream( is );
|
||||||
SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory();
|
SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory(
|
||||||
|
serviceRegistryHolder.getServiceRegistry()
|
||||||
|
);
|
||||||
|
|
||||||
assertTrue(
|
assertTrue(
|
||||||
"fetch profile not parsed properly",
|
"fetch profile not parsed properly",
|
||||||
|
@ -129,7 +147,7 @@ public class FetchProfileTest extends TestCase {
|
||||||
config.addAnnotatedClass( Order.class );
|
config.addAnnotatedClass( Order.class );
|
||||||
config.addAnnotatedClass( Country.class );
|
config.addAnnotatedClass( Country.class );
|
||||||
try {
|
try {
|
||||||
config.buildSessionFactory();
|
config.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
fail();
|
fail();
|
||||||
}
|
}
|
||||||
catch ( MappingException e ) {
|
catch ( MappingException e ) {
|
||||||
|
@ -144,7 +162,9 @@ public class FetchProfileTest extends TestCase {
|
||||||
config.addAnnotatedClass( SupportTickets.class );
|
config.addAnnotatedClass( SupportTickets.class );
|
||||||
config.addAnnotatedClass( Country.class );
|
config.addAnnotatedClass( Country.class );
|
||||||
config.addPackage( Customer.class.getPackage().getName() );
|
config.addPackage( Customer.class.getPackage().getName() );
|
||||||
SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory();
|
SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory(
|
||||||
|
serviceRegistryHolder.getServiceRegistry()
|
||||||
|
);
|
||||||
|
|
||||||
assertTrue(
|
assertTrue(
|
||||||
"fetch profile not parsed properly",
|
"fetch profile not parsed properly",
|
||||||
|
|
|
@ -7,8 +7,11 @@ import java.io.StringWriter;
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
import org.hibernate.cfg.AnnotationConfiguration;
|
import org.hibernate.cfg.AnnotationConfiguration;
|
||||||
|
import org.hibernate.cfg.Environment;
|
||||||
import org.hibernate.dialect.HSQLDialect;
|
import org.hibernate.dialect.HSQLDialect;
|
||||||
import org.hibernate.dialect.SQLServerDialect;
|
import org.hibernate.dialect.SQLServerDialect;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
@ -21,6 +24,18 @@ public class FkCircularityTest extends TestCase {
|
||||||
|
|
||||||
private Logger log = LoggerFactory.getLogger(FkCircularityTest.class);
|
private Logger log = LoggerFactory.getLogger(FkCircularityTest.class);
|
||||||
|
|
||||||
|
private ServiceRegistryHolder serviceRegistryHolder;
|
||||||
|
|
||||||
|
protected void setUp() {
|
||||||
|
serviceRegistryHolder = new ServiceRegistryHolder( Environment.getProperties() );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void tearDown() {
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void testJoinedSublcassesInPK() {
|
public void testJoinedSublcassesInPK() {
|
||||||
try {
|
try {
|
||||||
AnnotationConfiguration config = new AnnotationConfiguration();
|
AnnotationConfiguration config = new AnnotationConfiguration();
|
||||||
|
@ -28,7 +43,7 @@ public class FkCircularityTest extends TestCase {
|
||||||
config.addAnnotatedClass(B.class);
|
config.addAnnotatedClass(B.class);
|
||||||
config.addAnnotatedClass(C.class);
|
config.addAnnotatedClass(C.class);
|
||||||
config.addAnnotatedClass(D.class);
|
config.addAnnotatedClass(D.class);
|
||||||
config.buildSessionFactory();
|
config.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
String[] schema = config
|
String[] schema = config
|
||||||
.generateSchemaCreationScript(new SQLServerDialect());
|
.generateSchemaCreationScript(new SQLServerDialect());
|
||||||
for (String s : schema) {
|
for (String s : schema) {
|
||||||
|
@ -50,7 +65,7 @@ public class FkCircularityTest extends TestCase {
|
||||||
config.addAnnotatedClass(ClassB.class);
|
config.addAnnotatedClass(ClassB.class);
|
||||||
config.addAnnotatedClass(ClassC.class);
|
config.addAnnotatedClass(ClassC.class);
|
||||||
config.addAnnotatedClass(ClassD.class);
|
config.addAnnotatedClass(ClassD.class);
|
||||||
config.buildSessionFactory();
|
config.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
String[] schema = config
|
String[] schema = config
|
||||||
.generateSchemaCreationScript(new HSQLDialect());
|
.generateSchemaCreationScript(new HSQLDialect());
|
||||||
for (String s : schema) {
|
for (String s : schema) {
|
||||||
|
|
|
@ -34,7 +34,7 @@ public class JoinColumnOverrideTest extends TestCase {
|
||||||
config.addAnnotatedClass(Bunny.class);
|
config.addAnnotatedClass(Bunny.class);
|
||||||
config.addAnnotatedClass(PointyTooth.class);
|
config.addAnnotatedClass(PointyTooth.class);
|
||||||
config.addAnnotatedClass(TwinkleToes.class);
|
config.addAnnotatedClass(TwinkleToes.class);
|
||||||
config.buildSessionFactory();
|
config.buildSessionFactory( getServiceRegistry() );
|
||||||
String[] schema = config
|
String[] schema = config
|
||||||
.generateSchemaCreationScript(new SQLServerDialect());
|
.generateSchemaCreationScript(new SQLServerDialect());
|
||||||
for (String s : schema) {
|
for (String s : schema) {
|
||||||
|
|
|
@ -34,7 +34,7 @@ public class JoinColumnOverrideTest extends TestCase {
|
||||||
config.addAnnotatedClass(Bunny.class);
|
config.addAnnotatedClass(Bunny.class);
|
||||||
config.addAnnotatedClass(PointyTooth.class);
|
config.addAnnotatedClass(PointyTooth.class);
|
||||||
config.addAnnotatedClass(TwinkleToes.class);
|
config.addAnnotatedClass(TwinkleToes.class);
|
||||||
config.buildSessionFactory();
|
config.buildSessionFactory( getServiceRegistry() );
|
||||||
String[] schema = config
|
String[] schema = config
|
||||||
.generateSchemaCreationScript(new SQLServerDialect());
|
.generateSchemaCreationScript(new SQLServerDialect());
|
||||||
for (String s : schema) {
|
for (String s : schema) {
|
||||||
|
|
|
@ -143,7 +143,7 @@ public class ImmutableTest extends TestCase {
|
||||||
try {
|
try {
|
||||||
AnnotationConfiguration config = new AnnotationConfiguration();
|
AnnotationConfiguration config = new AnnotationConfiguration();
|
||||||
config.addAnnotatedClass(Foobar.class);
|
config.addAnnotatedClass(Foobar.class);
|
||||||
config.buildSessionFactory();
|
config.buildSessionFactory( getServiceRegistry() );
|
||||||
fail();
|
fail();
|
||||||
} catch (AnnotationException ae) {
|
} catch (AnnotationException ae) {
|
||||||
log.debug("succes");
|
log.debug("succes");
|
||||||
|
|
|
@ -9,8 +9,11 @@ import junit.framework.TestCase;
|
||||||
|
|
||||||
import org.hibernate.cfg.AnnotationConfiguration;
|
import org.hibernate.cfg.AnnotationConfiguration;
|
||||||
import org.hibernate.cfg.EJB3NamingStrategy;
|
import org.hibernate.cfg.EJB3NamingStrategy;
|
||||||
|
import org.hibernate.cfg.Environment;
|
||||||
import org.hibernate.cfg.Mappings;
|
import org.hibernate.cfg.Mappings;
|
||||||
import org.hibernate.mapping.Table;
|
import org.hibernate.mapping.Table;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
@ -23,13 +26,25 @@ public class NamingStrategyTest extends TestCase {
|
||||||
|
|
||||||
private Logger log = LoggerFactory.getLogger(NamingStrategyTest.class);
|
private Logger log = LoggerFactory.getLogger(NamingStrategyTest.class);
|
||||||
|
|
||||||
|
private ServiceRegistryHolder serviceRegistryHolder;
|
||||||
|
|
||||||
|
protected void setUp() {
|
||||||
|
serviceRegistryHolder = new ServiceRegistryHolder( Environment.getProperties() );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void tearDown() {
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void testWithCustomNamingStrategy() throws Exception {
|
public void testWithCustomNamingStrategy() throws Exception {
|
||||||
try {
|
try {
|
||||||
AnnotationConfiguration config = new AnnotationConfiguration();
|
AnnotationConfiguration config = new AnnotationConfiguration();
|
||||||
config.setNamingStrategy(new DummyNamingStrategy());
|
config.setNamingStrategy(new DummyNamingStrategy());
|
||||||
config.addAnnotatedClass(Address.class);
|
config.addAnnotatedClass(Address.class);
|
||||||
config.addAnnotatedClass(Person.class);
|
config.addAnnotatedClass(Person.class);
|
||||||
config.buildSessionFactory();
|
config.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
}
|
}
|
||||||
catch( Exception e ) {
|
catch( Exception e ) {
|
||||||
StringWriter writer = new StringWriter();
|
StringWriter writer = new StringWriter();
|
||||||
|
@ -45,7 +60,7 @@ public class NamingStrategyTest extends TestCase {
|
||||||
config.setNamingStrategy(EJB3NamingStrategy.INSTANCE);
|
config.setNamingStrategy(EJB3NamingStrategy.INSTANCE);
|
||||||
config.addAnnotatedClass(A.class);
|
config.addAnnotatedClass(A.class);
|
||||||
config.addAnnotatedClass(AddressEntry.class);
|
config.addAnnotatedClass(AddressEntry.class);
|
||||||
config.buildSessionFactory();
|
config.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
Mappings mappings = config.createMappings();
|
Mappings mappings = config.createMappings();
|
||||||
boolean foundIt = false;
|
boolean foundIt = false;
|
||||||
|
|
||||||
|
@ -73,7 +88,7 @@ public class NamingStrategyTest extends TestCase {
|
||||||
AnnotationConfiguration config = new AnnotationConfiguration();
|
AnnotationConfiguration config = new AnnotationConfiguration();
|
||||||
config.addAnnotatedClass(Address.class);
|
config.addAnnotatedClass(Address.class);
|
||||||
config.addAnnotatedClass(Person.class);
|
config.addAnnotatedClass(Person.class);
|
||||||
config.buildSessionFactory();
|
config.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
}
|
}
|
||||||
catch( Exception e ) {
|
catch( Exception e ) {
|
||||||
StringWriter writer = new StringWriter();
|
StringWriter writer = new StringWriter();
|
||||||
|
|
|
@ -5,6 +5,7 @@ import org.hibernate.cfg.AnnotationConfiguration;
|
||||||
import org.hibernate.cfg.Environment;
|
import org.hibernate.cfg.Environment;
|
||||||
import org.hibernate.SessionFactory;
|
import org.hibernate.SessionFactory;
|
||||||
import org.hibernate.AnnotationException;
|
import org.hibernate.AnnotationException;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Emmanuel Bernard
|
* @author Emmanuel Bernard
|
||||||
|
@ -15,12 +16,19 @@ public class OneToOneErrorTest extends junit.framework.TestCase {
|
||||||
cfg.addAnnotatedClass( Show.class )
|
cfg.addAnnotatedClass( Show.class )
|
||||||
.addAnnotatedClass( ShowDescription.class );
|
.addAnnotatedClass( ShowDescription.class );
|
||||||
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
|
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
|
||||||
|
ServiceRegistryHolder serviceRegistryHolder = null;
|
||||||
try {
|
try {
|
||||||
SessionFactory sf = cfg.buildSessionFactory();
|
serviceRegistryHolder = new ServiceRegistryHolder( Environment.getProperties() );
|
||||||
|
SessionFactory sf = cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
fail( "Wrong mappedBy does not fail property" );
|
fail( "Wrong mappedBy does not fail property" );
|
||||||
}
|
}
|
||||||
catch (AnnotationException e) {
|
catch (AnnotationException e) {
|
||||||
//success
|
//success
|
||||||
}
|
}
|
||||||
|
finally {
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -4,7 +4,10 @@ package org.hibernate.test.annotations.onetoone.primarykey;
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
import org.hibernate.cfg.AnnotationConfiguration;
|
import org.hibernate.cfg.AnnotationConfiguration;
|
||||||
|
import org.hibernate.cfg.Environment;
|
||||||
import org.hibernate.dialect.SQLServerDialect;
|
import org.hibernate.dialect.SQLServerDialect;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
@ -19,11 +22,14 @@ public class NullablePrimaryKeyTest extends TestCase {
|
||||||
private Logger log = LoggerFactory.getLogger(NullablePrimaryKeyTest.class);
|
private Logger log = LoggerFactory.getLogger(NullablePrimaryKeyTest.class);
|
||||||
|
|
||||||
public void testGeneratedSql() {
|
public void testGeneratedSql() {
|
||||||
|
|
||||||
|
ServiceRegistryHolder serviceRegistryHolder = null;
|
||||||
try {
|
try {
|
||||||
AnnotationConfiguration config = new AnnotationConfiguration();
|
AnnotationConfiguration config = new AnnotationConfiguration();
|
||||||
config.addAnnotatedClass(Address.class);
|
config.addAnnotatedClass(Address.class);
|
||||||
config.addAnnotatedClass(Person.class);
|
config.addAnnotatedClass(Person.class);
|
||||||
config.buildSessionFactory();
|
serviceRegistryHolder = new ServiceRegistryHolder( Environment.getProperties() );
|
||||||
|
config.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
String[] schema = config
|
String[] schema = config
|
||||||
.generateSchemaCreationScript(new SQLServerDialect());
|
.generateSchemaCreationScript(new SQLServerDialect());
|
||||||
for (String s : schema) {
|
for (String s : schema) {
|
||||||
|
@ -35,5 +41,10 @@ public class NullablePrimaryKeyTest extends TestCase {
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
fail(e.getMessage());
|
fail(e.getMessage());
|
||||||
}
|
}
|
||||||
|
finally {
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ import javax.persistence.Id;
|
||||||
import junit.framework.Test;
|
import junit.framework.Test;
|
||||||
import junit.framework.TestSuite;
|
import junit.framework.TestSuite;
|
||||||
|
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
import org.hibernate.testing.junit.UnitTestCase;
|
import org.hibernate.testing.junit.UnitTestCase;
|
||||||
import org.hibernate.cfg.Configuration;
|
import org.hibernate.cfg.Configuration;
|
||||||
import org.hibernate.util.SerializationHelper;
|
import org.hibernate.util.SerializationHelper;
|
||||||
|
@ -103,10 +104,22 @@ public class ConfigurationSerializationTest extends UnitTestCase {
|
||||||
byte[] bytes = SerializationHelper.serialize( cfg );
|
byte[] bytes = SerializationHelper.serialize( cfg );
|
||||||
cfg = ( Configuration ) SerializationHelper.deserialize( bytes );
|
cfg = ( Configuration ) SerializationHelper.deserialize( bytes );
|
||||||
|
|
||||||
|
SessionFactory factory = null;
|
||||||
|
ServiceRegistryHolder serviceRegistryHolder = null;
|
||||||
|
try {
|
||||||
|
serviceRegistryHolder = new ServiceRegistryHolder( cfg.getProperties() );
|
||||||
// try to build SF
|
// try to build SF
|
||||||
SessionFactory factory = cfg.buildSessionFactory();
|
factory = cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry());
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
if ( factory != null ) {
|
||||||
factory.close();
|
factory.close();
|
||||||
}
|
}
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
public static class Serial {
|
public static class Serial {
|
||||||
|
|
|
@ -0,0 +1,81 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* 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 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
|
||||||
|
* Lesser General Public License, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this distribution; if not, write to:
|
||||||
|
* Free Software Foundation, Inc.
|
||||||
|
* 51 Franklin Street, Fifth Floor
|
||||||
|
* Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.hibernate.test.common;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import org.hibernate.cfg.Environment;
|
||||||
|
import org.hibernate.cfg.internal.ServicesRegistryBootstrap;
|
||||||
|
import org.hibernate.engine.jdbc.internal.JdbcServicesImpl;
|
||||||
|
import org.hibernate.engine.jdbc.spi.JdbcServices;
|
||||||
|
import org.hibernate.internal.util.config.ConfigurationHelper;
|
||||||
|
import org.hibernate.service.classloading.spi.ClassLoaderService;
|
||||||
|
import org.hibernate.service.internal.ServicesRegistryImpl;
|
||||||
|
import org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator;
|
||||||
|
import org.hibernate.service.spi.ServicesRegistry;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Gail Badner
|
||||||
|
*/
|
||||||
|
public class ServiceRegistryHolder {
|
||||||
|
private final ServicesRegistryImpl serviceRegistry;
|
||||||
|
private final Properties properties;
|
||||||
|
|
||||||
|
public ServiceRegistryHolder(Map props) {
|
||||||
|
properties = new Properties();
|
||||||
|
properties.putAll( props );
|
||||||
|
Environment.verifyProperties( properties );
|
||||||
|
ConfigurationHelper.resolvePlaceHolders( properties );
|
||||||
|
serviceRegistry = new ServicesRegistryBootstrap().initiateServicesRegistry( properties );
|
||||||
|
properties.putAll( serviceRegistry.getService( JdbcServices.class ).getDialect().getDefaultProperties() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public Properties getProperties() {
|
||||||
|
return properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServicesRegistry getServiceRegistry() {
|
||||||
|
return serviceRegistry;
|
||||||
|
}
|
||||||
|
|
||||||
|
public JdbcServices getJdbcServices() {
|
||||||
|
return serviceRegistry.getService( JdbcServices.class );
|
||||||
|
}
|
||||||
|
|
||||||
|
public JdbcServicesImpl getJdbcServicesImpl() {
|
||||||
|
return ( JdbcServicesImpl ) getJdbcServices();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ClassLoaderService getClassLoaderService() {
|
||||||
|
return serviceRegistry.getService( ClassLoaderService.class );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void destroy() {
|
||||||
|
if ( serviceRegistry != null ) {
|
||||||
|
serviceRegistry.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,9 +10,10 @@ import org.hibernate.ConnectionReleaseMode;
|
||||||
import org.hibernate.Session;
|
import org.hibernate.Session;
|
||||||
import org.hibernate.cfg.Configuration;
|
import org.hibernate.cfg.Configuration;
|
||||||
import org.hibernate.cfg.Environment;
|
import org.hibernate.cfg.Environment;
|
||||||
import org.hibernate.connection.ConnectionProvider;
|
import org.hibernate.service.jdbc.connections.internal.UserSuppliedConnectionProviderImpl;
|
||||||
import org.hibernate.connection.ConnectionProviderFactory;
|
import org.hibernate.service.jdbc.connections.spi.ConnectionProvider;
|
||||||
import org.hibernate.connection.UserSuppliedConnectionProvider;
|
import org.hibernate.service.spi.Stoppable;
|
||||||
|
import org.hibernate.test.common.ConnectionProviderBuilder;
|
||||||
import org.hibernate.testing.junit.functional.FunctionalTestClassTestSuite;
|
import org.hibernate.testing.junit.functional.FunctionalTestClassTestSuite;
|
||||||
import org.hibernate.tool.hbm2ddl.SchemaExport;
|
import org.hibernate.tool.hbm2ddl.SchemaExport;
|
||||||
|
|
||||||
|
@ -23,7 +24,7 @@ import org.hibernate.tool.hbm2ddl.SchemaExport;
|
||||||
*/
|
*/
|
||||||
public class SuppliedConnectionTest extends ConnectionManagementTestCase {
|
public class SuppliedConnectionTest extends ConnectionManagementTestCase {
|
||||||
|
|
||||||
private ConnectionProvider cp = ConnectionProviderFactory.newConnectionProvider();
|
private ConnectionProvider cp = ConnectionProviderBuilder.buildConnectionProvider();
|
||||||
private Connection connectionUnderTest;
|
private Connection connectionUnderTest;
|
||||||
|
|
||||||
public SuppliedConnectionTest(String name) {
|
public SuppliedConnectionTest(String name) {
|
||||||
|
@ -50,7 +51,7 @@ public class SuppliedConnectionTest extends ConnectionManagementTestCase {
|
||||||
public void configure(Configuration cfg) {
|
public void configure(Configuration cfg) {
|
||||||
super.configure( cfg );
|
super.configure( cfg );
|
||||||
cfg.setProperty( Environment.RELEASE_CONNECTIONS, ConnectionReleaseMode.ON_CLOSE.toString() );
|
cfg.setProperty( Environment.RELEASE_CONNECTIONS, ConnectionReleaseMode.ON_CLOSE.toString() );
|
||||||
cfg.setProperty( Environment.CONNECTION_PROVIDER, UserSuppliedConnectionProvider.class.getName() );
|
cfg.setProperty( Environment.CONNECTION_PROVIDER, UserSuppliedConnectionProviderImpl.class.getName() );
|
||||||
boolean supportsScroll = true;
|
boolean supportsScroll = true;
|
||||||
Connection conn = null;
|
Connection conn = null;
|
||||||
try {
|
try {
|
||||||
|
@ -112,7 +113,10 @@ public class SuppliedConnectionTest extends ConnectionManagementTestCase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
cp.close();
|
if ( cp instanceof Stoppable ) {
|
||||||
|
( ( Stoppable ) cp ).stop();
|
||||||
|
}
|
||||||
|
cp = null;
|
||||||
}
|
}
|
||||||
catch( Throwable ignore ) {
|
catch( Throwable ignore ) {
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,7 @@ public class ExtendsTest extends UnitTestCase {
|
||||||
cfg.addResource( getBaseForMappings() + "extendshbm/Person.hbm.xml" );
|
cfg.addResource( getBaseForMappings() + "extendshbm/Person.hbm.xml" );
|
||||||
cfg.addResource( getBaseForMappings() + "extendshbm/Employee.hbm.xml" );
|
cfg.addResource( getBaseForMappings() + "extendshbm/Employee.hbm.xml" );
|
||||||
|
|
||||||
cfg.buildSessionFactory();
|
cfg.buildSessionFactory( getServiceRegistry() );
|
||||||
|
|
||||||
assertNotNull( cfg.getClassMapping( "org.hibernate.test.extendshbm.Customer" ) );
|
assertNotNull( cfg.getClassMapping( "org.hibernate.test.extendshbm.Customer" ) );
|
||||||
assertNotNull( cfg.getClassMapping( "org.hibernate.test.extendshbm.Person" ) );
|
assertNotNull( cfg.getClassMapping( "org.hibernate.test.extendshbm.Person" ) );
|
||||||
|
@ -103,7 +103,7 @@ public class ExtendsTest extends UnitTestCase {
|
||||||
);
|
);
|
||||||
cfg.addResource( getBaseForMappings() + "extendshbm/Employee.hbm.xml" );
|
cfg.addResource( getBaseForMappings() + "extendshbm/Employee.hbm.xml" );
|
||||||
|
|
||||||
cfg.buildSessionFactory();
|
cfg.buildSessionFactory( getServiceRegistry() );
|
||||||
|
|
||||||
fail( "Should not be able to build sessionfactory without a Person" );
|
fail( "Should not be able to build sessionfactory without a Person" );
|
||||||
}
|
}
|
||||||
|
@ -119,7 +119,7 @@ public class ExtendsTest extends UnitTestCase {
|
||||||
try {
|
try {
|
||||||
cfg.addResource( getBaseForMappings() + "extendshbm/allseparateinone.hbm.xml" );
|
cfg.addResource( getBaseForMappings() + "extendshbm/allseparateinone.hbm.xml" );
|
||||||
|
|
||||||
cfg.buildSessionFactory();
|
cfg.buildSessionFactory( getServiceRegistry() );
|
||||||
|
|
||||||
assertNotNull( cfg.getClassMapping( "org.hibernate.test.extendshbm.Customer" ) );
|
assertNotNull( cfg.getClassMapping( "org.hibernate.test.extendshbm.Customer" ) );
|
||||||
assertNotNull( cfg.getClassMapping( "org.hibernate.test.extendshbm.Person" ) );
|
assertNotNull( cfg.getClassMapping( "org.hibernate.test.extendshbm.Person" ) );
|
||||||
|
|
|
@ -3,12 +3,14 @@ package org.hibernate.test.instrument.cases;
|
||||||
import org.hibernate.SessionFactory;
|
import org.hibernate.SessionFactory;
|
||||||
import org.hibernate.cfg.Configuration;
|
import org.hibernate.cfg.Configuration;
|
||||||
import org.hibernate.cfg.Environment;
|
import org.hibernate.cfg.Environment;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
*/
|
*/
|
||||||
public abstract class AbstractExecutable implements Executable {
|
public abstract class AbstractExecutable implements Executable {
|
||||||
|
|
||||||
|
private ServiceRegistryHolder serviceRegistryHolder;
|
||||||
private SessionFactory factory;
|
private SessionFactory factory;
|
||||||
|
|
||||||
public final void prepare() {
|
public final void prepare() {
|
||||||
|
@ -17,7 +19,8 @@ public abstract class AbstractExecutable implements Executable {
|
||||||
for ( int i = 0; i < resources.length; i++ ) {
|
for ( int i = 0; i < resources.length; i++ ) {
|
||||||
cfg.addResource( resources[i] );
|
cfg.addResource( resources[i] );
|
||||||
}
|
}
|
||||||
factory = cfg.buildSessionFactory();
|
serviceRegistryHolder = new ServiceRegistryHolder( cfg.getProperties() );
|
||||||
|
factory = cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void complete() {
|
public final void complete() {
|
||||||
|
@ -26,6 +29,9 @@ public abstract class AbstractExecutable implements Executable {
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
factory.close();
|
factory.close();
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,10 +34,8 @@ import org.hibernate.Query;
|
||||||
import org.hibernate.QueryException;
|
import org.hibernate.QueryException;
|
||||||
import org.hibernate.ScrollableResults;
|
import org.hibernate.ScrollableResults;
|
||||||
import org.hibernate.Transaction;
|
import org.hibernate.Transaction;
|
||||||
import org.hibernate.cfg.Environment;
|
|
||||||
import org.hibernate.classic.Session;
|
import org.hibernate.classic.Session;
|
||||||
import org.hibernate.connection.ConnectionProvider;
|
import org.hibernate.service.jdbc.connections.spi.ConnectionProvider;
|
||||||
import org.hibernate.connection.DriverManagerConnectionProvider;
|
|
||||||
import org.hibernate.criterion.Example;
|
import org.hibernate.criterion.Example;
|
||||||
import org.hibernate.criterion.MatchMode;
|
import org.hibernate.criterion.MatchMode;
|
||||||
import org.hibernate.criterion.Order;
|
import org.hibernate.criterion.Order;
|
||||||
|
@ -57,6 +55,7 @@ import org.hibernate.dialect.SybaseASE15Dialect;
|
||||||
import org.hibernate.dialect.SybaseDialect;
|
import org.hibernate.dialect.SybaseDialect;
|
||||||
import org.hibernate.dialect.TimesTenDialect;
|
import org.hibernate.dialect.TimesTenDialect;
|
||||||
import org.hibernate.engine.SessionFactoryImplementor;
|
import org.hibernate.engine.SessionFactoryImplementor;
|
||||||
|
import org.hibernate.test.common.ConnectionProviderBuilder;
|
||||||
import org.hibernate.testing.junit.functional.FunctionalTestClassTestSuite;
|
import org.hibernate.testing.junit.functional.FunctionalTestClassTestSuite;
|
||||||
import org.hibernate.proxy.HibernateProxy;
|
import org.hibernate.proxy.HibernateProxy;
|
||||||
import org.hibernate.util.JoinedIterator;
|
import org.hibernate.util.JoinedIterator;
|
||||||
|
@ -4346,8 +4345,7 @@ public class FooBarTest extends LegacyTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testUserProvidedConnection() throws Exception {
|
public void testUserProvidedConnection() throws Exception {
|
||||||
ConnectionProvider dcp = new DriverManagerConnectionProvider();
|
ConnectionProvider dcp = ConnectionProviderBuilder.buildConnectionProvider();
|
||||||
dcp.configure( Environment.getProperties() );
|
|
||||||
Session s = getSessions().openSession( dcp.getConnection() );
|
Session s = getSessions().openSession( dcp.getConnection() );
|
||||||
Transaction tx = s.beginTransaction();
|
Transaction tx = s.beginTransaction();
|
||||||
s.createQuery( "from Fo" ).list();
|
s.createQuery( "from Fo" ).list();
|
||||||
|
|
|
@ -29,7 +29,7 @@ public class MigrationTest extends UnitTestCase {
|
||||||
v1cfg.addResource( resource1 );
|
v1cfg.addResource( resource1 );
|
||||||
new SchemaExport( v1cfg ).execute( false, true, true, false );
|
new SchemaExport( v1cfg ).execute( false, true, true, false );
|
||||||
|
|
||||||
SchemaUpdate v1schemaUpdate = new SchemaUpdate( v1cfg );
|
SchemaUpdate v1schemaUpdate = new SchemaUpdate( getJdbcServices(), v1cfg );
|
||||||
v1schemaUpdate.execute( true, true );
|
v1schemaUpdate.execute( true, true );
|
||||||
|
|
||||||
assertEquals( 0, v1schemaUpdate.getExceptions().size() );
|
assertEquals( 0, v1schemaUpdate.getExceptions().size() );
|
||||||
|
@ -37,11 +37,11 @@ public class MigrationTest extends UnitTestCase {
|
||||||
Configuration v2cfg = new Configuration();
|
Configuration v2cfg = new Configuration();
|
||||||
v2cfg.addResource( resource2 );
|
v2cfg.addResource( resource2 );
|
||||||
|
|
||||||
SchemaUpdate v2schemaUpdate = new SchemaUpdate( v2cfg );
|
SchemaUpdate v2schemaUpdate = new SchemaUpdate( getJdbcServices(), v2cfg );
|
||||||
v2schemaUpdate.execute( true, true );
|
v2schemaUpdate.execute( true, true );
|
||||||
assertEquals( 0, v2schemaUpdate.getExceptions().size() );
|
assertEquals( 0, v2schemaUpdate.getExceptions().size() );
|
||||||
|
|
||||||
new SchemaExport( v2cfg ).drop( false, true );
|
new SchemaExport( getJdbcServices(), v2cfg ).drop( false, true );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -86,7 +86,7 @@ public class StatsTest extends FunctionalTestCase {
|
||||||
Collection coll = getCfg().getCollectionMapping(Continent.class.getName() + ".countries");
|
Collection coll = getCfg().getCollectionMapping(Continent.class.getName() + ".countries");
|
||||||
coll.setFetchMode(FetchMode.JOIN);
|
coll.setFetchMode(FetchMode.JOIN);
|
||||||
coll.setLazy(false);
|
coll.setLazy(false);
|
||||||
SessionFactory sf = getCfg().buildSessionFactory();
|
SessionFactory sf = getCfg().buildSessionFactory( getServiceRegistry() );
|
||||||
stats = sf.getStatistics();
|
stats = sf.getStatistics();
|
||||||
stats.clear();
|
stats.clear();
|
||||||
stats.setStatisticsEnabled(true);
|
stats.setStatisticsEnabled(true);
|
||||||
|
@ -108,7 +108,7 @@ public class StatsTest extends FunctionalTestCase {
|
||||||
coll = getCfg().getCollectionMapping(Continent.class.getName() + ".countries");
|
coll = getCfg().getCollectionMapping(Continent.class.getName() + ".countries");
|
||||||
coll.setFetchMode(FetchMode.SELECT);
|
coll.setFetchMode(FetchMode.SELECT);
|
||||||
coll.setLazy(false);
|
coll.setLazy(false);
|
||||||
sf = getCfg().buildSessionFactory();
|
sf = getCfg().buildSessionFactory( getServiceRegistry() );
|
||||||
stats = sf.getStatistics();
|
stats = sf.getStatistics();
|
||||||
stats.clear();
|
stats.clear();
|
||||||
stats.setStatisticsEnabled(true);
|
stats.setStatisticsEnabled(true);
|
||||||
|
|
|
@ -35,6 +35,11 @@ import junit.framework.Test;
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
import junit.framework.TestSuite;
|
import junit.framework.TestSuite;
|
||||||
|
|
||||||
|
import org.hibernate.cfg.Environment;
|
||||||
|
import org.hibernate.engine.jdbc.spi.JdbcServices;
|
||||||
|
import org.hibernate.service.jdbc.connections.spi.ConnectionProvider;
|
||||||
|
import org.hibernate.service.spi.ServicesRegistry;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A basic JUnit {@link junit.framework.TestCase} subclass for
|
* A basic JUnit {@link junit.framework.TestCase} subclass for
|
||||||
|
@ -46,6 +51,8 @@ public abstract class UnitTestCase extends junit.framework.TestCase {
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger( UnitTestCase.class );
|
private static final Logger log = LoggerFactory.getLogger( UnitTestCase.class );
|
||||||
|
|
||||||
|
private ServiceRegistryHolder serviceRegistryHolder;
|
||||||
|
|
||||||
public UnitTestCase(String string) {
|
public UnitTestCase(String string) {
|
||||||
super( string );
|
super( string );
|
||||||
}
|
}
|
||||||
|
@ -81,6 +88,29 @@ public abstract class UnitTestCase extends junit.framework.TestCase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void tearDown() throws Exception {
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
serviceRegistryHolder = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ServicesRegistry getServiceRegistry() {
|
||||||
|
if ( serviceRegistryHolder == null ) {
|
||||||
|
serviceRegistryHolder = new ServiceRegistryHolder( Environment.getProperties() );
|
||||||
|
}
|
||||||
|
return serviceRegistryHolder.getServiceRegistry();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected JdbcServices getJdbcServices() {
|
||||||
|
return getServiceRegistry().getService( JdbcServices.class );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ConnectionProvider getConnectionProvider() {
|
||||||
|
return getJdbcServices().getConnectionProvider();
|
||||||
|
}
|
||||||
|
|
||||||
private static class FailureExpectedTestPassedException extends Exception {
|
private static class FailureExpectedTestPassedException extends Exception {
|
||||||
public FailureExpectedTestPassedException() {
|
public FailureExpectedTestPassedException() {
|
||||||
super( "Test marked as FailureExpected, but did not fail!" );
|
super( "Test marked as FailureExpected, but did not fail!" );
|
||||||
|
|
|
@ -23,9 +23,11 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.testing.junit.functional;
|
package org.hibernate.testing.junit.functional;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.sql.Blob;
|
import java.sql.Blob;
|
||||||
import java.sql.Clob;
|
import java.sql.Clob;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import org.hibernate.dialect.Dialect;
|
import org.hibernate.dialect.Dialect;
|
||||||
import org.hibernate.cfg.Configuration;
|
import org.hibernate.cfg.Configuration;
|
||||||
|
@ -37,6 +39,9 @@ import org.hibernate.mapping.PersistentClass;
|
||||||
import org.hibernate.mapping.Property;
|
import org.hibernate.mapping.Property;
|
||||||
import org.hibernate.mapping.SimpleValue;
|
import org.hibernate.mapping.SimpleValue;
|
||||||
import org.hibernate.mapping.Collection;
|
import org.hibernate.mapping.Collection;
|
||||||
|
import org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator;
|
||||||
|
import org.hibernate.service.spi.ServicesRegistry;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
|
@ -49,6 +54,8 @@ public class ExecutionEnvironment {
|
||||||
|
|
||||||
private final ExecutionEnvironment.Settings settings;
|
private final ExecutionEnvironment.Settings settings;
|
||||||
|
|
||||||
|
private Map conectionProviderInjectionProperties;
|
||||||
|
private ServiceRegistryHolder serviceRegistryHolder;
|
||||||
private Configuration configuration;
|
private Configuration configuration;
|
||||||
private SessionFactory sessionFactory;
|
private SessionFactory sessionFactory;
|
||||||
private boolean allowRebuild;
|
private boolean allowRebuild;
|
||||||
|
@ -73,11 +80,15 @@ public class ExecutionEnvironment {
|
||||||
return configuration;
|
return configuration;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ServicesRegistry getServiceRegistry() {
|
||||||
|
return serviceRegistryHolder.getServiceRegistry();
|
||||||
|
}
|
||||||
|
|
||||||
public SessionFactory getSessionFactory() {
|
public SessionFactory getSessionFactory() {
|
||||||
return sessionFactory;
|
return sessionFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initialize() {
|
public void initialize(Map conectionProviderInjectionProperties) {
|
||||||
if ( sessionFactory != null ) {
|
if ( sessionFactory != null ) {
|
||||||
throw new IllegalStateException( "attempt to initialize already initialized ExecutionEnvironment" );
|
throw new IllegalStateException( "attempt to initialize already initialized ExecutionEnvironment" );
|
||||||
}
|
}
|
||||||
|
@ -85,6 +96,7 @@ public class ExecutionEnvironment {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.conectionProviderInjectionProperties = conectionProviderInjectionProperties;
|
||||||
Configuration configuration = new Configuration();
|
Configuration configuration = new Configuration();
|
||||||
configuration.setProperty( Environment.CACHE_PROVIDER, "org.hibernate.cache.HashtableCacheProvider" );
|
configuration.setProperty( Environment.CACHE_PROVIDER, "org.hibernate.cache.HashtableCacheProvider" );
|
||||||
|
|
||||||
|
@ -103,13 +115,28 @@ public class ExecutionEnvironment {
|
||||||
applyCacheSettings( configuration );
|
applyCacheSettings( configuration );
|
||||||
settings.afterConfigurationBuilt( configuration.createMappings(), getDialect() );
|
settings.afterConfigurationBuilt( configuration.createMappings(), getDialect() );
|
||||||
|
|
||||||
SessionFactory sessionFactory = configuration.buildSessionFactory();
|
|
||||||
this.configuration = configuration;
|
this.configuration = configuration;
|
||||||
this.sessionFactory = sessionFactory;
|
|
||||||
|
serviceRegistryHolder = new ServiceRegistryHolder( getServiceRegistryProperties() );
|
||||||
|
sessionFactory = configuration.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
|
|
||||||
settings.afterSessionFactoryBuilt( ( SessionFactoryImplementor ) sessionFactory );
|
settings.afterSessionFactoryBuilt( ( SessionFactoryImplementor ) sessionFactory );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Map getServiceRegistryProperties() {
|
||||||
|
Map serviceRegistryProperties = configuration.getProperties();
|
||||||
|
if ( conectionProviderInjectionProperties != null && conectionProviderInjectionProperties.size() > 0 ) {
|
||||||
|
serviceRegistryProperties = new HashMap(
|
||||||
|
configuration.getProperties().size() + conectionProviderInjectionProperties.size()
|
||||||
|
);
|
||||||
|
serviceRegistryProperties.putAll( configuration.getProperties() );
|
||||||
|
serviceRegistryProperties.put(
|
||||||
|
ConnectionProviderInitiator.INJECTION_DATA, conectionProviderInjectionProperties
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return serviceRegistryProperties;
|
||||||
|
}
|
||||||
|
|
||||||
private void applyMappings(Configuration configuration) {
|
private void applyMappings(Configuration configuration) {
|
||||||
String[] mappings = settings.getMappings();
|
String[] mappings = settings.getMappings();
|
||||||
for ( String mapping : mappings ) {
|
for ( String mapping : mappings ) {
|
||||||
|
@ -159,7 +186,12 @@ public class ExecutionEnvironment {
|
||||||
sessionFactory.close();
|
sessionFactory.close();
|
||||||
sessionFactory = null;
|
sessionFactory = null;
|
||||||
}
|
}
|
||||||
sessionFactory = configuration.buildSessionFactory();
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
serviceRegistryHolder = null;
|
||||||
|
}
|
||||||
|
serviceRegistryHolder = new ServiceRegistryHolder( getServiceRegistryProperties() );
|
||||||
|
sessionFactory = configuration.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
settings.afterSessionFactoryBuilt( ( SessionFactoryImplementor ) sessionFactory );
|
settings.afterSessionFactoryBuilt( ( SessionFactoryImplementor ) sessionFactory );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,6 +200,10 @@ public class ExecutionEnvironment {
|
||||||
sessionFactory.close();
|
sessionFactory.close();
|
||||||
sessionFactory = null;
|
sessionFactory = null;
|
||||||
}
|
}
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
serviceRegistryHolder = null;
|
||||||
|
}
|
||||||
configuration = null;
|
configuration = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.testing.junit.functional;
|
package org.hibernate.testing.junit.functional;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -90,11 +91,15 @@ public abstract class FunctionalTestCase extends UnitTestCase implements Executi
|
||||||
log.info( "Building locally managed execution env" );
|
log.info( "Building locally managed execution env" );
|
||||||
isEnvironmentLocallyManaged = true;
|
isEnvironmentLocallyManaged = true;
|
||||||
environment = new ExecutionEnvironment( this );
|
environment = new ExecutionEnvironment( this );
|
||||||
environment.initialize();
|
environment.initialize( getConnectionProviderInjectionProperties() );
|
||||||
}
|
}
|
||||||
prepareTest();
|
prepareTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Map getConnectionProviderInjectionProperties() {
|
||||||
|
return Collections.EMPTY_MAP;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Override {@link junit.framework.TestCase#tearDown()} to tear down
|
* Override {@link junit.framework.TestCase#tearDown()} to tear down
|
||||||
* the execution environment if it is locally managed.
|
* the execution environment if it is locally managed.
|
||||||
|
|
|
@ -23,6 +23,9 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.testing.junit.functional;
|
package org.hibernate.testing.junit.functional;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import junit.framework.TestSuite;
|
import junit.framework.TestSuite;
|
||||||
import junit.framework.Test;
|
import junit.framework.Test;
|
||||||
import junit.framework.TestResult;
|
import junit.framework.TestResult;
|
||||||
|
@ -127,13 +130,17 @@ public class FunctionalTestClassTestSuite extends TestSuite {
|
||||||
log.info( "Building aggregated execution environment" );
|
log.info( "Building aggregated execution environment" );
|
||||||
try {
|
try {
|
||||||
environment = new ExecutionEnvironment( settings );
|
environment = new ExecutionEnvironment( settings );
|
||||||
environment.initialize();
|
environment.initialize( getConnectionProviderInjectionProperties() );
|
||||||
}
|
}
|
||||||
catch( Throwable t ) {
|
catch( Throwable t ) {
|
||||||
environmentSetupError = t;
|
environmentSetupError = t;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Map getConnectionProviderInjectionProperties() {
|
||||||
|
return Collections.EMPTY_MAP;
|
||||||
|
}
|
||||||
|
|
||||||
protected void tearDown() {
|
protected void tearDown() {
|
||||||
if ( environment != null ) {
|
if ( environment != null ) {
|
||||||
log.info( "Destroying aggregated execution environment" );
|
log.info( "Destroying aggregated execution environment" );
|
||||||
|
|
|
@ -38,8 +38,12 @@ import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import org.hibernate.cfg.Configuration;
|
import org.hibernate.cfg.Configuration;
|
||||||
|
import org.hibernate.cfg.Environment;
|
||||||
import org.hibernate.dialect.Dialect;
|
import org.hibernate.dialect.Dialect;
|
||||||
|
import org.hibernate.engine.jdbc.spi.JdbcServices;
|
||||||
import org.hibernate.jdbc.Work;
|
import org.hibernate.jdbc.Work;
|
||||||
|
import org.hibernate.service.spi.ServicesRegistry;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
import org.hibernate.testing.junit.DialectChecks;
|
import org.hibernate.testing.junit.DialectChecks;
|
||||||
import org.hibernate.testing.junit.FailureExpected;
|
import org.hibernate.testing.junit.FailureExpected;
|
||||||
import org.hibernate.testing.junit.RequiresDialect;
|
import org.hibernate.testing.junit.RequiresDialect;
|
||||||
|
@ -61,6 +65,7 @@ public abstract class HibernateTestCase extends TestCase {
|
||||||
|
|
||||||
protected static Configuration cfg;
|
protected static Configuration cfg;
|
||||||
private static Class<?> lastTestClass;
|
private static Class<?> lastTestClass;
|
||||||
|
private ServiceRegistryHolder serviceRegistryHolder;
|
||||||
|
|
||||||
public HibernateTestCase() {
|
public HibernateTestCase() {
|
||||||
super();
|
super();
|
||||||
|
@ -147,6 +152,17 @@ public abstract class HibernateTestCase extends TestCase {
|
||||||
handleUnclosedResources();
|
handleUnclosedResources();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected ServicesRegistry getServiceRegistry() {
|
||||||
|
if ( serviceRegistryHolder == null ) {
|
||||||
|
serviceRegistryHolder = new ServiceRegistryHolder( Environment.getProperties() );
|
||||||
|
}
|
||||||
|
return serviceRegistryHolder.getServiceRegistry();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected JdbcServices getJdbcServices() {
|
||||||
|
return getServiceRegistry().getService( JdbcServices.class );
|
||||||
|
}
|
||||||
|
|
||||||
protected static class Skip {
|
protected static class Skip {
|
||||||
private final String reason;
|
private final String reason;
|
||||||
private final String testDescription;
|
private final String testDescription;
|
||||||
|
@ -265,7 +281,12 @@ public abstract class HibernateTestCase extends TestCase {
|
||||||
|
|
||||||
protected abstract void handleUnclosedResources();
|
protected abstract void handleUnclosedResources();
|
||||||
|
|
||||||
protected abstract void closeResources();
|
protected void closeResources() {
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
serviceRegistryHolder = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected String[] getAnnotatedPackages() {
|
protected String[] getAnnotatedPackages() {
|
||||||
return new String[] { };
|
return new String[] { };
|
||||||
|
@ -295,12 +316,12 @@ public abstract class HibernateTestCase extends TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void runSchemaGeneration() {
|
protected void runSchemaGeneration() {
|
||||||
SchemaExport export = new SchemaExport( cfg );
|
SchemaExport export = new SchemaExport( getJdbcServices(), cfg );
|
||||||
export.create( true, true );
|
export.create( true, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void runSchemaDrop() {
|
protected void runSchemaDrop() {
|
||||||
SchemaExport export = new SchemaExport( cfg );
|
SchemaExport export = new SchemaExport( getJdbcServices(), cfg );
|
||||||
export.drop( true, true );
|
export.drop( true, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,8 +28,9 @@ import java.sql.SQLException;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import org.hibernate.HibernateException;
|
import org.hibernate.HibernateException;
|
||||||
import org.hibernate.connection.ConnectionProvider;
|
import org.hibernate.service.jdbc.connections.spi.ConnectionProvider;
|
||||||
import org.hibernate.connection.ConnectionProviderFactory;
|
import org.hibernate.service.spi.Stoppable;
|
||||||
|
import org.hibernate.test.common.ConnectionProviderBuilder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A {@link ConnectionProvider} implementation adding JTA-style transactionality
|
* A {@link ConnectionProvider} implementation adding JTA-style transactionality
|
||||||
|
@ -39,7 +40,7 @@ import org.hibernate.connection.ConnectionProviderFactory;
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
*/
|
*/
|
||||||
public class ConnectionProviderImpl implements ConnectionProvider {
|
public class ConnectionProviderImpl implements ConnectionProvider {
|
||||||
private static ConnectionProvider actualConnectionProvider = ConnectionProviderFactory.newConnectionProvider();
|
private static ConnectionProvider actualConnectionProvider = ConnectionProviderBuilder.buildConnectionProvider();
|
||||||
|
|
||||||
private boolean isTransactional;
|
private boolean isTransactional;
|
||||||
|
|
||||||
|
@ -74,7 +75,9 @@ public class ConnectionProviderImpl implements ConnectionProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void close() throws HibernateException {
|
public void close() throws HibernateException {
|
||||||
actualConnectionProvider.close();
|
if ( actualConnectionProvider instanceof Stoppable ) {
|
||||||
|
( ( Stoppable ) actualConnectionProvider ).stop();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean supportsAggressiveRelease() {
|
public boolean supportsAggressiveRelease() {
|
||||||
|
|
|
@ -74,7 +74,6 @@ import org.hibernate.cfg.Configuration;
|
||||||
import org.hibernate.cfg.Environment;
|
import org.hibernate.cfg.Environment;
|
||||||
import org.hibernate.cfg.NamingStrategy;
|
import org.hibernate.cfg.NamingStrategy;
|
||||||
import org.hibernate.cfg.Settings;
|
import org.hibernate.cfg.Settings;
|
||||||
import org.hibernate.cfg.SettingsFactory;
|
|
||||||
import org.hibernate.cfg.annotations.reflection.XMLContext;
|
import org.hibernate.cfg.annotations.reflection.XMLContext;
|
||||||
import org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider;
|
import org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider;
|
||||||
import org.hibernate.ejb.instrument.InterceptFieldClassFileTransformer;
|
import org.hibernate.ejb.instrument.InterceptFieldClassFileTransformer;
|
||||||
|
@ -94,6 +93,9 @@ import org.hibernate.mapping.AuxiliaryDatabaseObject;
|
||||||
import org.hibernate.mapping.PersistentClass;
|
import org.hibernate.mapping.PersistentClass;
|
||||||
import org.hibernate.proxy.EntityNotFoundDelegate;
|
import org.hibernate.proxy.EntityNotFoundDelegate;
|
||||||
import org.hibernate.secure.JACCConfiguration;
|
import org.hibernate.secure.JACCConfiguration;
|
||||||
|
import org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator;
|
||||||
|
import org.hibernate.service.jdbc.connections.spi.ConnectionProvider;
|
||||||
|
import org.hibernate.service.spi.ServicesRegistry;
|
||||||
import org.hibernate.transaction.JDBCTransactionFactory;
|
import org.hibernate.transaction.JDBCTransactionFactory;
|
||||||
import org.hibernate.util.CollectionHelper;
|
import org.hibernate.util.CollectionHelper;
|
||||||
import org.hibernate.util.ReflectHelper;
|
import org.hibernate.util.ReflectHelper;
|
||||||
|
@ -142,7 +144,7 @@ public class Ejb3Configuration implements Serializable, Referenceable {
|
||||||
private String cfgXmlResource;
|
private String cfgXmlResource;
|
||||||
|
|
||||||
private AnnotationConfiguration cfg;
|
private AnnotationConfiguration cfg;
|
||||||
private SettingsFactory settingsFactory;
|
private final Map connectionProviderInjectionData;
|
||||||
//made transient and not restored in deserialization on purpose, should no longer be called after restoration
|
//made transient and not restored in deserialization on purpose, should no longer be called after restoration
|
||||||
private transient EventListenerConfigurator listenerConfigurator;
|
private transient EventListenerConfigurator listenerConfigurator;
|
||||||
private PersistenceUnitTransactionType transactionType;
|
private PersistenceUnitTransactionType transactionType;
|
||||||
|
@ -153,8 +155,8 @@ public class Ejb3Configuration implements Serializable, Referenceable {
|
||||||
|
|
||||||
|
|
||||||
public Ejb3Configuration() {
|
public Ejb3Configuration() {
|
||||||
settingsFactory = new InjectionSettingsFactory();
|
connectionProviderInjectionData = new HashMap();
|
||||||
cfg = new AnnotationConfiguration( settingsFactory );
|
cfg = new AnnotationConfiguration();
|
||||||
cfg.setEntityNotFoundDelegate( ejb3EntityNotFoundDelegate );
|
cfg.setEntityNotFoundDelegate( ejb3EntityNotFoundDelegate );
|
||||||
listenerConfigurator = new EventListenerConfigurator( this );
|
listenerConfigurator = new EventListenerConfigurator( this );
|
||||||
}
|
}
|
||||||
|
@ -169,7 +171,7 @@ public class Ejb3Configuration implements Serializable, Referenceable {
|
||||||
if ( ds != null ) {
|
if ( ds != null ) {
|
||||||
Map cpInjection = new HashMap();
|
Map cpInjection = new HashMap();
|
||||||
cpInjection.put( "dataSource", ds );
|
cpInjection.put( "dataSource", ds );
|
||||||
( (InjectionSettingsFactory) settingsFactory ).setConnectionProviderInjectionData( cpInjection );
|
connectionProviderInjectionData.put( ConnectionProviderInitiator.INJECTION_DATA, cpInjection );
|
||||||
this.setProperty( Environment.CONNECTION_PROVIDER, InjectedDataSourceConnectionProvider.class.getName() );
|
this.setProperty( Environment.CONNECTION_PROVIDER, InjectedDataSourceConnectionProvider.class.getName() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -900,11 +902,11 @@ public class Ejb3Configuration implements Serializable, Referenceable {
|
||||||
configure( (Properties)null, null );
|
configure( (Properties)null, null );
|
||||||
NamingHelper.bind(this);
|
NamingHelper.bind(this);
|
||||||
return new EntityManagerFactoryImpl(
|
return new EntityManagerFactoryImpl(
|
||||||
cfg.buildSessionFactory(),
|
|
||||||
transactionType,
|
transactionType,
|
||||||
discardOnClose,
|
discardOnClose,
|
||||||
getSessionInterceptorClass( cfg.getProperties() ),
|
getSessionInterceptorClass( cfg.getProperties() ),
|
||||||
cfg
|
cfg,
|
||||||
|
connectionProviderInjectionData
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
catch (HibernateException e) {
|
catch (HibernateException e) {
|
||||||
|
@ -1350,8 +1352,9 @@ public class Ejb3Configuration implements Serializable, Referenceable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
public Settings buildSettings() throws HibernateException {
|
TODO: not needed any more?
|
||||||
|
public Settings buildSettings(ConnectionProvider connectionProvider) throws HibernateException {
|
||||||
Thread thread = null;
|
Thread thread = null;
|
||||||
ClassLoader contextClassLoader = null;
|
ClassLoader contextClassLoader = null;
|
||||||
if (overridenClassLoader != null) {
|
if (overridenClassLoader != null) {
|
||||||
|
@ -1360,12 +1363,13 @@ public class Ejb3Configuration implements Serializable, Referenceable {
|
||||||
thread.setContextClassLoader( overridenClassLoader );
|
thread.setContextClassLoader( overridenClassLoader );
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
return settingsFactory.buildSettings( cfg.getProperties() );
|
return settingsFactory.buildSettings( cfg.getProperties(), connectionProvider );
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
if (thread != null) thread.setContextClassLoader( contextClassLoader );
|
if (thread != null) thread.setContextClassLoader( contextClassLoader );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
public Ejb3Configuration addProperties(Properties props) {
|
public Ejb3Configuration addProperties(Properties props) {
|
||||||
cfg.addProperties( props );
|
cfg.addProperties( props );
|
||||||
|
@ -1501,8 +1505,8 @@ public class Ejb3Configuration implements Serializable, Referenceable {
|
||||||
return cfg.getEventListeners();
|
return cfg.getEventListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
SessionFactory buildSessionFactory() throws HibernateException {
|
SessionFactory buildSessionFactory(ServicesRegistry serviceRegistry) throws HibernateException {
|
||||||
return cfg.buildSessionFactory();
|
return cfg.buildSessionFactory( serviceRegistry );
|
||||||
}
|
}
|
||||||
|
|
||||||
public Iterator getTableMappings() {
|
public Iterator getTableMappings() {
|
||||||
|
|
|
@ -41,6 +41,7 @@ import org.hibernate.SessionFactory;
|
||||||
import org.hibernate.Hibernate;
|
import org.hibernate.Hibernate;
|
||||||
import org.hibernate.HibernateException;
|
import org.hibernate.HibernateException;
|
||||||
import org.hibernate.EntityMode;
|
import org.hibernate.EntityMode;
|
||||||
|
import org.hibernate.cfg.internal.ServicesRegistryBootstrap;
|
||||||
import org.hibernate.metadata.ClassMetadata;
|
import org.hibernate.metadata.ClassMetadata;
|
||||||
import org.hibernate.engine.SessionFactoryImplementor;
|
import org.hibernate.engine.SessionFactoryImplementor;
|
||||||
import org.hibernate.mapping.PersistentClass;
|
import org.hibernate.mapping.PersistentClass;
|
||||||
|
@ -48,6 +49,8 @@ import org.hibernate.cfg.Configuration;
|
||||||
import org.hibernate.ejb.criteria.CriteriaBuilderImpl;
|
import org.hibernate.ejb.criteria.CriteriaBuilderImpl;
|
||||||
import org.hibernate.ejb.metamodel.MetamodelImpl;
|
import org.hibernate.ejb.metamodel.MetamodelImpl;
|
||||||
import org.hibernate.ejb.util.PersistenceUtilHelper;
|
import org.hibernate.ejb.util.PersistenceUtilHelper;
|
||||||
|
import org.hibernate.service.internal.ServicesRegistryImpl;
|
||||||
|
import org.hibernate.service.spi.ServicesRegistry;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Actual Hiberate implementation of {@link javax.persistence.EntityManagerFactory}.
|
* Actual Hiberate implementation of {@link javax.persistence.EntityManagerFactory}.
|
||||||
|
@ -57,6 +60,7 @@ import org.hibernate.ejb.util.PersistenceUtilHelper;
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
*/
|
*/
|
||||||
public class EntityManagerFactoryImpl implements HibernateEntityManagerFactory {
|
public class EntityManagerFactoryImpl implements HibernateEntityManagerFactory {
|
||||||
|
private final transient ServicesRegistryImpl serviceRegistry;
|
||||||
private final SessionFactory sessionFactory;
|
private final SessionFactory sessionFactory;
|
||||||
private final PersistenceUnitTransactionType transactionType;
|
private final PersistenceUnitTransactionType transactionType;
|
||||||
private final boolean discardOnClose;
|
private final boolean discardOnClose;
|
||||||
|
@ -65,16 +69,25 @@ public class EntityManagerFactoryImpl implements HibernateEntityManagerFactory {
|
||||||
private final Metamodel metamodel;
|
private final Metamodel metamodel;
|
||||||
private final HibernatePersistenceUnitUtil util;
|
private final HibernatePersistenceUnitUtil util;
|
||||||
private final Map<String,Object> properties;
|
private final Map<String,Object> properties;
|
||||||
|
private final Map connectionProviderInjectionData;
|
||||||
|
|
||||||
private final PersistenceUtilHelper.MetadataCache cache = new PersistenceUtilHelper.MetadataCache();
|
private final PersistenceUtilHelper.MetadataCache cache = new PersistenceUtilHelper.MetadataCache();
|
||||||
|
|
||||||
@SuppressWarnings( "unchecked" )
|
@SuppressWarnings( "unchecked" )
|
||||||
public EntityManagerFactoryImpl(
|
public EntityManagerFactoryImpl(
|
||||||
SessionFactory sessionFactory,
|
|
||||||
PersistenceUnitTransactionType transactionType,
|
PersistenceUnitTransactionType transactionType,
|
||||||
boolean discardOnClose,
|
boolean discardOnClose,
|
||||||
Class<?> sessionInterceptorClass,
|
Class<?> sessionInterceptorClass,
|
||||||
Configuration cfg) {
|
Configuration cfg,
|
||||||
this.sessionFactory = sessionFactory;
|
Map connectionProviderInjectionData) {
|
||||||
|
// FIXME: Get rid of this temporary way of creating the service registry for EM
|
||||||
|
Map serviceRegistryProperties = new HashMap(
|
||||||
|
cfg.getProperties().size() + connectionProviderInjectionData.size()
|
||||||
|
);
|
||||||
|
serviceRegistryProperties.putAll( cfg.getProperties() );
|
||||||
|
serviceRegistryProperties.putAll( connectionProviderInjectionData );
|
||||||
|
this.serviceRegistry = new ServicesRegistryBootstrap().initiateServicesRegistry( serviceRegistryProperties );
|
||||||
|
this.sessionFactory = cfg.buildSessionFactory( serviceRegistry );
|
||||||
this.transactionType = transactionType;
|
this.transactionType = transactionType;
|
||||||
this.discardOnClose = discardOnClose;
|
this.discardOnClose = discardOnClose;
|
||||||
this.sessionInterceptorClass = sessionInterceptorClass;
|
this.sessionInterceptorClass = sessionInterceptorClass;
|
||||||
|
@ -93,6 +106,7 @@ public class EntityManagerFactoryImpl implements HibernateEntityManagerFactory {
|
||||||
addAll( props, ( (SessionFactoryImplementor) sessionFactory ).getProperties() );
|
addAll( props, ( (SessionFactoryImplementor) sessionFactory ).getProperties() );
|
||||||
addAll( props, cfg.getProperties() );
|
addAll( props, cfg.getProperties() );
|
||||||
this.properties = Collections.unmodifiableMap( props );
|
this.properties = Collections.unmodifiableMap( props );
|
||||||
|
this.connectionProviderInjectionData = new HashMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void addAll(HashMap<String, Object> propertyMap, Properties properties) {
|
private static void addAll(HashMap<String, Object> propertyMap, Properties properties) {
|
||||||
|
@ -125,6 +139,7 @@ public class EntityManagerFactoryImpl implements HibernateEntityManagerFactory {
|
||||||
|
|
||||||
public void close() {
|
public void close() {
|
||||||
sessionFactory.close();
|
sessionFactory.close();
|
||||||
|
serviceRegistry.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, Object> getProperties() {
|
public Map<String, Object> getProperties() {
|
||||||
|
|
|
@ -24,12 +24,14 @@
|
||||||
package org.hibernate.ejb;
|
package org.hibernate.ejb;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Properties;
|
||||||
import javax.persistence.EntityManagerFactory;
|
import javax.persistence.EntityManagerFactory;
|
||||||
import javax.persistence.spi.LoadState;
|
import javax.persistence.spi.LoadState;
|
||||||
import javax.persistence.spi.PersistenceProvider;
|
import javax.persistence.spi.PersistenceProvider;
|
||||||
import javax.persistence.spi.PersistenceUnitInfo;
|
import javax.persistence.spi.PersistenceUnitInfo;
|
||||||
import javax.persistence.spi.ProviderUtil;
|
import javax.persistence.spi.ProviderUtil;
|
||||||
|
|
||||||
|
import org.hibernate.cfg.internal.ServicesRegistryBootstrap;
|
||||||
import org.hibernate.ejb.util.PersistenceUtilHelper;
|
import org.hibernate.ejb.util.PersistenceUtilHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,53 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2009, Red Hat Middleware LLC 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.
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
* Lesser General Public License, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
||||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
|
||||||
* for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
|
||||||
* along with this distribution; if not, write to:
|
|
||||||
* Free Software Foundation, Inc.
|
|
||||||
* 51 Franklin Street, Fifth Floor
|
|
||||||
* Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
//$Id$
|
|
||||||
package org.hibernate.ejb;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Properties;
|
|
||||||
|
|
||||||
import org.hibernate.cfg.SettingsFactory;
|
|
||||||
import org.hibernate.connection.ConnectionProvider;
|
|
||||||
import org.hibernate.connection.ConnectionProviderFactory;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Emmanuel Bernard
|
|
||||||
*/
|
|
||||||
public class InjectionSettingsFactory extends SettingsFactory {
|
|
||||||
private Map connectionProviderInjectionData;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Map<String,Object> where the key represents the javabean property in witch
|
|
||||||
* Object will be injected
|
|
||||||
*
|
|
||||||
* @param connectionProviderInjectionData
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public void setConnectionProviderInjectionData(Map connectionProviderInjectionData) {
|
|
||||||
this.connectionProviderInjectionData = connectionProviderInjectionData;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected ConnectionProvider createConnectionProvider(Properties properties) {
|
|
||||||
return ConnectionProviderFactory.newConnectionProvider( properties, connectionProviderInjectionData );
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -28,12 +28,13 @@ import javax.sql.DataSource;
|
||||||
|
|
||||||
import org.hibernate.HibernateException;
|
import org.hibernate.HibernateException;
|
||||||
import org.hibernate.cfg.Environment;
|
import org.hibernate.cfg.Environment;
|
||||||
import org.hibernate.connection.DatasourceConnectionProvider;
|
import org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl;
|
||||||
|
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A specialization of {@link DatasourceConnectionProvider} which uses the {@link DataSource} specified vi
|
* A specialization of {@link DatasourceConnectionProviderImpl} which uses the {@link DataSource} specified vi
|
||||||
* {@link #setDataSource} rather than locating it from JNDI.
|
* {@link #setDataSource} rather than locating it from JNDI.
|
||||||
* <p/>
|
* <p/>
|
||||||
* NOTE : {@link #setDataSource} must be called prior to {@link #configure}.
|
* NOTE : {@link #setDataSource} must be called prior to {@link #configure}.
|
||||||
|
@ -42,7 +43,7 @@ import org.slf4j.Logger;
|
||||||
*
|
*
|
||||||
* @author Emmanuel Bernard
|
* @author Emmanuel Bernard
|
||||||
*/
|
*/
|
||||||
public class InjectedDataSourceConnectionProvider extends DatasourceConnectionProvider {
|
public class InjectedDataSourceConnectionProvider extends DatasourceConnectionProviderImpl {
|
||||||
private final Logger log = LoggerFactory.getLogger( InjectedDataSourceConnectionProvider.class );
|
private final Logger log = LoggerFactory.getLogger( InjectedDataSourceConnectionProvider.class );
|
||||||
|
|
||||||
private String user;
|
private String user;
|
||||||
|
|
|
@ -118,6 +118,7 @@ public abstract class TestCase extends HibernateTestCase {
|
||||||
if ( factory != null ) {
|
if ( factory != null ) {
|
||||||
factory.close();
|
factory.close();
|
||||||
}
|
}
|
||||||
|
super.closeResources();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected EntityManager getOrCreateEntityManager() {
|
protected EntityManager getOrCreateEntityManager() {
|
||||||
|
|
|
@ -61,7 +61,7 @@ public class MetadataTest extends TestCase {
|
||||||
configure( cfg );
|
configure( cfg );
|
||||||
cfg.addAnnotatedClass( WithGenericCollection.class );
|
cfg.addAnnotatedClass( WithGenericCollection.class );
|
||||||
cfg.buildMappings();
|
cfg.buildMappings();
|
||||||
SessionFactoryImplementor sfi = (SessionFactoryImplementor) cfg.buildSessionFactory();
|
SessionFactoryImplementor sfi = (SessionFactoryImplementor) cfg.buildSessionFactory( getServiceRegistry() );
|
||||||
MetamodelImpl.buildMetamodel( cfg.getClassMappings(), sfi );
|
MetamodelImpl.buildMetamodel( cfg.getClassMappings(), sfi );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,8 +9,11 @@ import org.hibernate.Session;
|
||||||
import org.hibernate.SessionFactory;
|
import org.hibernate.SessionFactory;
|
||||||
import org.hibernate.cfg.AnnotationConfiguration;
|
import org.hibernate.cfg.AnnotationConfiguration;
|
||||||
import org.hibernate.cfg.Configuration;
|
import org.hibernate.cfg.Configuration;
|
||||||
|
import org.hibernate.cfg.Environment;
|
||||||
import org.hibernate.envers.AuditReader;
|
import org.hibernate.envers.AuditReader;
|
||||||
import org.hibernate.envers.AuditReaderFactory;
|
import org.hibernate.envers.AuditReaderFactory;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
|
|
||||||
import org.testng.annotations.*;
|
import org.testng.annotations.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -22,6 +25,7 @@ import org.testng.annotations.*;
|
||||||
public abstract class AbstractSessionTest {
|
public abstract class AbstractSessionTest {
|
||||||
|
|
||||||
protected Configuration config;
|
protected Configuration config;
|
||||||
|
private ServiceRegistryHolder serviceRegistryHolder;
|
||||||
private SessionFactory sessionFactory;
|
private SessionFactory sessionFactory;
|
||||||
private Session session ;
|
private Session session ;
|
||||||
private AuditReader auditReader;
|
private AuditReader auditReader;
|
||||||
|
@ -40,7 +44,8 @@ public abstract class AbstractSessionTest {
|
||||||
|
|
||||||
this.initMappings();
|
this.initMappings();
|
||||||
|
|
||||||
sessionFactory = config.buildSessionFactory();
|
serviceRegistryHolder = new ServiceRegistryHolder( Environment.getProperties() );
|
||||||
|
sessionFactory = config.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void initMappings() throws MappingException, URISyntaxException ;
|
protected abstract void initMappings() throws MappingException, URISyntaxException ;
|
||||||
|
@ -60,8 +65,16 @@ public abstract class AbstractSessionTest {
|
||||||
|
|
||||||
@AfterClass
|
@AfterClass
|
||||||
public void closeSessionFactory() {
|
public void closeSessionFactory() {
|
||||||
|
try {
|
||||||
sessionFactory.close();
|
sessionFactory.close();
|
||||||
}
|
}
|
||||||
|
finally {
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
serviceRegistryHolder = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
protected Session getSession() {
|
protected Session getSession() {
|
||||||
|
|
|
@ -64,7 +64,9 @@ public abstract class AbstractEntityCollectionRegionTestCase extends AbstractReg
|
||||||
Configuration cfg = CacheTestUtil.buildConfiguration("test", InfinispanRegionFactory.class, true, false);
|
Configuration cfg = CacheTestUtil.buildConfiguration("test", InfinispanRegionFactory.class, true, false);
|
||||||
String entityCfg = "entity";
|
String entityCfg = "entity";
|
||||||
cfg.setProperty(InfinispanRegionFactory.ENTITY_CACHE_RESOURCE_PROP, entityCfg);
|
cfg.setProperty(InfinispanRegionFactory.ENTITY_CACHE_RESOURCE_PROP, entityCfg);
|
||||||
InfinispanRegionFactory regionFactory = CacheTestUtil.startRegionFactory(cfg, getCacheTestSupport());
|
InfinispanRegionFactory regionFactory = CacheTestUtil.startRegionFactory(
|
||||||
|
getConnectionProvider(), cfg, getCacheTestSupport()
|
||||||
|
);
|
||||||
supportedAccessTypeTest(regionFactory, cfg.getProperties());
|
supportedAccessTypeTest(regionFactory, cfg.getProperties());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,14 +84,18 @@ public abstract class AbstractEntityCollectionRegionTestCase extends AbstractReg
|
||||||
*/
|
*/
|
||||||
public void testIsTransactionAware() throws Exception {
|
public void testIsTransactionAware() throws Exception {
|
||||||
Configuration cfg = CacheTestUtil.buildConfiguration("test", InfinispanRegionFactory.class, true, false);
|
Configuration cfg = CacheTestUtil.buildConfiguration("test", InfinispanRegionFactory.class, true, false);
|
||||||
InfinispanRegionFactory regionFactory = CacheTestUtil.startRegionFactory(cfg, getCacheTestSupport());
|
InfinispanRegionFactory regionFactory = CacheTestUtil.startRegionFactory(
|
||||||
|
getConnectionProvider(), cfg, getCacheTestSupport()
|
||||||
|
);
|
||||||
TransactionalDataRegion region = (TransactionalDataRegion) createRegion(regionFactory, "test/test", cfg.getProperties(), getCacheDataDescription());
|
TransactionalDataRegion region = (TransactionalDataRegion) createRegion(regionFactory, "test/test", cfg.getProperties(), getCacheDataDescription());
|
||||||
assertTrue("Region is transaction-aware", region.isTransactionAware());
|
assertTrue("Region is transaction-aware", region.isTransactionAware());
|
||||||
CacheTestUtil.stopRegionFactory(regionFactory, getCacheTestSupport());
|
CacheTestUtil.stopRegionFactory(regionFactory, getCacheTestSupport());
|
||||||
cfg = CacheTestUtil.buildConfiguration("test", InfinispanRegionFactory.class, true, false);
|
cfg = CacheTestUtil.buildConfiguration("test", InfinispanRegionFactory.class, true, false);
|
||||||
// Make it non-transactional
|
// Make it non-transactional
|
||||||
cfg.getProperties().remove(Environment.TRANSACTION_MANAGER_STRATEGY);
|
cfg.getProperties().remove(Environment.TRANSACTION_MANAGER_STRATEGY);
|
||||||
regionFactory = CacheTestUtil.startRegionFactory(cfg, getCacheTestSupport());
|
regionFactory = CacheTestUtil.startRegionFactory(
|
||||||
|
getConnectionProvider(), cfg, getCacheTestSupport()
|
||||||
|
);
|
||||||
region = (TransactionalDataRegion) createRegion(regionFactory, "test/test", cfg.getProperties(), getCacheDataDescription());
|
region = (TransactionalDataRegion) createRegion(regionFactory, "test/test", cfg.getProperties(), getCacheDataDescription());
|
||||||
assertFalse("Region is not transaction-aware", region.isTransactionAware());
|
assertFalse("Region is not transaction-aware", region.isTransactionAware());
|
||||||
CacheTestUtil.stopRegionFactory(regionFactory, getCacheTestSupport());
|
CacheTestUtil.stopRegionFactory(regionFactory, getCacheTestSupport());
|
||||||
|
@ -97,7 +103,9 @@ public abstract class AbstractEntityCollectionRegionTestCase extends AbstractReg
|
||||||
|
|
||||||
public void testGetCacheDataDescription() throws Exception {
|
public void testGetCacheDataDescription() throws Exception {
|
||||||
Configuration cfg = CacheTestUtil.buildConfiguration("test", InfinispanRegionFactory.class, true, false);
|
Configuration cfg = CacheTestUtil.buildConfiguration("test", InfinispanRegionFactory.class, true, false);
|
||||||
InfinispanRegionFactory regionFactory = CacheTestUtil.startRegionFactory(cfg, getCacheTestSupport());
|
InfinispanRegionFactory regionFactory = CacheTestUtil.startRegionFactory(
|
||||||
|
getConnectionProvider(), cfg, getCacheTestSupport()
|
||||||
|
);
|
||||||
TransactionalDataRegion region = (TransactionalDataRegion) createRegion(regionFactory, "test/test", cfg.getProperties(), getCacheDataDescription());
|
TransactionalDataRegion region = (TransactionalDataRegion) createRegion(regionFactory, "test/test", cfg.getProperties(), getCacheDataDescription());
|
||||||
CacheDataDescription cdd = region.getCacheDataDescription();
|
CacheDataDescription cdd = region.getCacheDataDescription();
|
||||||
assertNotNull(cdd);
|
assertNotNull(cdd);
|
||||||
|
|
|
@ -72,7 +72,9 @@ public abstract class AbstractGeneralDataRegionTestCase extends AbstractRegionIm
|
||||||
|
|
||||||
private void evictOrRemoveTest() throws Exception {
|
private void evictOrRemoveTest() throws Exception {
|
||||||
Configuration cfg = createConfiguration();
|
Configuration cfg = createConfiguration();
|
||||||
InfinispanRegionFactory regionFactory = CacheTestUtil.startRegionFactory(cfg, getCacheTestSupport());
|
InfinispanRegionFactory regionFactory = CacheTestUtil.startRegionFactory(
|
||||||
|
getConnectionProvider(), cfg, getCacheTestSupport()
|
||||||
|
);
|
||||||
CacheAdapter localCache = getInfinispanCache(regionFactory);
|
CacheAdapter localCache = getInfinispanCache(regionFactory);
|
||||||
boolean invalidation = localCache.isClusteredInvalidation();
|
boolean invalidation = localCache.isClusteredInvalidation();
|
||||||
|
|
||||||
|
@ -83,7 +85,9 @@ public abstract class AbstractGeneralDataRegionTestCase extends AbstractRegionIm
|
||||||
getStandardRegionName(REGION_PREFIX), cfg.getProperties(), null);
|
getStandardRegionName(REGION_PREFIX), cfg.getProperties(), null);
|
||||||
|
|
||||||
cfg = createConfiguration();
|
cfg = createConfiguration();
|
||||||
regionFactory = CacheTestUtil.startRegionFactory(cfg, getCacheTestSupport());
|
regionFactory = CacheTestUtil.startRegionFactory(
|
||||||
|
getConnectionProvider(), cfg, getCacheTestSupport()
|
||||||
|
);
|
||||||
|
|
||||||
GeneralDataRegion remoteRegion = (GeneralDataRegion) createRegion(regionFactory,
|
GeneralDataRegion remoteRegion = (GeneralDataRegion) createRegion(regionFactory,
|
||||||
getStandardRegionName(REGION_PREFIX), cfg.getProperties(), null);
|
getStandardRegionName(REGION_PREFIX), cfg.getProperties(), null);
|
||||||
|
@ -121,7 +125,9 @@ public abstract class AbstractGeneralDataRegionTestCase extends AbstractRegionIm
|
||||||
|
|
||||||
private void evictOrRemoveAllTest(String configName) throws Exception {
|
private void evictOrRemoveAllTest(String configName) throws Exception {
|
||||||
Configuration cfg = createConfiguration();
|
Configuration cfg = createConfiguration();
|
||||||
InfinispanRegionFactory regionFactory = CacheTestUtil.startRegionFactory(cfg, getCacheTestSupport());
|
InfinispanRegionFactory regionFactory = CacheTestUtil.startRegionFactory(
|
||||||
|
getConnectionProvider(), cfg, getCacheTestSupport()
|
||||||
|
);
|
||||||
CacheAdapter localCache = getInfinispanCache(regionFactory);
|
CacheAdapter localCache = getInfinispanCache(regionFactory);
|
||||||
|
|
||||||
// Sleep a bit to avoid concurrent FLUSH problem
|
// Sleep a bit to avoid concurrent FLUSH problem
|
||||||
|
@ -131,7 +137,9 @@ public abstract class AbstractGeneralDataRegionTestCase extends AbstractRegionIm
|
||||||
getStandardRegionName(REGION_PREFIX), cfg.getProperties(), null);
|
getStandardRegionName(REGION_PREFIX), cfg.getProperties(), null);
|
||||||
|
|
||||||
cfg = createConfiguration();
|
cfg = createConfiguration();
|
||||||
regionFactory = CacheTestUtil.startRegionFactory(cfg, getCacheTestSupport());
|
regionFactory = CacheTestUtil.startRegionFactory(
|
||||||
|
getConnectionProvider(), cfg, getCacheTestSupport()
|
||||||
|
);
|
||||||
CacheAdapter remoteCache = getInfinispanCache(regionFactory);
|
CacheAdapter remoteCache = getInfinispanCache(regionFactory);
|
||||||
|
|
||||||
// Sleep a bit to avoid concurrent FLUSH problem
|
// Sleep a bit to avoid concurrent FLUSH problem
|
||||||
|
|
|
@ -27,6 +27,10 @@ import java.util.Set;
|
||||||
|
|
||||||
import org.hibernate.cache.RegionFactory;
|
import org.hibernate.cache.RegionFactory;
|
||||||
import org.hibernate.cache.infinispan.util.CacheHelper;
|
import org.hibernate.cache.infinispan.util.CacheHelper;
|
||||||
|
import org.hibernate.cfg.Environment;
|
||||||
|
import org.hibernate.engine.jdbc.spi.JdbcServices;
|
||||||
|
import org.hibernate.service.jdbc.connections.spi.ConnectionProvider;
|
||||||
|
import org.hibernate.service.spi.ServicesRegistry;
|
||||||
import org.hibernate.testing.junit.UnitTestCase;
|
import org.hibernate.testing.junit.UnitTestCase;
|
||||||
import org.hibernate.test.cache.infinispan.util.CacheTestSupport;
|
import org.hibernate.test.cache.infinispan.util.CacheTestSupport;
|
||||||
import org.infinispan.Cache;
|
import org.infinispan.Cache;
|
||||||
|
|
|
@ -53,9 +53,11 @@ import org.hibernate.cache.infinispan.util.CacheAdapter;
|
||||||
import org.hibernate.cache.infinispan.util.CacheAdapterImpl;
|
import org.hibernate.cache.infinispan.util.CacheAdapterImpl;
|
||||||
import org.hibernate.cache.infinispan.util.FlagAdapter;
|
import org.hibernate.cache.infinispan.util.FlagAdapter;
|
||||||
import org.hibernate.cfg.Configuration;
|
import org.hibernate.cfg.Configuration;
|
||||||
|
import org.hibernate.cfg.Environment;
|
||||||
import org.hibernate.test.cache.infinispan.AbstractNonFunctionalTestCase;
|
import org.hibernate.test.cache.infinispan.AbstractNonFunctionalTestCase;
|
||||||
import org.hibernate.test.cache.infinispan.functional.cluster.DualNodeJtaTransactionManagerImpl;
|
import org.hibernate.test.cache.infinispan.functional.cluster.DualNodeJtaTransactionManagerImpl;
|
||||||
import org.hibernate.test.cache.infinispan.util.CacheTestUtil;
|
import org.hibernate.test.cache.infinispan.util.CacheTestUtil;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
import org.hibernate.util.ComparableComparator;
|
import org.hibernate.util.ComparableComparator;
|
||||||
import org.infinispan.Cache;
|
import org.infinispan.Cache;
|
||||||
import org.infinispan.transaction.tm.BatchModeTransactionManager;
|
import org.infinispan.transaction.tm.BatchModeTransactionManager;
|
||||||
|
@ -522,6 +524,7 @@ public abstract class AbstractCollectionRegionAccessStrategyTestCase extends Abs
|
||||||
private final String configResource;
|
private final String configResource;
|
||||||
private final String configName;
|
private final String configName;
|
||||||
private String preferIPv4Stack;
|
private String preferIPv4Stack;
|
||||||
|
private ServiceRegistryHolder serviceRegistryHolder;
|
||||||
|
|
||||||
public AccessStrategyTestSetup(Test test, String configName) {
|
public AccessStrategyTestSetup(Test test, String configName) {
|
||||||
this(test, configName, null);
|
this(test, configName, null);
|
||||||
|
@ -541,11 +544,19 @@ public abstract class AbstractCollectionRegionAccessStrategyTestCase extends Abs
|
||||||
preferIPv4Stack = System.getProperty(PREFER_IPV4STACK);
|
preferIPv4Stack = System.getProperty(PREFER_IPV4STACK);
|
||||||
System.setProperty(PREFER_IPV4STACK, "true");
|
System.setProperty(PREFER_IPV4STACK, "true");
|
||||||
|
|
||||||
|
serviceRegistryHolder = new ServiceRegistryHolder( Environment.getProperties() );
|
||||||
|
|
||||||
localCfg = createConfiguration(configName, configResource);
|
localCfg = createConfiguration(configName, configResource);
|
||||||
localRegionFactory = CacheTestUtil.startRegionFactory(localCfg);
|
localRegionFactory = CacheTestUtil.startRegionFactory(
|
||||||
|
serviceRegistryHolder.getJdbcServicesImpl().getConnectionProvider(),
|
||||||
|
localCfg
|
||||||
|
);
|
||||||
|
|
||||||
remoteCfg = createConfiguration(configName, configResource);
|
remoteCfg = createConfiguration(configName, configResource);
|
||||||
remoteRegionFactory = CacheTestUtil.startRegionFactory(remoteCfg);
|
remoteRegionFactory = CacheTestUtil.startRegionFactory(
|
||||||
|
serviceRegistryHolder.getJdbcServicesImpl().getConnectionProvider(),
|
||||||
|
remoteCfg
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -559,12 +570,19 @@ public abstract class AbstractCollectionRegionAccessStrategyTestCase extends Abs
|
||||||
System.setProperty(PREFER_IPV4STACK, preferIPv4Stack);
|
System.setProperty(PREFER_IPV4STACK, preferIPv4Stack);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
if (localRegionFactory != null)
|
if (localRegionFactory != null)
|
||||||
localRegionFactory.stop();
|
localRegionFactory.stop();
|
||||||
|
|
||||||
if (remoteRegionFactory != null)
|
if (remoteRegionFactory != null)
|
||||||
remoteRegionFactory.stop();
|
remoteRegionFactory.stop();
|
||||||
}
|
}
|
||||||
|
finally {
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,9 @@ public class TransactionalExtraAPITestCase extends AbstractNonFunctionalTestCase
|
||||||
|
|
||||||
if (getCollectionAccessStrategy() == null) {
|
if (getCollectionAccessStrategy() == null) {
|
||||||
Configuration cfg = createConfiguration();
|
Configuration cfg = createConfiguration();
|
||||||
InfinispanRegionFactory rf = CacheTestUtil.startRegionFactory(cfg, getCacheTestSupport());
|
InfinispanRegionFactory rf = CacheTestUtil.startRegionFactory(
|
||||||
|
getConnectionProvider(), cfg, getCacheTestSupport()
|
||||||
|
);
|
||||||
|
|
||||||
// Sleep a bit to avoid concurrent FLUSH problem
|
// Sleep a bit to avoid concurrent FLUSH problem
|
||||||
avoidConcurrentFlush();
|
avoidConcurrentFlush();
|
||||||
|
|
|
@ -41,8 +41,10 @@ import org.hibernate.cache.infinispan.impl.BaseRegion;
|
||||||
import org.hibernate.cache.infinispan.util.CacheAdapter;
|
import org.hibernate.cache.infinispan.util.CacheAdapter;
|
||||||
import org.hibernate.cache.infinispan.util.FlagAdapter;
|
import org.hibernate.cache.infinispan.util.FlagAdapter;
|
||||||
import org.hibernate.cfg.Configuration;
|
import org.hibernate.cfg.Configuration;
|
||||||
|
import org.hibernate.cfg.Environment;
|
||||||
import org.hibernate.test.cache.infinispan.AbstractNonFunctionalTestCase;
|
import org.hibernate.test.cache.infinispan.AbstractNonFunctionalTestCase;
|
||||||
import org.hibernate.test.cache.infinispan.util.CacheTestUtil;
|
import org.hibernate.test.cache.infinispan.util.CacheTestUtil;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
import org.hibernate.util.ComparableComparator;
|
import org.hibernate.util.ComparableComparator;
|
||||||
import org.infinispan.transaction.tm.BatchModeTransactionManager;
|
import org.infinispan.transaction.tm.BatchModeTransactionManager;
|
||||||
|
|
||||||
|
@ -637,6 +639,7 @@ public abstract class AbstractEntityRegionAccessStrategyTestCase extends Abstrac
|
||||||
private static final String PREFER_IPV4STACK = "java.net.preferIPv4Stack";
|
private static final String PREFER_IPV4STACK = "java.net.preferIPv4Stack";
|
||||||
private final String configName;
|
private final String configName;
|
||||||
private String preferIPv4Stack;
|
private String preferIPv4Stack;
|
||||||
|
private ServiceRegistryHolder serviceRegistryHolder;
|
||||||
|
|
||||||
public AccessStrategyTestSetup(Test test, String configName) {
|
public AccessStrategyTestSetup(Test test, String configName) {
|
||||||
super(test);
|
super(test);
|
||||||
|
@ -658,23 +661,38 @@ public abstract class AbstractEntityRegionAccessStrategyTestCase extends Abstrac
|
||||||
preferIPv4Stack = System.getProperty(PREFER_IPV4STACK);
|
preferIPv4Stack = System.getProperty(PREFER_IPV4STACK);
|
||||||
System.setProperty(PREFER_IPV4STACK, "true");
|
System.setProperty(PREFER_IPV4STACK, "true");
|
||||||
|
|
||||||
|
serviceRegistryHolder = new ServiceRegistryHolder( Environment.getProperties() );
|
||||||
|
|
||||||
localCfg = createConfiguration(configName);
|
localCfg = createConfiguration(configName);
|
||||||
localRegionFactory = CacheTestUtil.startRegionFactory(localCfg);
|
localRegionFactory = CacheTestUtil.startRegionFactory(
|
||||||
|
serviceRegistryHolder.getJdbcServicesImpl().getConnectionProvider(),
|
||||||
|
localCfg
|
||||||
|
);
|
||||||
|
|
||||||
remoteCfg = createConfiguration(configName);
|
remoteCfg = createConfiguration(configName);
|
||||||
remoteRegionFactory = CacheTestUtil.startRegionFactory(remoteCfg);
|
remoteRegionFactory = CacheTestUtil.startRegionFactory(
|
||||||
|
serviceRegistryHolder.getJdbcServicesImpl().getConnectionProvider(),
|
||||||
|
remoteCfg
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void tearDown() throws Exception {
|
protected void tearDown() throws Exception {
|
||||||
super.tearDown();
|
super.tearDown();
|
||||||
|
|
||||||
|
try {
|
||||||
if (localRegionFactory != null)
|
if (localRegionFactory != null)
|
||||||
localRegionFactory.stop();
|
localRegionFactory.stop();
|
||||||
|
|
||||||
if (remoteRegionFactory != null)
|
if (remoteRegionFactory != null)
|
||||||
remoteRegionFactory.stop();
|
remoteRegionFactory.stop();
|
||||||
}
|
}
|
||||||
|
finally {
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -60,7 +60,9 @@ public class TransactionalExtraAPITestCase extends AbstractNonFunctionalTestCase
|
||||||
|
|
||||||
if (getEntityAccessStrategy() == null) {
|
if (getEntityAccessStrategy() == null) {
|
||||||
Configuration cfg = createConfiguration();
|
Configuration cfg = createConfiguration();
|
||||||
InfinispanRegionFactory rf = CacheTestUtil.startRegionFactory(cfg, getCacheTestSupport());
|
InfinispanRegionFactory rf = CacheTestUtil.startRegionFactory(
|
||||||
|
getConnectionProvider(), cfg, getCacheTestSupport()
|
||||||
|
);
|
||||||
|
|
||||||
// Sleep a bit to avoid concurrent FLUSH problem
|
// Sleep a bit to avoid concurrent FLUSH problem
|
||||||
avoidConcurrentFlush();
|
avoidConcurrentFlush();
|
||||||
|
|
|
@ -26,8 +26,10 @@ package org.hibernate.test.cache.infinispan.functional;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
|
@ -44,7 +46,7 @@ import org.hibernate.Session;
|
||||||
import org.hibernate.cache.RegionFactory;
|
import org.hibernate.cache.RegionFactory;
|
||||||
import org.hibernate.cache.infinispan.InfinispanRegionFactory;
|
import org.hibernate.cache.infinispan.InfinispanRegionFactory;
|
||||||
import org.hibernate.cfg.Configuration;
|
import org.hibernate.cfg.Configuration;
|
||||||
import org.hibernate.connection.ConnectionProvider;
|
import org.hibernate.service.jdbc.connections.spi.ConnectionProvider;
|
||||||
import org.hibernate.stat.SecondLevelCacheStatistics;
|
import org.hibernate.stat.SecondLevelCacheStatistics;
|
||||||
import org.hibernate.test.cache.infinispan.functional.cluster.DualNodeTestCase;
|
import org.hibernate.test.cache.infinispan.functional.cluster.DualNodeTestCase;
|
||||||
import org.hibernate.test.cache.infinispan.functional.cluster.DualNodeConnectionProviderImpl;
|
import org.hibernate.test.cache.infinispan.functional.cluster.DualNodeConnectionProviderImpl;
|
||||||
|
@ -148,6 +150,11 @@ public class ConcurrentWriteTest extends SingleNodeTestCase {
|
||||||
cfg.setProperty(DualNodeTestCase.NODE_ID_PROP, DualNodeTestCase.LOCAL);
|
cfg.setProperty(DualNodeTestCase.NODE_ID_PROP, DualNodeTestCase.LOCAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Map getConnectionProviderInjectionProperties() {
|
||||||
|
return Collections.singletonMap( DualNodeTestCase.NODE_ID_FIELD, DualNodeTestCase.LOCAL );
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean getUseQueryCache() {
|
protected boolean getUseQueryCache() {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -98,7 +98,7 @@ public class JndiRegionFactoryTestCase extends SingleNodeTestCase {
|
||||||
getEnvironment().getSessionFactory().close();
|
getEnvironment().getSessionFactory().close();
|
||||||
bindToJndi = false;
|
bindToJndi = false;
|
||||||
ExecutionEnvironment environment = new ExecutionEnvironment( this );
|
ExecutionEnvironment environment = new ExecutionEnvironment( this );
|
||||||
environment.initialize();
|
environment.initialize( getConnectionProviderInjectionProperties() );
|
||||||
setEnvironment(environment);
|
setEnvironment(environment);
|
||||||
addEntityCheckCache();
|
addEntityCheckCache();
|
||||||
JndiInfinispanRegionFactory regionFactory = (JndiInfinispanRegionFactory) ((SessionFactoryImplementor)
|
JndiInfinispanRegionFactory regionFactory = (JndiInfinispanRegionFactory) ((SessionFactoryImplementor)
|
||||||
|
|
|
@ -7,7 +7,7 @@ import org.hibernate.cache.RegionFactory;
|
||||||
import org.hibernate.cache.infinispan.InfinispanRegionFactory;
|
import org.hibernate.cache.infinispan.InfinispanRegionFactory;
|
||||||
import org.hibernate.cfg.Configuration;
|
import org.hibernate.cfg.Configuration;
|
||||||
import org.hibernate.cfg.Environment;
|
import org.hibernate.cfg.Environment;
|
||||||
import org.hibernate.connection.ConnectionProvider;
|
import org.hibernate.service.jdbc.connections.spi.ConnectionProvider;
|
||||||
import org.hibernate.testing.junit.functional.FunctionalTestCase;
|
import org.hibernate.testing.junit.functional.FunctionalTestCase;
|
||||||
import org.hibernate.stat.SecondLevelCacheStatistics;
|
import org.hibernate.stat.SecondLevelCacheStatistics;
|
||||||
import org.hibernate.stat.Statistics;
|
import org.hibernate.stat.Statistics;
|
||||||
|
|
|
@ -34,7 +34,7 @@ import org.hibernate.cache.infinispan.InfinispanRegionFactory;
|
||||||
import org.hibernate.cfg.Configuration;
|
import org.hibernate.cfg.Configuration;
|
||||||
import org.hibernate.cfg.Environment;
|
import org.hibernate.cfg.Environment;
|
||||||
import org.hibernate.classic.Session;
|
import org.hibernate.classic.Session;
|
||||||
import org.hibernate.connection.ConnectionProvider;
|
import org.hibernate.service.jdbc.connections.spi.ConnectionProvider;
|
||||||
import org.hibernate.testing.junit.functional.FunctionalTestCase;
|
import org.hibernate.testing.junit.functional.FunctionalTestCase;
|
||||||
import org.hibernate.stat.SecondLevelCacheStatistics;
|
import org.hibernate.stat.SecondLevelCacheStatistics;
|
||||||
import org.hibernate.test.cache.infinispan.functional.Contact;
|
import org.hibernate.test.cache.infinispan.functional.Contact;
|
||||||
|
|
|
@ -28,8 +28,9 @@ import java.sql.SQLException;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import org.hibernate.HibernateException;
|
import org.hibernate.HibernateException;
|
||||||
import org.hibernate.connection.ConnectionProvider;
|
import org.hibernate.service.jdbc.connections.spi.ConnectionProvider;
|
||||||
import org.hibernate.connection.ConnectionProviderFactory;
|
import org.hibernate.service.spi.Stoppable;
|
||||||
|
import org.hibernate.test.common.ConnectionProviderBuilder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A {@link ConnectionProvider} implementation adding JTA-style transactionality around the returned
|
* A {@link ConnectionProvider} implementation adding JTA-style transactionality around the returned
|
||||||
|
@ -38,7 +39,7 @@ import org.hibernate.connection.ConnectionProviderFactory;
|
||||||
* @author Brian Stansberry
|
* @author Brian Stansberry
|
||||||
*/
|
*/
|
||||||
public class DualNodeConnectionProviderImpl implements ConnectionProvider {
|
public class DualNodeConnectionProviderImpl implements ConnectionProvider {
|
||||||
private static ConnectionProvider actualConnectionProvider = ConnectionProviderFactory.newConnectionProvider();
|
private static ConnectionProvider actualConnectionProvider = ConnectionProviderBuilder.buildConnectionProvider();
|
||||||
private String nodeId;
|
private String nodeId;
|
||||||
private boolean isTransactional;
|
private boolean isTransactional;
|
||||||
|
|
||||||
|
@ -46,10 +47,11 @@ public class DualNodeConnectionProviderImpl implements ConnectionProvider {
|
||||||
return actualConnectionProvider;
|
return actualConnectionProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void configure(Properties props) throws HibernateException {
|
public void setNodeId(String nodeId) throws HibernateException {
|
||||||
nodeId = props.getProperty(DualNodeTestCase.NODE_ID_PROP);
|
if (nodeId == null) {
|
||||||
if (nodeId == null)
|
throw new HibernateException( "nodeId not configured" );
|
||||||
throw new HibernateException(DualNodeTestCase.NODE_ID_PROP + " not configured");
|
}
|
||||||
|
this.nodeId = nodeId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Connection getConnection() throws SQLException {
|
public Connection getConnection() throws SQLException {
|
||||||
|
@ -76,7 +78,9 @@ public class DualNodeConnectionProviderImpl implements ConnectionProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void close() throws HibernateException {
|
public void close() throws HibernateException {
|
||||||
actualConnectionProvider.close();
|
if ( actualConnectionProvider instanceof Stoppable ) {
|
||||||
|
( ( Stoppable ) actualConnectionProvider ).stop();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean supportsAggressiveRelease() {
|
public boolean supportsAggressiveRelease() {
|
||||||
|
|
|
@ -21,6 +21,9 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.test.cache.infinispan.functional.cluster;
|
package org.hibernate.test.cache.infinispan.functional.cluster;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import org.hibernate.Session;
|
import org.hibernate.Session;
|
||||||
import org.hibernate.cfg.Configuration;
|
import org.hibernate.cfg.Configuration;
|
||||||
import org.hibernate.cfg.Environment;
|
import org.hibernate.cfg.Environment;
|
||||||
|
@ -43,6 +46,7 @@ public abstract class DualNodeTestCase extends FunctionalTestCase {
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(DualNodeTestCase.class);
|
private static final Log log = LogFactory.getLog(DualNodeTestCase.class);
|
||||||
public static final String NODE_ID_PROP = "hibernate.test.cluster.node.id";
|
public static final String NODE_ID_PROP = "hibernate.test.cluster.node.id";
|
||||||
|
public static final String NODE_ID_FIELD = "nodeId";
|
||||||
public static final String LOCAL = "local";
|
public static final String LOCAL = "local";
|
||||||
public static final String REMOTE = "remote";
|
public static final String REMOTE = "remote";
|
||||||
private ExecutionEnvironment secondNodeEnvironment;
|
private ExecutionEnvironment secondNodeEnvironment;
|
||||||
|
@ -71,11 +75,16 @@ public abstract class DualNodeTestCase extends FunctionalTestCase {
|
||||||
configureFirstNode(cfg);
|
configureFirstNode(cfg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Map getConnectionProviderInjectionProperties() {
|
||||||
|
return getFirstNodeConnectionProviderInjectionProperties();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void prepareTest() throws Exception {
|
protected void prepareTest() throws Exception {
|
||||||
log.info("Building second node locally managed execution env");
|
log.info("Building second node locally managed execution env");
|
||||||
secondNodeEnvironment = new ExecutionEnvironment(new SecondNodeSettings());
|
secondNodeEnvironment = new ExecutionEnvironment(new SecondNodeSettings());
|
||||||
secondNodeEnvironment.initialize();
|
secondNodeEnvironment.initialize( getSecondNodeConnectionProviderInjectionProperties() );
|
||||||
super.prepareTest();
|
super.prepareTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -142,6 +151,10 @@ public abstract class DualNodeTestCase extends FunctionalTestCase {
|
||||||
cfg.setProperty(NODE_ID_PROP, LOCAL);
|
cfg.setProperty(NODE_ID_PROP, LOCAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Map getFirstNodeConnectionProviderInjectionProperties() {
|
||||||
|
return Collections.singletonMap( NODE_ID_FIELD, LOCAL );
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply any node-specific configurations to our second node.
|
* Apply any node-specific configurations to our second node.
|
||||||
*
|
*
|
||||||
|
@ -152,6 +165,10 @@ public abstract class DualNodeTestCase extends FunctionalTestCase {
|
||||||
cfg.setProperty(NODE_ID_PROP, REMOTE);
|
cfg.setProperty(NODE_ID_PROP, REMOTE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Map getSecondNodeConnectionProviderInjectionProperties() {
|
||||||
|
return Collections.singletonMap( NODE_ID_FIELD, REMOTE );
|
||||||
|
}
|
||||||
|
|
||||||
protected void sleep(long ms) {
|
protected void sleep(long ms) {
|
||||||
try {
|
try {
|
||||||
Thread.sleep(ms);
|
Thread.sleep(ms);
|
||||||
|
|
|
@ -90,7 +90,8 @@ public class QueryRegionImplTestCase extends AbstractGeneralDataRegionTestCase {
|
||||||
|
|
||||||
private void putDoesNotBlockGetTest() throws Exception {
|
private void putDoesNotBlockGetTest() throws Exception {
|
||||||
Configuration cfg = createConfiguration();
|
Configuration cfg = createConfiguration();
|
||||||
InfinispanRegionFactory regionFactory = CacheTestUtil.startRegionFactory(cfg, getCacheTestSupport());
|
InfinispanRegionFactory regionFactory = CacheTestUtil.startRegionFactory(
|
||||||
|
getConnectionProvider(), cfg, getCacheTestSupport());
|
||||||
|
|
||||||
// Sleep a bit to avoid concurrent FLUSH problem
|
// Sleep a bit to avoid concurrent FLUSH problem
|
||||||
avoidConcurrentFlush();
|
avoidConcurrentFlush();
|
||||||
|
@ -175,7 +176,9 @@ public class QueryRegionImplTestCase extends AbstractGeneralDataRegionTestCase {
|
||||||
|
|
||||||
private void getDoesNotBlockPutTest() throws Exception {
|
private void getDoesNotBlockPutTest() throws Exception {
|
||||||
Configuration cfg = createConfiguration();
|
Configuration cfg = createConfiguration();
|
||||||
InfinispanRegionFactory regionFactory = CacheTestUtil.startRegionFactory(cfg, getCacheTestSupport());
|
InfinispanRegionFactory regionFactory = CacheTestUtil.startRegionFactory(
|
||||||
|
getConnectionProvider(), cfg, getCacheTestSupport()
|
||||||
|
);
|
||||||
|
|
||||||
// Sleep a bit to avoid concurrent FLUSH problem
|
// Sleep a bit to avoid concurrent FLUSH problem
|
||||||
avoidConcurrentFlush();
|
avoidConcurrentFlush();
|
||||||
|
|
|
@ -86,12 +86,16 @@ public class TimestampsRegionImplTestCase extends AbstractGeneralDataRegionTestC
|
||||||
|
|
||||||
public void testClearTimestampsRegionInIsolated() throws Exception {
|
public void testClearTimestampsRegionInIsolated() throws Exception {
|
||||||
Configuration cfg = createConfiguration();
|
Configuration cfg = createConfiguration();
|
||||||
InfinispanRegionFactory regionFactory = CacheTestUtil.startRegionFactory(cfg, getCacheTestSupport());
|
InfinispanRegionFactory regionFactory = CacheTestUtil.startRegionFactory(
|
||||||
|
getConnectionProvider(), cfg, getCacheTestSupport()
|
||||||
|
);
|
||||||
// Sleep a bit to avoid concurrent FLUSH problem
|
// Sleep a bit to avoid concurrent FLUSH problem
|
||||||
avoidConcurrentFlush();
|
avoidConcurrentFlush();
|
||||||
|
|
||||||
Configuration cfg2 = createConfiguration();
|
Configuration cfg2 = createConfiguration();
|
||||||
InfinispanRegionFactory regionFactory2 = CacheTestUtil.startRegionFactory(cfg2, getCacheTestSupport());
|
InfinispanRegionFactory regionFactory2 = CacheTestUtil.startRegionFactory(
|
||||||
|
getConnectionProvider(), cfg2, getCacheTestSupport()
|
||||||
|
);
|
||||||
// Sleep a bit to avoid concurrent FLUSH problem
|
// Sleep a bit to avoid concurrent FLUSH problem
|
||||||
avoidConcurrentFlush();
|
avoidConcurrentFlush();
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,8 @@ import org.hibernate.mapping.Collection;
|
||||||
import org.hibernate.mapping.PersistentClass;
|
import org.hibernate.mapping.PersistentClass;
|
||||||
import org.hibernate.stat.Statistics;
|
import org.hibernate.stat.Statistics;
|
||||||
import org.hibernate.test.cache.infinispan.functional.Item;
|
import org.hibernate.test.cache.infinispan.functional.Item;
|
||||||
|
import org.hibernate.test.common.ServiceRegistryHolder;
|
||||||
|
|
||||||
import org.infinispan.transaction.lookup.JBossStandaloneJTAManagerLookup;
|
import org.infinispan.transaction.lookup.JBossStandaloneJTAManagerLookup;
|
||||||
import org.infinispan.util.logging.Log;
|
import org.infinispan.util.logging.Log;
|
||||||
import org.infinispan.util.logging.LogFactory;
|
import org.infinispan.util.logging.LogFactory;
|
||||||
|
@ -70,10 +72,12 @@ public class JBossStandaloneJtaExampleTest extends TestCase {
|
||||||
private static final JBossStandaloneJTAManagerLookup lookup = new JBossStandaloneJTAManagerLookup();
|
private static final JBossStandaloneJTAManagerLookup lookup = new JBossStandaloneJTAManagerLookup();
|
||||||
Context ctx;
|
Context ctx;
|
||||||
Main jndiServer;
|
Main jndiServer;
|
||||||
|
private ServiceRegistryHolder serviceRegistryHolder;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setUp() throws Exception {
|
protected void setUp() throws Exception {
|
||||||
super.setUp();
|
super.setUp();
|
||||||
|
serviceRegistryHolder = new ServiceRegistryHolder( Environment.getProperties() );
|
||||||
jndiServer = startJndiServer();
|
jndiServer = startJndiServer();
|
||||||
ctx = createJndiContext();
|
ctx = createJndiContext();
|
||||||
bindTransactionManager();
|
bindTransactionManager();
|
||||||
|
@ -83,10 +87,17 @@ public class JBossStandaloneJtaExampleTest extends TestCase {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void tearDown() throws Exception {
|
protected void tearDown() throws Exception {
|
||||||
|
try {
|
||||||
super.tearDown();
|
super.tearDown();
|
||||||
ctx.close();
|
ctx.close();
|
||||||
jndiServer.stop();
|
jndiServer.stop();
|
||||||
}
|
}
|
||||||
|
finally {
|
||||||
|
if ( serviceRegistryHolder != null ) {
|
||||||
|
serviceRegistryHolder.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void testPersistAndLoadUnderJta() throws Exception {
|
public void testPersistAndLoadUnderJta() throws Exception {
|
||||||
Item item;
|
Item item;
|
||||||
|
@ -290,6 +301,6 @@ public class JBossStandaloneJtaExampleTest extends TestCase {
|
||||||
Collection coll = (Collection) iter.next();
|
Collection coll = (Collection) iter.next();
|
||||||
cfg.setCollectionCacheConcurrencyStrategy(coll.getRole(), "transactional");
|
cfg.setCollectionCacheConcurrencyStrategy(coll.getRole(), "transactional");
|
||||||
}
|
}
|
||||||
return cfg.buildSessionFactory();
|
return cfg.buildSessionFactory( serviceRegistryHolder.getServiceRegistry() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,8 +26,9 @@ import java.sql.SQLException;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import org.hibernate.HibernateException;
|
import org.hibernate.HibernateException;
|
||||||
import org.hibernate.connection.ConnectionProvider;
|
import org.hibernate.service.jdbc.connections.spi.ConnectionProvider;
|
||||||
import org.hibernate.connection.ConnectionProviderFactory;
|
import org.hibernate.service.spi.Stoppable;
|
||||||
|
import org.hibernate.test.common.ConnectionProviderBuilder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* XaConnectionProvider.
|
* XaConnectionProvider.
|
||||||
|
@ -36,7 +37,7 @@ import org.hibernate.connection.ConnectionProviderFactory;
|
||||||
* @since 3.5
|
* @since 3.5
|
||||||
*/
|
*/
|
||||||
public class XaConnectionProvider implements ConnectionProvider {
|
public class XaConnectionProvider implements ConnectionProvider {
|
||||||
private static ConnectionProvider actualConnectionProvider = ConnectionProviderFactory.newConnectionProvider();
|
private static ConnectionProvider actualConnectionProvider = ConnectionProviderBuilder.buildConnectionProvider();
|
||||||
private boolean isTransactional;
|
private boolean isTransactional;
|
||||||
|
|
||||||
public static ConnectionProvider getActualConnectionProvider() {
|
public static ConnectionProvider getActualConnectionProvider() {
|
||||||
|
@ -69,7 +70,9 @@ public class XaConnectionProvider implements ConnectionProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void close() throws HibernateException {
|
public void close() throws HibernateException {
|
||||||
actualConnectionProvider.close();
|
if ( actualConnectionProvider instanceof Stoppable ) {
|
||||||
|
( ( Stoppable ) actualConnectionProvider ).stop();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean supportsAggressiveRelease() {
|
public boolean supportsAggressiveRelease() {
|
||||||
|
|
|
@ -36,6 +36,8 @@ import org.hibernate.cache.infinispan.InfinispanRegionFactory;
|
||||||
import org.hibernate.cfg.Configuration;
|
import org.hibernate.cfg.Configuration;
|
||||||
import org.hibernate.cfg.Environment;
|
import org.hibernate.cfg.Environment;
|
||||||
import org.hibernate.cfg.Settings;
|
import org.hibernate.cfg.Settings;
|
||||||
|
import org.hibernate.service.jdbc.connections.spi.ConnectionProvider;
|
||||||
|
import org.hibernate.service.spi.ServicesRegistry;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utilities for cache testing.
|
* Utilities for cache testing.
|
||||||
|
@ -71,10 +73,11 @@ public class CacheTestUtil {
|
||||||
return cfg;
|
return cfg;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static InfinispanRegionFactory startRegionFactory(Configuration cfg) throws ClassNotFoundException,
|
public static InfinispanRegionFactory startRegionFactory(ConnectionProvider connectionProvider,
|
||||||
InstantiationException, IllegalAccessException {
|
Configuration cfg)
|
||||||
|
throws ClassNotFoundException, InstantiationException, IllegalAccessException {
|
||||||
|
|
||||||
Settings settings = cfg.buildSettings();
|
Settings settings = cfg.buildSettings( connectionProvider );
|
||||||
Properties properties = cfg.getProperties();
|
Properties properties = cfg.getProperties();
|
||||||
|
|
||||||
String factoryType = cfg.getProperty(Environment.CACHE_REGION_FACTORY);
|
String factoryType = cfg.getProperty(Environment.CACHE_REGION_FACTORY);
|
||||||
|
@ -86,9 +89,11 @@ public class CacheTestUtil {
|
||||||
return regionFactory;
|
return regionFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static InfinispanRegionFactory startRegionFactory(Configuration cfg, CacheTestSupport testSupport)
|
public static InfinispanRegionFactory startRegionFactory(ConnectionProvider connectionProvider,
|
||||||
|
Configuration cfg,
|
||||||
|
CacheTestSupport testSupport)
|
||||||
throws ClassNotFoundException, InstantiationException, IllegalAccessException {
|
throws ClassNotFoundException, InstantiationException, IllegalAccessException {
|
||||||
InfinispanRegionFactory factory = startRegionFactory(cfg);
|
InfinispanRegionFactory factory = startRegionFactory(connectionProvider, cfg);
|
||||||
testSupport.registerFactory(factory);
|
testSupport.registerFactory(factory);
|
||||||
return factory;
|
return factory;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue