HHH-12417 - default strategy based on registrations with StrategySelector
This commit is contained in:
parent
dae31640a8
commit
953f956989
|
@ -6,6 +6,9 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.boot.registry.selector.internal;
|
package org.hibernate.boot.registry.selector.internal;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
|
@ -170,6 +173,16 @@ public class StrategySelectorImpl implements StrategySelector {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public Collection getRegisteredStrategyImplementors(Class strategy) {
|
||||||
|
final Map<String, Class> registrations = namedStrategyImplementorByStrategyMap.get( strategy );
|
||||||
|
if ( registrations == null ) {
|
||||||
|
return Collections.emptySet();
|
||||||
|
}
|
||||||
|
return new HashSet( registrations.values() );
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@Override
|
@Override
|
||||||
public <T> T resolveStrategy(
|
public <T> T resolveStrategy(
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.boot.registry.selector.spi;
|
package org.hibernate.boot.registry.selector.spi;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
|
|
||||||
import org.hibernate.service.Service;
|
import org.hibernate.service.Service;
|
||||||
|
@ -139,4 +140,11 @@ public interface StrategySelector extends Service {
|
||||||
<T> T resolveStrategy(Class<T> strategy, Object strategyReference, Callable<T> defaultResolver, StrategyCreator<T> creator);
|
<T> T resolveStrategy(Class<T> strategy, Object strategyReference, Callable<T> defaultResolver, StrategyCreator<T> creator);
|
||||||
|
|
||||||
<T> T resolveStrategy(Class<T> strategy, Object strategyReference, T defaultValue, StrategyCreator<T> creator);
|
<T> T resolveStrategy(Class<T> strategy, Object strategyReference, T defaultValue, StrategyCreator<T> creator);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve all of the registered implementors of the given strategy. Useful
|
||||||
|
* to allow defaulting the choice to the single registered implementor when
|
||||||
|
* only one is registered
|
||||||
|
*/
|
||||||
|
<T> Collection<T> getRegisteredStrategyImplementors(Class<T> strategy);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,11 +6,11 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cache.internal;
|
package org.hibernate.cache.internal;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import org.hibernate.boot.registry.StandardServiceInitiator;
|
import org.hibernate.boot.registry.StandardServiceInitiator;
|
||||||
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
|
|
||||||
import org.hibernate.boot.registry.selector.spi.StrategySelector;
|
import org.hibernate.boot.registry.selector.spi.StrategySelector;
|
||||||
import org.hibernate.cache.spi.RegionFactory;
|
import org.hibernate.cache.spi.RegionFactory;
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
|
@ -72,29 +72,23 @@ public class RegionFactoryInitiator implements StandardServiceInitiator<RegionFa
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( regionFactory == NoCachingRegionFactory.INSTANCE ) {
|
||||||
|
// todo (5.3) : make this configurable?
|
||||||
|
boolean allowDefaulting = true;
|
||||||
|
if ( allowDefaulting ) {
|
||||||
|
final StrategySelector selector = registry.getService( StrategySelector.class );
|
||||||
|
final Collection<RegionFactory> implementors = selector.getRegisteredStrategyImplementors( RegionFactory.class );
|
||||||
|
if ( implementors != null && implementors.size() == 1 ) {
|
||||||
|
regionFactory = selector.resolveStrategy( RegionFactory.class, implementors.iterator().next() );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
LOG.debugf( "Cannot default RegionFactory based on registered strategies as `%s` RegionFactory strategies were registered" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
LOG.debugf( "Cache region factory : %s", regionFactory.getClass().getName() );
|
LOG.debugf( "Cache region factory : %s", regionFactory.getClass().getName() );
|
||||||
|
|
||||||
return regionFactory;
|
return regionFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Map legacy names unto the new corollary.
|
|
||||||
*
|
|
||||||
* TODO: temporary hack for org.hibernate.cfg.SettingsFactory.createRegionFactory()
|
|
||||||
*
|
|
||||||
* @param name The (possibly legacy) factory name
|
|
||||||
*
|
|
||||||
* @return The factory name to use.
|
|
||||||
*/
|
|
||||||
public static String mapLegacyNames(final String name) {
|
|
||||||
if ( "org.hibernate.cache.EhCacheRegionFactory".equals( name ) ) {
|
|
||||||
return "org.hibernate.cache.ehcache.EhCacheRegionFactory";
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( "org.hibernate.cache.SingletonEhCacheRegionFactory".equals( name ) ) {
|
|
||||||
return "org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory";
|
|
||||||
}
|
|
||||||
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue