Skip to content

Commit

Permalink
Make defaultResolverFactory settable only once before use
Browse files Browse the repository at this point in the history
  • Loading branch information
Bouncheck committed Sep 5, 2024
1 parent 3872157 commit 3b40118
Showing 1 changed file with 19 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
package com.datastax.oss.driver.internal.core.resolver;

import com.datastax.oss.driver.internal.core.resolver.defaultResolver.DefaultResolverFactory;
import java.util.concurrent.atomic.AtomicBoolean;

/**
* Entry point for driver components to getting the {@link Resolver} instances. By default returns
* instances of {@link DefaultResolverFactory}.
*/
public class ResolverProvider {

private static boolean alreadyInUse = false;
private static boolean alreadySet = false;
private static AbstractResolverFactory defaultResolverFactoryImpl = new DefaultResolverFactory();

/**
Expand All @@ -16,7 +19,8 @@ public class ResolverProvider {
* @param clazz Class that is requesting the {@link Resolver}.
* @return new {@link Resolver}.
*/
public static Resolver getResolver(Class<?> clazz) {
public static synchronized Resolver getResolver(Class<?> clazz) {
alreadyInUse = true;
return defaultResolverFactoryImpl.getResolver(clazz);
}

Expand All @@ -26,7 +30,20 @@ public static Resolver getResolver(Class<?> clazz) {
*
* @param resolverFactoryImpl new {@link Resolver} factory.
*/
public static void setDefaultResolverFactory(AbstractResolverFactory resolverFactoryImpl) {
public static synchronized void setDefaultResolverFactory(
AbstractResolverFactory resolverFactoryImpl) {
if (alreadyInUse) {
throw new IllegalStateException(
"Cannot change default resolver factory: ResolverProvider has already returned "
+ "an instance of a Resolver to use. Default resolver factory needs to be set up before first use by any "
+ "class.");
}
if (alreadySet) {
throw new IllegalStateException(
"Cannot change default resolver factory: this method has already been called. "
+ "You can set default resolver factory only once.");
}
alreadySet = true;
defaultResolverFactoryImpl = resolverFactoryImpl;
}
}

0 comments on commit 3b40118

Please sign in to comment.