@SuppressWarnings({"unchecked"}) public T createInstance(String managerClassName) { Class managerClass = ReflectionUtil.loadClass(managerClassName); if (managerClass == null) { logger.warn("Cannot load class: {}", managerClassName); managerClass = defaultImplClass; } if (!clazz.isAssignableFrom(managerClass)) { logger.warn("Cannot use as {}: {}", clazz.getName(), managerClassName); managerClass = defaultImplClass; } logger.debug("Using class: {}", managerClass.getName()); T instance = (T) ReflectionUtil.newInstance(managerClass); if (instance == null) { logger.warn( "Cannot instanciate: {}. Fall back to default: {}.", managerClass.getName(), FieldsManager.class.getName()); instance = (T) ReflectionUtil.newInstance(defaultImplClass); if (instance == null) { logger.error("Cannot instanciate: {}", defaultImplClass.getName()); } } logger.debug("Installed {0}: {1}", clazz.getName(), instance); return instance; }