Added: 
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/RemoteSolrServerProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/RemoteSolrServerProvider.java?rev=1577192&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/RemoteSolrServerProvider.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/RemoteSolrServerProvider.java
 Thu Mar 13 15:20:59 2014
@@ -0,0 +1,151 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.plugins.index.solr.server;
+
+import java.io.File;
+import java.io.IOException;
+import 
org.apache.jackrabbit.oak.plugins.index.solr.configuration.RemoteSolrServerConfiguration;
+import org.apache.solr.client.solrj.SolrServer;
+import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.impl.CloudSolrServer;
+import org.apache.solr.client.solrj.impl.HttpSolrServer;
+import org.apache.solr.client.solrj.request.UpdateRequest;
+import org.apache.solr.client.solrj.response.SolrPingResponse;
+import org.apache.solr.cloud.ZkController;
+import org.apache.solr.common.cloud.SolrZkClient;
+import org.apache.solr.common.cloud.ZkStateReader;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * {@link 
org.apache.jackrabbit.oak.plugins.index.solr.server.SolrServerProvider} for 
remote Solr installations.
+ */
+public class RemoteSolrServerProvider implements SolrServerProvider {
+
+    private final Logger log = 
LoggerFactory.getLogger(RemoteSolrServerProvider.class);
+
+    private final RemoteSolrServerConfiguration remoteSolrServerConfiguration;
+
+    private SolrServer solrServer;
+
+    public RemoteSolrServerProvider(RemoteSolrServerConfiguration 
remoteSolrServerConfiguration) {
+        this.remoteSolrServerConfiguration = remoteSolrServerConfiguration;
+    }
+
+    @Override
+    public SolrServer getSolrServer() throws Exception {
+        if (solrServer == null && 
remoteSolrServerConfiguration.getSolrZkHost() != null && 
remoteSolrServerConfiguration.getSolrZkHost().length() > 0) {
+            try {
+                solrServer = initializeWithCloudSolrServer();
+            } catch (Exception e) {
+                log.warn("unable to initialize SolrCloud client for {}", 
remoteSolrServerConfiguration.getSolrZkHost(), e);
+            }
+        }
+        if (solrServer == null && 
remoteSolrServerConfiguration.getSolrHttpUrls() != null && 
remoteSolrServerConfiguration.getSolrHttpUrls().length == 1
+                && remoteSolrServerConfiguration.getSolrHttpUrls()[0] != null 
&& remoteSolrServerConfiguration.getSolrHttpUrls()[0].length() > 0) {
+            try {
+                solrServer = initializeWithExistingHttpServer();
+            } catch (Exception e1) {
+                log.warn("unable to initialize Solr HTTP client for {}", 
remoteSolrServerConfiguration.getSolrHttpUrls(), e1);
+            }
+        }
+        if (solrServer == null) {
+            throw new IOException("could not connect to any remote Solr 
server");
+        }
+        return solrServer;
+    }
+
+    private SolrServer initializeWithExistingHttpServer() throws IOException, 
SolrServerException {
+        // try basic Solr HTTP client
+        HttpSolrServer httpSolrServer = new 
HttpSolrServer(remoteSolrServerConfiguration.getSolrHttpUrls()[0]);
+        SolrPingResponse ping = httpSolrServer.ping();
+        if (ping != null && 0 == ping.getStatus()) {
+            return httpSolrServer;
+        } else {
+            throw new IOException("the found HTTP Solr server is not alive");
+        }
+
+    }
+
+    private SolrServer initializeWithCloudSolrServer() throws IOException, 
SolrServerException {
+        // try SolrCloud client
+        CloudSolrServer cloudSolrServer = new 
CloudSolrServer(remoteSolrServerConfiguration.getSolrZkHost());
+        cloudSolrServer.connect();
+        cloudSolrServer.setDefaultCollection("collection1"); // workaround for 
first request when the needed collection may not exist
+
+        // create specified collection if it doesn't exists
+        try {
+            createCollectionIfNeeded(cloudSolrServer);
+        } catch (Throwable t) {
+            if (log.isWarnEnabled()) {
+                log.warn("could not create the collection on {}", 
remoteSolrServerConfiguration.getSolrZkHost(), t);
+            }
+        }
+
+        
cloudSolrServer.setDefaultCollection(remoteSolrServerConfiguration.getSolrCollection());
+
+        // SolrCloud may need some time to sync on collection creation (to 
spread it over the shards / replicas)
+        int i = 0;
+        while (i < 3) {
+            try {
+                SolrPingResponse ping = cloudSolrServer.ping();
+                if (ping != null && 0 == ping.getStatus()) {
+                    return cloudSolrServer;
+                } else {
+                    throw new IOException("the found SolrCloud server is not 
alive");
+                }
+            } catch (Exception e) {
+                // wait a bit
+                try {
+                    if (log.isDebugEnabled()) {
+                        log.debug("server is not alive yet, wait a bit", e);
+                    }
+                    Thread.sleep(3000);
+                } catch (InterruptedException e1) {
+                    // do nothing
+                }
+            }
+            i++;
+        }
+        throw new IOException("the found SolrCloud server is not alive");
+
+    }
+
+    private void createCollectionIfNeeded(CloudSolrServer cloudSolrServer) 
throws SolrServerException, IOException {
+        String solrCollection = 
remoteSolrServerConfiguration.getSolrCollection();
+        try {
+            ZkStateReader zkStateReader = cloudSolrServer.getZkStateReader();
+            SolrZkClient zkClient = zkStateReader.getZkClient();
+            if (zkClient.isConnected() && !zkClient.exists("/configs/" + 
solrCollection, false)) {
+                File dir = new File(remoteSolrServerConfiguration != null ? 
remoteSolrServerConfiguration.getSolrConfDir() : 
getClass().getResource("/solr-oak-conf").getFile());
+                ZkController.uploadConfigDir(zkClient, dir, solrCollection);
+                UpdateRequest req = new UpdateRequest("/admin/collections");
+                req.setParam("action", "CREATE");
+                if (remoteSolrServerConfiguration != null) {
+                    req.setParam("numShards", 
String.valueOf(remoteSolrServerConfiguration.getSolrShardsNo()));
+                    req.setParam("replicationFactor", 
String.valueOf(remoteSolrServerConfiguration.getSolrReplicationFactor()));
+                }
+                req.setParam("collection.configName", solrCollection);
+                req.setParam("name", solrCollection);
+                cloudSolrServer.request(req);
+            }
+        } catch (Exception e) {
+            log.warn("could not create collection {}", solrCollection);
+            throw new SolrServerException(e);
+        }
+    }
+}

Propchange: 
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/RemoteSolrServerProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/package-info.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/package-info.java?rev=1577192&r1=1577191&r2=1577192&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/package-info.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/server/package-info.java
 Thu Mar 13 15:20:59 2014
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@Version("0.16")
+@Version("0.17")
 @Export(optional = "provide:=true")
 package org.apache.jackrabbit.oak.plugins.index.solr.server;
 

Modified: 
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/util/package-info.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/util/package-info.java?rev=1577192&r1=1577191&r2=1577192&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/util/package-info.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/util/package-info.java
 Thu Mar 13 15:20:59 2014
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@Version("0.16")
+@Version("0.17")
 @Export(optional = "provide:=true")
 package org.apache.jackrabbit.oak.plugins.index.solr.util;
 

Modified: 
jackrabbit/oak/trunk/oak-solr-core/src/main/resources/solr/oak/conf/schema.xml
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/resources/solr/oak/conf/schema.xml?rev=1577192&r1=1577191&r2=1577192&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-solr-core/src/main/resources/solr/oak/conf/schema.xml 
(original)
+++ 
jackrabbit/oak/trunk/oak-solr-core/src/main/resources/solr/oak/conf/schema.xml 
Thu Mar 13 15:20:59 2014
@@ -92,13 +92,6 @@
     <fieldType name="pdouble" class="solr.DoubleField"/>
     <fieldType name="pdate" class="solr.DateField" sortMissingLast="true"/>
 
-    <fieldType name="point" class="solr.PointType" dimension="2" 
subFieldSuffix="_d"/>
-
-    <fieldType name="location" class="solr.LatLonType" 
subFieldSuffix="_coordinate"/>
-
-    <fieldType name="location_rpt" 
class="solr.SpatialRecursivePrefixTreeFieldType"
-               geo="true" distErrPct="0.025" maxDistErr="0.000009" 
units="degrees" />
-
     <fieldType name="currency" class="solr.CurrencyField" precisionStep="8" 
defaultCurrency="USD" currencyConfig="currency.xml" />
     <fieldtype name="ignored" stored="false" indexed="false" 
multiValued="true" class="solr.StrField"/>
   </types>
@@ -130,7 +123,6 @@
 
     <dynamicField name="*_dt"  type="date"    indexed="true"  stored="true"/>
     <dynamicField name="*_dts" type="date"    indexed="true"  stored="true" 
multiValued="true"/>
-    <dynamicField name="*_p"  type="location" indexed="true" stored="true"/>
 
     <dynamicField name="*_ti" type="tint"    indexed="true"  stored="true"/>
     <dynamicField name="*_tl" type="tlong"   indexed="true"  stored="true"/>

Modified: 
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/FixedNodeStateConfigurationTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/FixedNodeStateConfigurationTest.java?rev=1577192&r1=1577191&r2=1577192&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/FixedNodeStateConfigurationTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/FixedNodeStateConfigurationTest.java
 Thu Mar 13 15:20:59 2014
@@ -48,7 +48,7 @@ public class FixedNodeStateConfiguration
     public void testExistingPath() throws Exception {
         NodeState idxDef = 
store.getRoot().getChildNode("oak:index").getChildNode("solrIdx");
         FixedNodeStateConfiguration fixedNodeStateConfiguration = new 
FixedNodeStateConfiguration(idxDef);
-        SolrServerConfiguration solrServerConfiguration = 
fixedNodeStateConfiguration.getSolrServerConfiguration();
+        EmbeddedSolrServerConfiguration solrServerConfiguration = 
(EmbeddedSolrServerConfiguration) 
fixedNodeStateConfiguration.getSolrServerConfiguration();
         assertNotNull(solrServerConfiguration);
         assertEquals("sh", solrServerConfiguration.getSolrHomePath()); // 
property defined in the node state
         assertEquals("cn", solrServerConfiguration.getCoreName()); // property 
defined in the node state

Added: 
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/SolrServerConfigurationTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/SolrServerConfigurationTest.java?rev=1577192&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/SolrServerConfigurationTest.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/SolrServerConfigurationTest.java
 Thu Mar 13 15:20:59 2014
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.plugins.index.solr.configuration;
+
+import 
org.apache.jackrabbit.oak.plugins.index.solr.server.EmbeddedSolrServerProvider;
+import 
org.apache.jackrabbit.oak.plugins.index.solr.server.RemoteSolrServerProvider;
+import org.junit.Test;
+
+import static org.junit.Assert.assertNotNull;
+
+/**
+ * Testcase for {@link 
org.apache.jackrabbit.oak.plugins.index.solr.configuration.SolrServerConfiguration}
+ */
+public class SolrServerConfigurationTest {
+
+    @Test
+    public void testCreateRemoteServerFromConfig() throws Exception {
+        SolrServerConfiguration<RemoteSolrServerProvider> 
remoteSolrServerProviderSolrServerConfiguration = new 
RemoteSolrServerConfiguration(null, null, 1, 1, null);
+        RemoteSolrServerProvider remoteSolrServerProvider = 
remoteSolrServerProviderSolrServerConfiguration.newInstance();
+        assertNotNull(remoteSolrServerProvider);
+    }
+
+    @Test
+    public void testCreteEmbeddedServerFromConfig() throws Exception {
+        SolrServerConfiguration<EmbeddedSolrServerProvider> 
embeddedSolrServerSolrServerConfiguration = new 
EmbeddedSolrServerConfiguration(null, null, null);
+        EmbeddedSolrServerProvider embeddedSolrServerProvider = 
embeddedSolrServerSolrServerConfiguration.newInstance();
+        assertNotNull(embeddedSolrServerProvider);
+    }
+}

Propchange: 
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/SolrServerConfigurationTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/UpToDateNodeStateConfigurationTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/UpToDateNodeStateConfigurationTest.java?rev=1577192&r1=1577191&r2=1577192&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/UpToDateNodeStateConfigurationTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/configuration/UpToDateNodeStateConfigurationTest.java
 Thu Mar 13 15:20:59 2014
@@ -16,10 +16,6 @@
  */
 package org.apache.jackrabbit.oak.plugins.index.solr.configuration;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-
 import org.apache.jackrabbit.mk.api.MicroKernel;
 import org.apache.jackrabbit.mk.core.MicroKernelImpl;
 import org.apache.jackrabbit.oak.kernel.KernelNodeStore;
@@ -27,6 +23,10 @@ import org.apache.jackrabbit.oak.spi.sta
 import org.junit.Before;
 import org.junit.Test;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+
 /**
  * Testcase for {@link 
org.apache.jackrabbit.oak.plugins.index.solr.configuration.UpToDateNodeStateConfiguration}
  */
@@ -47,7 +47,7 @@ public class UpToDateNodeStateConfigurat
     public void testExistingPath() throws Exception {
         String path = "oak:index/solrIdx";
         UpToDateNodeStateConfiguration upToDateNodeStateConfiguration = new 
UpToDateNodeStateConfiguration(store, path);
-        SolrServerConfiguration solrServerConfiguration = 
upToDateNodeStateConfiguration.getSolrServerConfiguration();
+        EmbeddedSolrServerConfiguration solrServerConfiguration = 
(EmbeddedSolrServerConfiguration) 
upToDateNodeStateConfiguration.getSolrServerConfiguration();
         assertNotNull(solrServerConfiguration);
         assertEquals("sh", solrServerConfiguration.getSolrHomePath()); // 
property defined in the node state
         assertEquals("cn", solrServerConfiguration.getCoreName()); // property 
defined in the node state

Added: 
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/server/EmbeddedSolrServerProviderTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/server/EmbeddedSolrServerProviderTest.java?rev=1577192&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/server/EmbeddedSolrServerProviderTest.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/server/EmbeddedSolrServerProviderTest.java
 Thu Mar 13 15:20:59 2014
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.plugins.index.solr.server;
+
+import 
org.apache.jackrabbit.oak.plugins.index.solr.configuration.EmbeddedSolrServerConfiguration;
+import org.apache.solr.client.solrj.SolrServer;
+import org.junit.Test;
+
+import static org.junit.Assert.assertNotNull;
+
+/**
+ * Testcase for {@link EmbeddedSolrServerProvider}
+ */
+public class EmbeddedSolrServerProviderTest {
+
+    @Test
+    public void testSolrServerInitialization() throws Exception {
+        EmbeddedSolrServerConfiguration solrServerConfiguration = new 
EmbeddedSolrServerConfiguration(getClass().getResource("/solr").getFile(),
+                getClass().getResource("/solr/solr.xml").getFile(), "oak");
+        EmbeddedSolrServerProvider embeddedSolrServerProvider = new 
EmbeddedSolrServerProvider(solrServerConfiguration);
+        SolrServer solrServer = embeddedSolrServerProvider.getSolrServer();
+        assertNotNull(solrServer);
+    }
+
+}

Propchange: 
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/server/EmbeddedSolrServerProviderTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/server/RemoteSolrServerProviderIT.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/server/RemoteSolrServerProviderIT.java?rev=1577192&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/server/RemoteSolrServerProviderIT.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/server/RemoteSolrServerProviderIT.java
 Thu Mar 13 15:20:59 2014
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jackrabbit.oak.plugins.index.solr.server;
+
+import 
org.apache.jackrabbit.oak.plugins.index.solr.configuration.RemoteSolrServerConfiguration;
+import org.apache.solr.client.solrj.SolrServer;
+import org.apache.solr.client.solrj.impl.CloudSolrServer;
+import org.apache.solr.client.solrj.request.UpdateRequest;
+import org.apache.solr.common.util.NamedList;
+import org.junit.Test;
+
+import static org.junit.Assert.assertNotNull;
+
+/**
+ * Testcase for {@link RemoteSolrServerProvider}
+ */
+public class RemoteSolrServerProviderIT {
+
+    // common local zk hosts
+    private final String[] zkHosts = new String[]{"localhost:9983"};
+
+    private boolean canCreateCollections(String host) throws Exception {
+        UpdateRequest req = new UpdateRequest("/admin/collections");
+        req.setParam("action", "CREATE");
+        String solrCollection = "solr_" + System.nanoTime();
+        req.setParam("name", solrCollection);
+        req.setParam("numShards", "2");
+        req.setParam("replicationFactor", "2");
+        req.setParam("collection.configName", "myconf");
+        CloudSolrServer cloudSolrServer = new CloudSolrServer(host);
+        NamedList<Object> request = cloudSolrServer.request(req);
+        return request != null && request.get("success") != null;
+    }
+
+    @Test
+    public void testCloudRemoteServerCreation() throws Exception {
+        // do this test only if a Solr Cloud server is available
+        for (String host : zkHosts) {
+            boolean cloudServerAvailable = false;
+            try {
+                cloudServerAvailable = canCreateCollections(host);
+            } catch (Exception e) {
+                // do nothing
+            }
+            if (cloudServerAvailable) {
+                String collection = "sample_" + System.nanoTime();
+                RemoteSolrServerProvider remoteSolrServerProvider = new 
RemoteSolrServerProvider(new RemoteSolrServerConfiguration(host, collection, 2, 
2, null));
+                SolrServer solrServer = 
remoteSolrServerProvider.getSolrServer();
+                assertNotNull(solrServer);
+                solrServer.shutdown();
+                break;
+            }
+        }
+    }
+}

Propchange: 
jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/server/RemoteSolrServerProviderIT.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: jackrabbit/oak/trunk/pom.xml
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/pom.xml?rev=1577192&r1=1577191&r2=1577192&view=diff
==============================================================================
--- jackrabbit/oak/trunk/pom.xml (original)
+++ jackrabbit/oak/trunk/pom.xml Thu Mar 13 15:20:59 2014
@@ -48,8 +48,7 @@
     <module>oak-http</module>
     <module>oak-lucene</module>
     <module>oak-solr-core</module>
-    <module>oak-solr-remote</module>
-    <module>oak-solr-embedded</module>
+    <module>oak-solr-osgi</module>
     <module>oak-auth-external</module>
     <module>oak-auth-ldap</module>
     <module>oak-run</module>


Reply via email to