public static synchronized ClusterController getClusterController() {
if (controller == null) {
try {
Class<?> implClass = Class.forName(PROVIDER_MODULE_CLASS);
ProviderModule providerModule = ViewProviderModule.getViewProviderModule((ProviderModule) implClass.newInstance());
controller = new ClusterControllerImpl(providerModule);
} catch (Exception e) {
throw new IllegalStateException("Can't create provider module " + PROVIDER_MODULE_CLASS, e);
}