diff --git a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticConnection.java b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticConnection.java
index ac2098c..2b3a257 100644
--- a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticConnection.java
+++ b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticConnection.java
@@ -19,6 +19,7 @@
 import org.apache.http.Header;
 import org.apache.http.HttpHost;
 import org.apache.http.message.BasicHeader;
+import org.elasticsearch.client.RequestOptions;
 import org.elasticsearch.client.RestClient;
 import org.elasticsearch.client.RestClientBuilder;
 import org.elasticsearch.client.RestHighLevelClient;
@@ -119,6 +120,15 @@
         return indexPrefix;
     }
 
+    /**
+     * Checks if elastic server is available for connection.
+     * @return true if available, false otherwise.
+     * @throws IOException if some connection exception occurs.
+     */
+    public boolean isAvailable() throws IOException {
+        return this.getClient().ping(RequestOptions.DEFAULT);
+    }
+
     @Override
     public synchronized void close() throws IOException {
         if (client != null) {
diff --git a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderService.java b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderService.java
index da70d82..e33928d 100644
--- a/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderService.java
+++ b/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderService.java
@@ -36,6 +36,7 @@
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.ConfigurationPolicy;
 import org.osgi.service.component.annotations.Deactivate;
 import org.osgi.service.component.annotations.Reference;
 import org.osgi.service.component.annotations.ReferenceCardinality;
@@ -48,6 +49,7 @@
 import org.slf4j.LoggerFactory;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Dictionary;
 import java.util.Hashtable;
@@ -57,17 +59,17 @@
 import static org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.registerMBean;
 import static org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.scheduleWithFixedDelay;
 
-@Component
+@Component(configurationPolicy = ConfigurationPolicy.REQUIRE)
 @Designate(ocd = ElasticIndexProviderService.Config.class)
 public class ElasticIndexProviderService {
 
-    static final String PROP_INDEX_PREFIX = "indexPrefix";
-    private static final String PROP_ELASTIC_SCHEME = ElasticConnection.SCHEME_PROP;
-    private static final String PROP_ELASTIC_HOST = ElasticConnection.HOST_PROP;
-    private static final String PROP_ELASTIC_PORT = ElasticConnection.PORT_PROP;
-    private static final String PROP_ELASTIC_API_KEY_ID = ElasticConnection.API_KEY_ID_PROP;
-    private static final String PROP_ELASTIC_API_KEY_SECRET = ElasticConnection.API_KEY_SECRET_PROP;
-    private static final String PROP_LOCAL_TEXT_EXTRACTION_DIR = "localTextExtractionDir";
+    protected static final String PROP_INDEX_PREFIX = "indexPrefix";
+    protected static final String PROP_ELASTIC_SCHEME = ElasticConnection.SCHEME_PROP;
+    protected static final String PROP_ELASTIC_HOST = ElasticConnection.HOST_PROP;
+    protected static final String PROP_ELASTIC_PORT = ElasticConnection.PORT_PROP;
+    protected static final String PROP_ELASTIC_API_KEY_ID = ElasticConnection.API_KEY_ID_PROP;
+    protected static final String PROP_ELASTIC_API_KEY_SECRET = ElasticConnection.API_KEY_SECRET_PROP;
+    protected static final String PROP_LOCAL_TEXT_EXTRACTION_DIR = "localTextExtractionDir";
 
     @ObjectClassDefinition(name = "ElasticIndexProviderService", description = "Apache Jackrabbit Oak ElasticIndexProvider")
     public @interface Config {
@@ -145,7 +147,7 @@
     private String indexPrefix;
 
     @Activate
-    private void activate(BundleContext bundleContext, Config config) {
+    private void activate(BundleContext bundleContext, Config config) throws IOException {
         whiteboard = new OsgiWhiteboard(bundleContext);
 
         //initializeTextExtractionDir(bundleContext, config);
@@ -177,7 +179,11 @@
         }
     }
 
-    private void registerIndexCleaner(Config contextConfig) {
+    private void registerIndexCleaner(Config contextConfig) throws IOException {
+        boolean reachable = elasticConnection.isAvailable();
+        if (!reachable) {
+            throw new IllegalArgumentException("Elastic server is not available - " + elasticConnection.toString());
+        }
         ElasticIndexCleaner task = new ElasticIndexCleaner(elasticConnection, nodeStore, contextConfig.remoteIndexDeletionThreshold());
         oakRegs.add(scheduleWithFixedDelay(whiteboard, task, contextConfig.remoteIndexCleanupFrequency()));
     }
diff --git a/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderServiceTest.java b/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderServiceTest.java
index c44d81a9..5c9247d 100644
--- a/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderServiceTest.java
+++ b/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexProviderServiceTest.java
@@ -29,6 +29,7 @@
 import org.apache.sling.testing.mock.osgi.MockOsgi;
 import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
 import org.junit.Before;
+import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
@@ -37,17 +38,24 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import static org.apache.jackrabbit.oak.plugins.index.elastic.ElasticIndexProviderService.PROP_ELASTIC_HOST;
+import static org.apache.jackrabbit.oak.plugins.index.elastic.ElasticIndexProviderService.PROP_ELASTIC_PORT;
 import static org.apache.jackrabbit.oak.plugins.index.elastic.ElasticIndexProviderService.PROP_INDEX_PREFIX;
 import static org.junit.Assert.assertNotNull;
 
 public class ElasticIndexProviderServiceTest {
 
+    private static final String elasticConnectionString = System.getProperty("elasticConnectionString");
+
     @Rule
     public final TemporaryFolder folder = new TemporaryFolder(new File("target"));
 
     @Rule
     public final OsgiContext context = new OsgiContext();
 
+    @ClassRule
+    public static ElasticConnectionRule elasticRule = new ElasticConnectionRule(elasticConnectionString);
+
     private final ElasticIndexProviderService service = new ElasticIndexProviderService();
 
     private Whiteboard wb;
@@ -68,6 +76,8 @@
         Map<String, Object> props = new HashMap<>();
         props.put("localTextExtractionDir", folder.newFolder("localTextExtractionDir").getAbsolutePath());
         props.put(PROP_INDEX_PREFIX, "elastic");
+        props.put(PROP_ELASTIC_HOST, "localhost");
+        props.put(PROP_ELASTIC_PORT, elasticRule.elastic.getFirstMappedPort());
         MockOsgi.activate(service, context.bundleContext(), props);
 
         assertNotNull(context.getService(QueryIndexProvider.class));
